Почему иногда не стоит изобретать велосипед

В продолжении темы, почему иногда нужно делать свой велосипед, хочу дополнить и расширить эти мысли причинами, по которым этого делать не стоит.

Причина 1. Вы не знаете, как такие велосипеды устроены

Посмотрите внимательно на предыдущий топик. Генри Форд — с детства изучал технику. Его сестра как-то сказала, что в детстве любую игрушку старались спрятать от него, потому что он ее тотчас разберет на винтики. Работал инженером в «Электрической компании Эдисона», был совладельцем «Детройтской автомобильной компании». Он точно знал, что такое — автомобиль. Он точно знал технические нюансы. Он точно знал. что черная краска сохнет два дня, а любая другая — две недели! Ну не из-за прихоти же он однажды сказал, что автомобиль будет только черным.

Игорь Сысоев, прежде чем делать свой nginx, уже имел «достаточно неплохой опыт работы с Apache — и как у системного администратора, и как у программиста».

Знаете ли вы, что вам предстоит на пути создания своего велосипеда? Или просто готовы окунуться с головой, не проверив глубину водоема?

Мы как-то по просьбе своего заказчика сделали реализацию почтовой рассылки, которая делала рассылку новостей зарегистрированным пользователям. И каково было удивление нашего заказчика, когда после первой такой рассылки его заблокировали как спаммера. Пришлось копать дальше, но в итоге оказалось, что гораздо проще интегрироваться с каким-нибудь MailChimp и не изобретать велосипеда. Там не только все продумано, но есть еще и отчеты — сколько прочитало, сколько кликало по ссылкам, сколько нажали «отписаться от рассылки» и другие очень важные моменты, которые заказчик, попросивший «сделайте нам возможность разослать новости нашим пользователям», может захотеть сделать сразу же после реализации базового функционала.

Причина 2. Ваших денег хватит только на покупку готового велосипеда

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

Обычно мы используем пример с BMW X6, но раз уж тема про велосипеды, пускай будет GT.

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

Здесь в дело вступает следующий, более основополагающий вопрос.

Причина 3. Вы работаете над созданием совершенно другого продукта

А над чем вы вообще работаете? Какой у вас план, какая стратегия? Действительно ли этот велосипед будет одной из ключевых особенностей вашего продукта? Или только небольшой фичей?

Делаете удобный сервис для поиска вакансий? Так сосредоточьтесь над инновациями именно в этом направлении! И если все, что вам приходит в голову — сделать еще одну почтовую рассылку, то, может быть, стоит вообще отложить создание такого стартапа? Отвлечься, изучить конкурентов. Подумать, в конце концов, над основными вопросами — мотивации к покупке и способности применять продукт, способности продукта прижиться в реальной среде, составить наглядные графики сравнения создаваемого продукта с конкурентами. Или прекратите обманывать себя — скажите, что вы делаете вовсе не сервис поиска вакансий, а новую службу рассылки.

Чем больше усилий будет вложено в достижение основных целей проекта, тем больше вероятность на успех. Ведь Гугл тратит не 80%, а лишь до 20% времени на эксперименты. Не больше. И не 20% на один велосипед, а 20% на все велосипеды. Оставшиеся «более 80%» тратится на достижение основных целей Гугла.

Как думаете, делал ли Форд свое колесо? А лампочку?

В качестве заключения

Наши заказчики иногда с удивлением смотрят на нас, когда мы задаем им подобные вопросы перед началом работы. И кажется, что таким образом мы уменьшаем объем работы, и что мы заинтересованы как раз таки в обратном. Но это не так. Есть общая карма. И нужно работать на общий результат. Если после выполнения вашей работы в мире поубавилось хаоса, или хотя бы наметился путь создания более эффективного окружения для жизни в этом мире — это и есть успех. Глубокое понимание целей и стратегии продукта, принятие их и участие в планировании — единственный способ добиться совместного успеха, когда вам доверяют гораздо больше, чем просто «кодить».

ссылка на оригинал статьи http://habrahabr.ru/post/170745/

О компиляторах и интерпретаторах


Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.

GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.

Пишет yawnt следующее:

С каждым днём мне всё интереснее тема компиляторов, интерпретаторов и дизайна языков программирования в целом. И я решил поделиться с народом ссылками на собранные мной материалы (большую часть мне самому ещё предстоит прочитать :<). Надеюсь, кому-нибудь они окажутся полезными.

Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.

Всё, конечно же, на английском. Делимся ссылками на русскоязычные материалы (и на существующие переводы перечисленных трудов) в комментариях, господа! Тема безумно увлекательная.

Ссылки

LLVM

Виртуальные машины

Компиляторы

Интерпретаторы

Сборщики мусора

Книги

Компиляторы

Интерпретаторы

Сборщики мусора

Всякий разный код

Оставайтесь на связи.

Оригинальный пост выложен на github, предлагайте автору ссылки, он добавит их в пост.

Уверен, вы знаете ещё миллиард интереснейших источников информации по заданной теме (например, хороший курс есть на Coursera). Делитесь знаниями!

ссылка на оригинал статьи http://habrahabr.ru/post/170735/

Новые доменные зоны типа ".cadillac," ".vegas," и ".music." появятся уже в апреле

Не так давно на Хабре появилась новость о том, что, может быть, в этом году уже появятся новые кирилличиеские доменные зоны вроде ".онлайн.сайт.рус.ком.дети.москва.католик.орг". Собственно, это предположение оказалось правдой, не только для кириллических доменных зон, но и для доменных зон на других языках. В этом году будут введены в работу сотни новых доменных зон.

И это уже не догадки, а подтвержденная информация, предоставленная самой ICANN. Нынешний руководитель ICANN Фади Шехаде сообщил Associated Press о том, что вначале будут введены новые доменные зоны на языках, отличных от английского. Новые же английские доменные зоны будут введены в работу примерно через несколько недель после введения неанглийских.

О количестве же «новинок» на доменном рынке можно только догадываться. Так, на получение новых доменных зон (около 1400) подали заявки около 2 тысяч различных компанией.

По сообщению Associated Press, несколько дюжин новых доменных зон начнут работу уже в апреле. После этого ожидается появление 20 новых доменных зон в неделю.

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

Via CNET + Associated Press

ссылка на оригинал статьи http://habrahabr.ru/post/170747/

Контроллер для умной теплицы

image
Для умного дома есть куча решений, думаю, пора расширяться в сад.
Предлагаю обсудить проект контроллера для умной теплицы.

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

Вот примерный перечень того, что хочется видеть в конечном устройстве:

I этап — базовая функциональность
Минимум 8 каналов для датчиков (влажность воздуха внутри, температура воздуха внутри и снаружи, температура почвы внутри и снаружи, температура воздуха в канале вентиляции, освещенность, 1 резервный);
Отображение показаний датчиков на большом ЖК-дисплее (можно и LCD+тачскрин, но это вроде уже сильно дороже);
Управление исполнительными устройствами:
-открытие/закрытие кранов полива и залива бочек по заданной логике и показаниям датчиков;
-включение/выключение вентилятора (как в одну, так и в другую сторону) по показаниям датчиков и логике;
-включение ночью двух каналов LED-подсветки растений (синий и красный спектр) в разном соотношении, по заданному календарю.

II этап — возможно в виде отдельно подключаемого модуля, ибо не всем нужно
Работа с SIM-картой:
-получение текущей информации о состоянии дел (показания датчиков) по SMS;
-уведомления о критических ситуациях по нескольким номерам;
-управление устройствами командами по SMS;
-передача данных по GPRS/3G (для следующего этапа).

III этап — плюшки
Веб-интерфейс или приложение для Android:
-получение текущей информации о состоянии дел (показания датчиков) по SMS;
-архив показаний, графики;
-управление устройствами через интерфейс;
-изменение настроек и логики;
-веб-камера или получение снимка;
-показ прогноза погоды на ближайшие дни (виджет).

Исходное питание: 12В (автомобильный аккумулятор, заряжается от солнечной батареи независимым контроллером).
Платформа — Arduino/RoMeo/Rapsberry Pi/что-то аналогичное, ибо на рынке полно более-менее стандартизованных сенсоров и исполнительных устройств…
Климатические условия: от -25 до +60, от влажности можно упрятать в герметичный промышленный бокс.

Во сколько может обойтись разработка такого контроллера (по сути больше программирование, ибо стандартизованных датчиков и исполнительных устройств сейчас много)? Если без жадности?
Может есть контроллеры «умных домов», где это все уже реализовано, просто датчики и исполнительные устрйства другого назначения?

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

ссылка на оригинал статьи http://habrahabr.ru/post/170743/

Настройка удаленного входа на MongoDB-сервер

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

Исходные данные:

  • Ubuntu Server 12.04 LTS;
  • MongoDB 2.2.3, запущенная как сервис;
  • python-скрипт, использующий pymongo, которым надо «достучаться» до удаленного mongo-сервера.

Вы уже установили MongoDB? Отлично! Если нет, рекомендую проследовать к вот этот инструкции.

Для начала необходимо проверить, где находится config-файл для mongod, который сейчас запущен. Запускаем терминал и проверяем:

user@ubuntu:/$ ps -ef | grep mongo mongodb  65042     1  0 Feb25 ?        00:07:11 /usr/bin/mongod --config /etc/mongodb.conf user     65343 64749  0 02:40 pts/0    00:00:00 grep --color=auto mongo 

Как видно, в моем случаи он находится в /etc/mongodb.conf. Если запустить:

user@ubuntu:/$ netstat -a 

Можно заметить, что mongod готов принять соединения только от localhost:

tcp        0      0 localhost:27017                 *:*                     LISTEN  

Пора отредактировать config-файл в соответствии с нашими требованиями. Открываем его и делаем ровно 2 изменения:

  1. Раскомментируем строку auth = true, которая включает авторизацию по умолчанию;
  2. Закомментируем строку bind_ip = 127.0.0.1, чтобы соединяться можно было с любого хоста.

Готово! Теперь осталось перезагрузить mongod:

user@ubuntu:/$ sudo service mongodb stop mongodb stop/waiting user@ubuntu:/$ sudo service mongodb start mongodb start/running, process 65404 

Осталось добавить пользователя в БД:

user@ubuntu:/$ mongo MongoDB shell version: 2.2.3 connecting to: test > use mytest switched to db mytest > db.testcollection.insert({"message":"Hello, remote user!"}) > db.addUser('myuser', 'superpassword') { "n" : 0, "connectionId" : 2, "err" : null, "ok" : 1 } { 	"user" : "myuser", 	"readOnly" : false, 	"pwd" : "ecb2c08916b34e477c33c10cec2ae416", 	"_id" : ObjectId("512c6d9dcc5d103a896944ae") } > db.testcollection.find() { "_id" : ObjectId("512c6d85cc5d103a896944ad"), "message" : "Hello, remote user!" } 

Перейдем к другому компьютеру в данной сети для чистоты эксперимента. В вашем случаи, конечно, ip и порт могут отличаться. Выполним там следующий python-скрипт:

from pymongo import MongoClient  mongoserver_uri = "mongodb://myuser:superpassword@10.2.0.182:27017/mytest" conection = MongoClient(host=mongoserver_uri) db = conection['mytest'] collection = db['testcollection'] print collection.find_one() 

После запуска скрипта получаем результат:

{u'message': u'Hello, remote user!', u'_id': ObjectId('512c6d85cc5d103a896944ad')} 

Надеюсь это короткое руководство позволит вам сэкономить время и нервы.

ссылка на оригинал статьи http://habrahabr.ru/post/170741/