LINUX.ORG.RU

Сообщения unikoid

 

Язык выражений для встраивания в приложения

Привет, ЛОР.

Хочу, чтобы ты подсказал мне проект, суть такова. Есть необходимость встроить в приложение (на JS, но это не слишком важно) некий язык выражений.

Важно, чтобы он удовлетворял следующим свойствам:


  • Декларативность
  • Возможность средствами статического анализа на 100% определить корректность выражения, в т.ч. с т.з. семантики (как я понимаю, отсюда следует сильная типизация)
  • Возможность прокинуть в контекст выполнения выражения произвольные объекты из приложения и операции над ними
  • Результатом работы выражений должно быть булево значение (либо, в идеале, произвольный объект)
  • Чем проще синтаксис – тем лучше. Если это будет просто AST в виде JSON-объекта/S-выражения – уже здорово. Полноценный язык не нужен, сложная логика должна выноситься в отдельные операции, описанные на стороне приложения
  • Лицензия, позволяющая модификацию и использование в коммерческих проектах (если такое понятие вообще применимо к языку, а не реализации)


Интересует прежде всего язык, даже если нет готовой реализации под JS, но язык простой – я могу написать её.
Лично я себе это представляю как примерный аналог ElasticSearch Query DSL (решает схожую задачу) или чего-то подобного.

 , , ,

unikoid
()

Использование примеров из GFDL-документации в коде

Есть одна документация с лицензией GFDL. В этой документации есть кусок кода (пример), строк эдак 15. Как я понимаю, лицензия на него тоже распространяется.

Есть приложение с лицензией MIT.
Могу ли я скопипастить пример из документации в код приложения, сославшись на документацию, как источник?

Или такой код будет «производной работой» и должен быть лицензирован под GFDL?

 , ,

unikoid
()

Slowlog-библиотека для C++

Всем привет.

Обычно я не пишу ничего на С++, но время от времени - приходится. В связи с этим, информацией о популярных библиотеках я не владею.

Хочется получить максимально быструю библиотеку, которая позволит логгировать время выполнения какого-то блока кода + некий набор переменных, от которых это время потенциально может зависеть, но делать это не каждый раз, а когда время превышено.

Условно, что-то вроде:

SlowLogger log(100); // max_time=100 мс.
...
log.write("%s", someObj.toString()); // выводим someObj, если с момента создания объекта прошло больше, чем max_time.


Понятно, что можно легко такое навелосипедить самому, но что-то не очень хочется.

 , ,

unikoid
()

Отказоустойчивая балансировка с минимизацией времени ответа

Есть один nginx (бесплатная редакция) и в нем один апстрим с тремя бэкендами. Очень хотелось бы получить следующее поведение:

  • Если у части бэкендов вырастает время ответа (proxy_read_timeout) выше заданного порога - nginx временно отключает их и продолжает ходить в оставшиеся (fail_timeout, max_fails, вот это все).
  • При этом, если время ответа выросло у всех бэкендов сразу - nginx не должен забанить все доступные бэкенды

Можно ли в принципе реализовать такое стандартными средствами?

 

unikoid
()

Есть ли у кого опыт с LoopBack?

subj
Выглядит интересно, на первый взгляд, почитал документацию, потыкал примерчики.
Но непонятно, насколько оно юзабельно для продакшна само по себе, в отрыве от платной подписки на API Connect/StrongLoop Arc.

 ,

unikoid
()

Откуда брать исходники стабильной версии OpenWRT?

Вопрос следующий.
Везде в манах по сборке есть два варианта - сборка из транка и из репозитория ветки (дико звучит, я понимаю), например, 15.05.
На сайте есть бинарные сборки версии, скажем 15.05.1. Как мне собрать такую версию из исходников, где их взять? Я так понимаю, если я возьму ветку 15.05 - там будут свежие коммиты и активная разработка, а стабильность и работоспособность не гарантируется. С транком все потенциально еще хуже. Теги для релизов в гите эти ребята, похоже, не осилили. Коммитов с указанием, что вот этот коммит - версия 15.05.1 - также не нашел.

Может есть здесь знатоки OpenWRT или даже разработчики, дайте мудрых советов.

 

unikoid
()

И снова про HDD.

Всем доброго вечера.

Столкнулся с необходимостью выбора жесткого диска в нижнем ценовом диапазоне. Из требований - цена до 5 российских килорублей, 7200 RPM, максимум надежности (за такие-то деньги, да). Скоростные показатели абсолютно некритичны, объем тоже (меньше 250 сейчас все равно не найти, этого хватит).

Отзывы почитал, судя по всему, Toshiba за эти деньги - вибрации, щелчки и смерть. Seagate 7200.14 - нареканий на надежность много, но их по всем дискам много. Выгоднее всего выглядит WD Blue (WD10EZEX), но есть подозрение, что это просто более агрессивный маркетинг.

Что скажете, господа? Особенно интересует мнение ремонтников, если кто знает профили таковых на ЛОРе - кастуйте.

Да, плюсом. Кто что может сказать про диски «типа для систем видеонаблюдения»? Вроде должны быть помедленнее, на понадежнее, или все тупой маркетинг?

 , , ,

unikoid
()

Реляционные БД и нормализация

Привет, ЛОР.
Сегодня я хочу оторвать тебя от традиционных срачей про функциональщину и все остальное, от бесчисленных тем про проблемы написания и сборки приложений на С и С++. Я хочу поговорить с тобой о базах данных, в частности о реляционной модели, нормализации, и о том, как все это применять в реальной жизни.

Начну сразу с примера. Он основан на реальном проекте, разве что имена действующих лиц несколько изменены.
Предположим, что у меня есть набор компаний. Каждая компания владеет несколькими заводами. Каждый завод выпускает некоторое количество видов товаров. Компании могут оставлять заявки на закупку товаров у других компаний. Для упрощения, в одной заявке можно указать только один вид товара.

Возьмем компанию Х. Для нее нужно вывести два простых списка:
1. Список заявок на закупку товаров у компании Х. В списке должны фигурировать, как минимум, название товара и компания-контрагент.
2. Список заявок на закупку товаров самой компанией Х у других. Требования аналогичные.

Согласно реляционной модели, здесь выделяются сущности: Компания, Завод, Товар, Заявка. Между ними есть связи: Компания -< Завод, Завод -< Товар, Товар -< Заявка, Компания -< Заявка, где -< обозначает связь один ко многим.

Это приводит нас к весьма нетривиальным запросам вида

SELECT <some shit> FROM Factories, Products, Orders, Companies, WHERE Factories.company_id = $1 AND Products.factory_id = Factories.id AND Orders.product_id = Products.id AND Companies.id = Orders.company_id;

- это запрос на выдачу первого списка, всего-то соединение четырех таблиц, пусть и по ключам, пусть и с индексами. Насколько я знаю, соединение - тяжелая операция и меня терзают смутные сомнения, что уже на десятках тысяч товаров и заявок в БД, допустим, такие запросы будут тупить-тормозить (если речь идет о веб-сервисе, для которого приемлемое время ответа под нагрузкой - ну пусть полсекунды, хотя и это - много).

Неужели люди реально вот с этим всем живут? Что предлагается делать в таких случаях? Партиционирование, чтобы всякие архивные заявки и ныне не выпускаемые товары задвигать подальше, т.к. они нужны раз в год? Место действия - postgresql, если это важно.

Я понимаю, что нормализация - она совсем не учитывает производительность, ок, какой разумный вариант денормализации можно предложить для такого случая? С одновременным минимумом шансов прострела ноги и ощутимым упрощением запросов.

Вопрос на закуску. Помогут ли в данном случае какие-либо NoSQL-решения? Я думал об этом, но реальных плюсов от использования тех же документо-ориентированных БД для данного случая не нашел.

-- Да, заранее отвечаю на потенциальные вопросы: нет, это НЕ студенческая лаба, к большому сожалению и ДА, я не работаю архитектором баз данных и имею довольно фрагментарные сведения о данной области.

 , ,

unikoid
()

Книга по истории экономики

Не знаю, как правильно описать, в общем разыскивается $subj. Хочется, чтобы простым и понятным языком было описано, как человечество докатилось с натурального обмена и использования монет из камней и ракушек до HF-торговли фьючерсами и криптовалют и как это все работало/работает/не работает.
Посоветуйте что-нибудь?

 , , ,

unikoid
()

Чатик на WebRTC - имеет ли смысл

Решил для общего развития поковырять WebRTC и попробовать сделать на нем p2p-чатик (сначала текстовый, а затем может и видео прикрутить).

Изначально планировалось, что своего рода фишкой чатика будет являться почти не нагруженный бэкенд, так как сами сообщения будут передаваться между пользователями напрямую.
То есть в бэкенде будет только авторизация пользователя и хранение-отдача списка контактов и комнат.
Позже пришло осознание того, что категорически неплохо было бы сохранять историю. Была мысль сделать сохранение истории с помощью вообще отдельного сервиса-бота, который автоматически добавляется в любой чат и сохраняет все, что видит. Также была мысль просто постить ее на сервер с помощью XHR или WebSocket. В общем, сомнения закрались уже в этот момент, но я решил все же пойти дальше и почитать про WebRTC.
Из чего получается, что связь с бэкендом аля вебсокет мне нужна в любом случае, чтобы рассказывать пирам друг про друга. А еще, в идеале, нужен STUN или TURN сервер, хотя есть и публичные.
Итого, единственное, что я экономлю в сравнении с классическим websocket-чатом - это работу сервера и трафик на рассылку сообщений от одного клиента всем участникам комнаты.

Исходя из простыни выше два вопроса:
1. Если бы речь шла не о поделке для себя, а о продакшн решении с большой пользовательской базой - была бы ощутима экономия от использования webrtc?
2. Выбирая между отправкой истории на сервер самим клиентом и подключением к чату бота, который сохранял бы историю, какой вариант выбрали бы вы и почему?
Меня вариант с ботом привлек тем, что во-первых, не нужно писать клиентский код для логгирования (и дублировать его, если захочется заиметь клиентов под другие платформы), во-вторых, можно складывать логи на любой сервер (в случае с отсылкой их, нужно было бы отдельно как-то авторизовывать клиента еще и на сервере логов).

 , ,

unikoid
()

О квалификации разработчиков.

Вот тут в соседнем танцпол треде подняли вопрос наличия/отсутствия синьоров девелоперов.

В связи с этим, у меня возник другой вопрос.
А по каким критериям, собсно, можно отнести того или иного разработчика к синьору или миддлу? Что от них требуется?
С джунами все в целом понятно, знания не слишком уложившиеся в голове и теоретические практики нет совсем, либо немного. Что-то писать может, но это что-то требует серьезной доработки напилингом, чтобы быть стабильным и поддерживаемым.

А что должен знать/уметь синьор? Понятно, что это еще зависит от конкретной области, пусть для примера будет web backend разработка, это сейчас популярно и везде нужно.

 

unikoid
()

Онлайн-музей программного обеспечения

Привет, ЛОР. С новым годом тебя.

Интересует, видел ли кто $subj?
Я себе его представляю как сайт, на котором в худшем случае можно посмотреть скриншоты/видео софта различной степени свежести (чем несвежее - тем лучше), почитать историю создания и развития, опционально - скачать дистрибутив/исходники.
А в лучшем - получить интерактивную демонстрацию в эмуляторе той платформы, под которую этот софт создавался.

Если под первое худо-бедно подходит википедия, то второго я совсем не встречал, хотя возможности современного интернета - вполне позволяют.

 ,

unikoid
()

Фриланс vs работа в компании

Привет, ЛОР.
И вновь я пришел к тебе за советом. Точнее, не столько за советом, сколько за разными точками зрения.

Суть вопроса в том, что сейчас я встал перед выбором.
С одной стороны, есть потенциальная возможность попасть в довольно неплохую крупную IT-компанию и получить там много интересного опыта. Разумеется, за средненькую ЗП, разумеется, работая минимум по 8 часов в день (как это, имхо, всегда и бывает в больших компаниях).
С другой стороны - можно уйти во фриланс за кровавые доллары, получать куда больше, работая при этом куда меньше (небольшой, но позитивный опыт есть у меня лично, также есть знакомые с бОльшим опытом). Но такого опыта, как в крупной компании, получить вряд ли удастся.

В краткосрочной перспективе плюсы и минусы обоих вариантов, в целом, понятны. По сути, выбор стоит между долгим обучением с какими-то возможными вариантами карьерного роста и «быстрыми» деньгами для решения сиюминутных материальных проблем. Но вот как-то прикинуть, куда я приду в итоге (лет так через 5-10), выбрав любой из них - не получается, не хватает жизненного опыта и понимания работы рынка труда.

На ваш взгляд, чем лучше заниматься в молодости - обучением и получением опыта или же, прежде всего, скорейшим решением материальных проблем (хотя бы отдельное собственное жилье в хорошем месте)?

З.Ы. Прекрасно понимаю, что решение принимаю только я, просто любопытно увидеть и проанализировать различные точки зрения.

 ,

unikoid
()

Есть у кого опыт с Sails.js?

Заинтересовался тут всякоразными фреймворками для nodejs и наткнулся на $subj.
Выглядит неплохо, но отзывов в сети нашел не слишком много.
Есть ли здесь те, кто использовал для реальных проектов?
Какие сильные/слабые стороны, подводные камни были выявлены в процессе эксплуатации?

Не хочется начать делать проект, а потом понять, что фреймворк не оправдывает ожиданий и проще было сделать все руками, по старинке.

 ,

unikoid
()

Управление библиотеками внутри проекта

Не смог придумать более адекватного заглавия, в общем суть такова:
Есть проект на nodejs. В нем есть некоторые модули, которые выполняют различные служебные функции и используются всеми остальными модулями. Своего рода библиотеки, но не сторонние, а внутренние, специфичные для проекта. Пусть все они лежат в поддиректории ./lib.

Хотелось бы иметь доступ к таким библиотекам из любого другого модуля проекта без указания относительного пути, т.е. чтобы вместо require('../../../lib/cool') можно было сделать что-то в стиле require('lib/cool') или require('cool').

Решения, которые я вижу (беглый поиск в интернете других не дал):
1. Использовать $NODE_PATH. Не хочется, т.к. нужно либо писать скрипт-обертку, который будет выставлять нужный $NODE_PATH и запускать проект, либо еще хуже, добавлять в каждой системе в .bashrc или куда-то еще.
2. Использовать require.paths. Тут приходит на помощь официальная документация, которая как бы говорит нам: «**Note:** Please Avoid Modifying `require.paths`».
3. Сделать симлинк директории проекта с библиотеками в node_modules, типа ln -sr ./lib ./node_modules. Естественно, делать это в установочном скрипте. Не самое очевидное решение, разработчику, который придет в этот проект с улицы не сразу станет понятно, откуда именно берется lib/cool. Плюс платформоспецифичное, для оффтопика - свои костыли.
4. Использовать костыль типа определения globals.LIB_PATH или process.LIB_PATH и делать require(path.join(LIB_PATH, 'cool')). И некрасиво, и в случае чего нужно искать, кто и где создает LIB_PATH. Да и вообще я как-то против глобальных переменных в принципе.
5. Сделать в ./lib npm-пакет и добавить его основному модулю в зависимости. И на каждое изменение в lib запускать npm install, нет спасибо.
6. Один раз при старте проекта сделать global.Lib = require('./lib') и везде использовать этот global. Очень плохое решение, из-за опасности конфликта имен.

Какой бы способ выбрали вы (или может уже используете)?
Пока склоняюсь к третьему, мне он кажется наиболее прозрачным и беспроблемным.

 ,

unikoid
()

Понаехать в Новосибирск

Есть желание покинуть, наконец, свое болото и перебраться в более крупный город.
Прежде всего, с целью набраться опыта в профессии (и материальное положение поправить, по возможности), да и просто сменить обстановку, обрести какие-то перспективы развития.
В ДС/ДС2 пока не хочу, думается мне, что там и без меня народу хватает, тем более что опыта у меня не слишком много.
Поэтому рассматриваю города поменьше. Пока на примете Екатеринбург (но это севернее, чем хотелось бы, да и сам город не слишком нравится) и Новосибирск. Как я понимаю, других городов, где есть нормальная работа программисту IT с приемлемой зарплатой и перспективами развития, особо нет.

В связи с этим, возникло несколько вопросов местному населению.
1. У меня есть впечатление, что в Новосибирске как-то все получше с работой в IT, чем во всех остальных городах, кроме Москвы и СПб. Это действительно так?
2. На какую типичную зарплату можно рассчитывать junior/middle developer'у?
3. Сколько, в среднем, стоит снимать укомплектованную 1к квартиру в приличном районе?
4. Как город в плане криминализованности? В смысле, насколько велик шанс нарваться на каких-нибудь гопников/автоподставщиков/прочий мелкий скам?
5. Может и глупый вопрос, но какова летом концентрация комаров и прочих кровососущих? Сам я родом из Хабаровска и попасть в подобный москитный рай не хотелось бы.

Ну и в целом, одобрите/отговорите, что ли.

 , ,

unikoid
()

Разработка кроссбраузерных расширений

Задумал тут написать одно расширение, для себя, а в дальнейшем, возможно, и для людей.
Писать буду под chromium и ff.
Насколько я вижу, API для расширений у этих браузеров принципиально разное. Вся нехитрая логика у меня тесно завязана на эти API. Чистым HTML5 и браузерным JS я обойтись не смогу, так как мне, как минимум, доступ к табам нужен.
Из этого вопросы:

  1. Может быть, кто-то видел вообще свободный фреймворк для разработки кроссбраузерных расширений, который бы предоставлял браузеронезависимый унифицированный API? Я осилил найти только проприетарные поделия разной степени бесплатности и некий babelext, не сильно живой, на первый взгляд.
  2. Если нет такого решения, стоит ли самому пытаться выделить логику и не дублировать ее, путем ввода дополнительной прослойки для взаимодействия с браузерным API? Или проще держать два полностью раздельных проекта? Есть подозрения, что в итоге большая часть кода придется именно на эту прослойку и получится лишь переусложнение, без видимой пользы.

Ну и вообще, рад буду в треде любому, кто имел дело с разработкой расширений и может дать полезные советы.

 , ,

unikoid
()

Беспроводное устройство стало жрать батарейки

Есть один Logitech Wireless Touchpad.
Пользуюсь им около года и заметил, что с течением времени батареек стало хватать на все меньшее количество времени.
Могли ли какие-то компоненты в устройстве деградировать от времени, увеличив энергопотребление? Или это у меня параноидальный бред и амнезия, и на самом деле я и раньше также часто батарейки менял?
Если все же компоненты - куда смотреть, что и как проверять, чтобы поменять?

 , ,

unikoid
()

Куда податься?

Привет всем.

После долгого воздержания от ЛОРа я вновь вернулся просить совета у местных специалистов по всему. Дальше будет жж, наверное, так что заранее прошу прощения, больше как-то и спросить не у кого.

В общем, так исторически сложилось, что я - веб-программист. Мне очень стыдно, но тем не менее, это факт, который можно только принять и попытаться изменить. Изначально я относился к веб-программированию с пренебрежением, потом, когда устроился на первую работу - мне даже некоторое время нравилось, но теперь все вернулось на круги своя. При этом, само программирование как занятие - мне нравится и хочется расти и развиваться в этой области. Глупым тоже себя не считаю, хотя недостаток образования и фрагментарность знаний имеется.

Соответственно, возникают вопросы.

  1. В каком направлении двигаться? Я, как минимум, даже не знаю, какие сейчас области и направления популярны, где нужны специалисты и где решаются действительно полезные, интересные и сложные задачи.
  2. С чего начать? Понятно, что с чтения книжек и документации (наверняка, помимо самого программирования понадобится математика/электроника/что-то еще смежное). Подумываю, в свободное время, участвовать в свободных проектах, чтобы набраться опыта и заодно было что потом показать при трудоустройстве по выбранному направлению. Годная идея?
  3. А лучше ли вообще быть хорошим узкоспециализированным специалистом, чем знать понемногу и везде? Сейчас я, с одной стороны, в основном веб-программист. С другой стороны, я за годы работы вроде бы веб программистом и базы данных оптимизировал, и с распознаванием изображений сталкивался, и десктопные приложения писал, и руководил немного, и с железками сталкивался (ну на уровне ардуины и малины, не больше). Не говоря уже про решение всяких задач администрирования и тому подобного. Но глубоких знаний, кроме веба, нигде нет, там кусок, тут кусок. Да и в вебе не поспеваю за всеми новомодными фишечками. Но, кмк, с точки зрения потенциального роста, в т.ч. финансового, лучше быть редким и востребованным специалистом в чем-то конкретном, нежели вот таким вот «везде понемногу».

В общем, прошу мудрых советов. Ссылки категорически приветствуются.

 , ,

unikoid
()

«Правильные» выплаты по партнерке

Привет специалистам по всему.
Есть один вебсайт и на нем есть партнерская программа и другие мелкие вкусности, привлекающие клиентов денежными выплатами.
Раньше все это как-то работало (наверняка, не совсем законно), и всем было в целом пофигу (и это печально).

Но сейчас все поменялось и возникла следующая проблема. Насколько я (и бухгалтер конторы тоже) понимаю, чтобы платить людям деньги, контора должна выступать в качестве налогового агента и выплачивать за них НДФЛ и взносы в соц.фонды. Для этого нужно заключить с людьми договор и получить с них некислый набор истинных персональных данных, причем истинность этих данных узнать не представляется возможным (даже если запрашивать сканы реальных документов, на них можно нарисовать что угодно).

Все это крайне грустно, но возникает естественный вопрос: сейчас множество сайтов в сети предоставляет партнерки и прочие выплаты, вряд ли все они имеют проблемы с налогами. Значит, должен быть способ легальных выплат.
Возможно, кто-то из вас может рассказать о нем? Или хотя бы направить, куда погуглить.

//Linux тут при том, что сайт, как и куча всяких сервисов под ним, работают под Linux, разумеется.

 ,

unikoid
()

RSS подписка на новые темы