Стоит ли передать проект в open source? Вообщем, есть у меня собственноручно написанный парсер-вычислитель математических выражений и функций (java, и, соответственно, прекрасно себя чувствующий на Android). Я его использую в одном своем проекте (коммерческом), но сам по себе парсер тоже неплох и, возможно, пригодился бы кому-то еще. Преимущества: 1. Самостоятельность. Не нужно никаких дополнительных библиотек. Просто вставить проект и пользуйтесь на здоровье. 2. Многофункциональность. Работает не только с элементарными операциями, но и с функциями, соблюдая все математические законы о порядке проведения операций. Выражение вида "2+3/7*10^45-sin(log(4,19.5)+exp(2^arctg(x^8)))" он разбирает как гопник семечки. 3. Расширяемость. Новые функции добавляются очень просто и их можно внести хоть миллион. Просто указать в одном месте название функции и количество аргументов. Например ("sinh",1), а в другом месте прописать switch sinh: res=Math.sinh(arguments[0]) ; break ;. 4. Может работать с функциями с любым количеством аргументов. Просто пишете функцию ("2+x-cos(y)/e^(8*sin(t))"), указываете имена переменных ("x","y","t"), а в вызове «вычислить» передаете значения переменных в том же порядке. 5. Возможность указать несколько вариантов написания функции. Например, арктангенс: напишите "arctg", "arctan" или даже "atan" — парсер вас поймет. Данная возможность реализуется описанием функции: по аналогии с sinh из пункта 3: functions.add(Functions.sinh, 1, "sinh", "sinhyperbolic"). Первый аргумент — как функция значится в enum для case'a, второе — кол-во аргументов (парсер высчитывает, сколько аргументов в скобках, и, если оно не соответствует заявленному количеству, возвращает ошибку), а третье — варианты написание через запятую: хоть одно, хоть сто. Недостатки: 1. Скорость работы. Никакой компиляции, перевода в байт код и прочее. По моим тестам, вычисление выражения занимает в 10 раз больше времени, чем то же выражение/функция, вписанные в исходник. Парсинг, естественно, отдельный вопрос, но если вам нужно вычислять фунции, то парсинг проводится лишь один раз, а далее значения переменных просто подставляются в готовую таблицу вычислений. 2. Пока что, недостаточное покрытие тестами. Не хватает времени. Было бы неплохо, чтобы протестировали сторонние люди. 3. Если нужны точные десятичные вычисления (банковские проценты и налоги) — двоичная double-логика не лучший выбор. Особенности: 1. Вся внутренняя логика работает с double-значениями. 2. Выражение или функция передаются в парсер как строки. Как строки подаются и имена аргументов функции. Значения переменных передаются в double или String, который автоматом переводится в double. 3. Принцип работы основан на построении таблицы вычислений. Есть массив значений, есть массив операций. В каждой операции есть свойства, в какую ячейку массива значений записать результат, из каких ячеек брать аргументы. Парсер, на основании выражения, строит таблицу вычислений и вписывает в таблицу значений все исходные данные, после чего вычисляющий модуль берет оба масссива и проходится по таблице вычислений, записывая результаты в таблицу значений. В конце прохода результат лежит в первой ячейке таблицы значений. Если вычисляется функция, то перед выполнением вычислений значения переменных записываются в соответствующие места в таблице значений, после чего выполняется вычисление по заранее спарменому алгоритму. Что еще будет сделано: 1. Нет поддержки функций вида "2!" или "12%" Конечно, можно заменить "fact(2)" и "perc(12)" (см. Преимущества, пункт 3), но хочется все таки сделать по человечески. 2. Возможность работать с десятичной логикой (пока под вопросом). Возможно, стоит использовать другую открытую библиотеку для этого, вместо написания своего велосипеда. Советы и ссылки по этому вопросу очень пригодятся. 3. Пожелания пользователей… Где можно использовать: 1. Супер-пупер калькуляторы. 2. Построители графиков. 3. Любые другие приложения, где нужно что-то вычислять, но заранее неизвестно, что именно… В чем, собственно, вопрос: 1. Нужно ли это кому-то? Или лучше не морочить себе голову? 2. Если публиковать — под какой лицензией? Мне нужно, чтобы это можно было распространять свободно и использовать где и как угодно. Исходники, естественно, открытые. Но, при этом, с правом использовать в проприетарных и платных продуктах — ведь некоторые лицензии этого не допускают.UPD: 3. Где выкладывать? GitHub? Есть еще какие-то сервисы? Для моего проекта его возможностей хватает с головой, но готов я его развивать потихоньку, уделяя этому несколько часов в неделю — лишь бы это принесло кому-то пользу. За ответы и советы заранее спасибо.
Ответ на вопрос, стоит ли передавать проект в open source, зависит от ваших целей и желаний. Если вы хотите поделиться своим проектом с другими разработчиками и помочь им в создании своих приложений, то передача проекта в open source может быть отличным решением. Это также может способствовать улучшению проекта за счет внешних вкладов и обратной связи.
Что касается лицензии, вы можете выбрать лицензию, которая позволит другим использовать ваш проект в любых целях, включая проприетарные и платные продукты. Некоторые из таких лицензий это MIT, Apache или BSD.
Где выкладывать проект? GitHub является одним из самых популярных сервисов для хостинга open source проектов, но также существуют и другие альтернативы, такие как GitLab, Bitbucket и SourceForge.
Если вы уверены, что ваш проект может пригодиться другим разработчикам и вы готовы уделять время его развитию, то передача проекта в open source может быть отличным решением. Не забывайте также о важности покрытия тестами и обратной связи от сообщества.
Ответ на вопрос, стоит ли передавать проект в open source, зависит от ваших целей и желаний. Если вы хотите поделиться своим проектом с другими разработчиками и помочь им в создании своих приложений, то передача проекта в open source может быть отличным решением. Это также может способствовать улучшению проекта за счет внешних вкладов и обратной связи.
Что касается лицензии, вы можете выбрать лицензию, которая позволит другим использовать ваш проект в любых целях, включая проприетарные и платные продукты. Некоторые из таких лицензий это MIT, Apache или BSD.
Где выкладывать проект? GitHub является одним из самых популярных сервисов для хостинга open source проектов, но также существуют и другие альтернативы, такие как GitLab, Bitbucket и SourceForge.
Если вы уверены, что ваш проект может пригодиться другим разработчикам и вы готовы уделять время его развитию, то передача проекта в open source может быть отличным решением. Не забывайте также о важности покрытия тестами и обратной связи от сообщества.