Pull to refresh
0
0
Send message

9 фактов, которые знают программисты, и не знают все остальные

Reading time3 min
Views190K
image

Факт 1


Под капотом самых критичных программ, которые вы используете на ежедневной основе (Mac OS X или Facebook) содержится ужасное количество хаков и костылей, которые с трудом уживаются друг с другом. Это как если бы вы разобрали боинг 747 и увидели, что топливопровод держится вешалкой для одежды, а шасси смотаны изолентой.

Бен Черри
Читать дальше →
Total votes 237: ↑164 and ↓73+91
Comments88

Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$

Reading time3 min
Views313K


В последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.
Читать дальше →
Total votes 50: ↑49 and ↓1+48
Comments74

Я всё ещё здесь: возвращение в Cеть спустя год без Интернета

Reading time9 min
Views268K


Я был неправ.

Год назад я покинул Интернет. Я думал, что он пагубно влияет на мою продуктивность. Я думал, что ему не хватает смысла. Я думал, что он «развращал мою душу».

Уже год прошёл с тех пор, как я «сёрфил по Сети» или «проверял почту» или «лайкал» что-либо в фигуральном смысле заместо обычного «пальца вверх». Я научился оставаться отключённым, как и планировал, я свободен от Интернета.

Теперь я собираюсь рассказать вам, как всё это решило мои проблемы. Я собирался быть просвещённым, более «реальным». Более совершенным.

На самом деле сейчас 8 вечера, и я только проснулся. Я спал весь день, проснулся с восемью сообщениями на голосовой почте от друзей и коллег. Я пошёл в своё обычное кафе за обедом, игрой Knicks, двумя моими газетами и копией The New Yorker. А сейчас я смотрю «Историю игрушек», попутно уставившись и моргая на мигающий курсор в этом текстовом документе, надеясь, что он напишет себя сам, сгенерирует те прозрения моей жизни, которых я не смог достичь.

Я не хотел встречать такого Пола в конце моего годового путешествия.
Читать дальше →
Total votes 215: ↑168 and ↓47+121
Comments147

Casetop превратит любой смартфон в ноутбук/нетбук

Reading time1 min
Views68K


Помню, мне очень понравилась идея Padfone от Asus, когда телефон вкладывается в планшет, а планшет превращается в ноутбук, как говорят, легким движением руки. Даже собрался купить сей девайс, но внешний вид, собственно, телефона, не очень понравился, и покупка не состоялась. Теперь появился проект, цель которого — дать возможность любому смартфону (с Bluetooth и видеовыходом) побыть ноутбуком. Проект получил название Casetop и сейчас он активно собирает средства на Kickstarter.

Читать дальше →
Total votes 49: ↑39 and ↓10+29
Comments69

Легкий способ научиться слепому десятипальцевому набору

Reading time3 min
Views1.2M
Традиционно рекомендации по обучению десятипальцевой печати сводятся к двум советам:
  • тратить нервы на клавиатурные тренажеры вроде пресловутого «Соло на клавиатуре»;
  • заклеить подписи на клавишах.

Научиться печатать на клавиатуре вслепую при помощи этих способов — издевательство над собой. Каждый, кто пробовал «Соло», хотя бы раз в ярости бил по клавиатуре кулаком, и практически никто не дошел до конца. А кто пробовал заклеивать надписи на клавишах, вскоре отрывал наклейки обратно, потому что без навыка и без подписей печатать невозможно, а жить дальше как-то надо.

Что если я скажу вам, что есть абсурдно простой, состоящий из одного пункта способ научиться слепой печати без этих дурацких органичений?
 

Читать дальше →
Total votes 88: ↑76 and ↓12+64
Comments234

Точность метеорологических прогнозов

Reading time2 min
Views25K
Разнообразие температур, наблюдающееся этой зимой, напомнило мне о проекте MyCli.me Хабраюзера aib, собирающего прогнозы погоды сразу с нескольких гидрометеорологических сайтов и позволяющего путем усреднения «в голове» повысить их точность.

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

Но мне хотелось более продолжительной и «взвешенной» оценки.
Читать дальше →
Total votes 57: ↑55 and ↓2+53
Comments38

Auto provisioning для Fanvil BW210P

Reading time7 min
Views14K


В нашем офисе для IP телефонии используются аппараты Fanvil. Насколько оправдан выбор в пользу более дешевой китайской продукции покажет время, а я расскажу о том как реализовал механизм auto provisioning на моделях Fanvil BW210P.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Тестирование проекта Ext.Js на Selenium

Reading time5 min
Views13K
Есть три вещи, которые можно делать бесконечно:
1. Наблюдать, как горит огонь
2. Наблюдать, как бежит вода
3. И наблюдать, как кто-то работает

В нашем случае, наблюдать за тем, как крутятся наши over 9000 тестов. Особенно красиво смотрятся Selenium тесты. Выглядит, как будто бешеный тушканчик с вечным двигателем внутри сел тестировать систему.

Не знаю как вас, но меня это затягивает:


Остаток статьи я расскажу маленькую success-story о том, как мы организовали наше тестирование на Selenium
Подробности
Total votes 22: ↑19 and ↓3+16
Comments20

Удаленное редактирование файлов в Sublime Text 2 по SSH

Reading time1 min
Views43K
Речь пойдет об использовании rmate, небольшого скрипта позволяющего из консоли открыть удаленный документ в локальном текстовом редакторе, вместо nano или vim, он был написан для TextMate и те кто перешел на ST2 с этого редактора, наверняка пользуются этим инструментом, да и «матерые разрабы» не найдут в посте много нового, но если вы только начали пользоваться ST2 и единственный инструмент удаленного редактирования о котором вы слышали, это плагин SFTP, добро пожаловать под кат за подробностями.
Читать дальше →
Total votes 28: ↑22 and ↓6+16
Comments23

Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое

Reading time16 min
Views40K
Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

Введение


С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
Статья большая, так что будет поделена на логические блоки:

0. Зачем вообще что-то оптимизировать?
  
1. Оптимизация ОС (FreeBSD)
  1.1 Переход на 7.х 
  1.2 Переход на 7.2
  1.3 Переход на amd64
  1.4 Разгрузка сетевой подсистемы
  1.5 FreeBSD и большое кол-во файлов
  1.6 Softupdates, gjournal и mount options
  
2. Оптимизация фронтенда (nginx)
  2.1 Accept Filters
  2.2 Кеширование
  2.3 AIO
  
3. Оптимизация бэкенда
  3.1 APC
  3.1.1 APC locking
  3.1.2 APC hints
  3.1.3 APC fragmentation
  3.2 PHP 5.3
  
4. Оптимизация базы данных
  4.1 MySQL 
  4.1.1 Переход на 5.1
  4.1.2 Переход на InnoDB
  4.1.3 Встроеный кеш MySQL - Query Cache
  4.1.4 Индексы
  
4.2 PostgreSQL
  4.2.1 Индексы
  4.2.2 pgBouncer и другие.
  4.2.3 pgFouine
  
4.3 Разгрузка базы данных
  4.3.1 SphinxQL
  4.3.2 Не-RDBMS хранилище
  4.4 Кодировки
  4.5 Асинхронность
  
Приложение. Мелочи.
  1. SSHGuard или альтернатива.
  2. xtrabackup
  3. Перенос почты на другой хост
  4. Интеграция со сторонним ПО
  5. Мониторинг
  
 6. Минусы оптимизации

Кому что-нибудь из этого списка интересно, жмём сюда...
Total votes 375: ↑368 and ↓7+361
Comments105

Редкие фичи nginx: mod_zip

Reading time2 min
Views6.8K
Раз уж зашел разговор о редких и полезных модулях для nginx — я расскажу вам об онлайн упаковщике ZIP файлов для nginx. Он позволяет на лету формировать ZIP архив из заданного списка файлов с возможностью многопоточной скачки и докачки файла, но без сжатия.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments15

Управление голосом в приложениях на Android

Reading time4 min
Views19K


Началось все с того, что я посмотрел неплохой обзор (сравнение) Siri и Google Now. Кто из них лучше, спорить не буду, однако у меня лично планшет на Андроиде. Я подумал, а что если написать калькулятор полностью на голосовом управлении (удобно ли будет?). Но для начала пришлось немного разобраться с самим голосовым управление, точнее говоря с голосовым вводом (управления еще добиться надо). Кроме того, я только что скачал Android Studio, и мне не терпелось скорей опробовать ее на практике (ну на минипроекте). Что ж, начнем.

Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments17

Собираем данные с помощью Scrapy

Reading time4 min
Views116K
Здесь уже проскакивали вскользь упоминания об этом фреймворке для сбора данных. Инструмент действительно мощный и заслуживает большего внимания. В этом обзоре я расскажу, как

scrapy

  • создать паука, выполняющего GET запросы,
  • извлекать данные из HTML документа,
  • обрабатывать и экспортировать данные.





Читать дальше →
Total votes 87: ↑85 and ↓2+83
Comments49

Оперативная реакция на DDoS-атаки

Reading time4 min
Views51K
Один из ресурсов, за которым я присматриваю, вдруг стал неожиданно популярным как у хороших пользователей, так и у плохих. Мощное, в общем-то, железо перестало справляться с нагрузкой. Софт на сервере самый обычный — Linux,Nginx,PHP-FPM(+APC),MySQL, версии — самые последние. На сайтах крутится Drupal и phpBB. Оптимизация на уровне софта (memcached, индексы в базе, где их не хватало) чуть помогла, но кардинально проблему не решила. А проблема — большое количество запросов, к статике, динамике и особенно базе. Поставил следующие лимиты в Nginx:

на соединения
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 100;

и скорость запросов на динамику (fastcgi_pass на php-fpm)
limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s;
limit_req zone=dynamic burst=10 nodelay;

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

Но плохиши продолжали долбить, и захотелось их отбрасывать раньше — на уровне фаервола, и надолго.

Сначала сам парсил логи, и особо настырных добавлял через iptables в баню. Потом парсил уже по крону каждые 5 минут. Пробовал fail2ban. Когда понял, что плохишей стало очень много, перенёс их в ipset ip hash.

Почти всё хорошо стало, но есть неприятные моменты:
— парсинг/сортировка логов тоже приличное (процессорное) время отнимает
— сервер тупит, если началась новая волна между соседними разборками (логов)

Нужно было придумать как быстро добавлять нарушителей в черный список. Сначала была идея написать/дописать модуль к Nginx + демон, который будет ipset-ы обновлять. Можно и без демона, но тогда придётся запускать Nginx от рута, что не есть красиво. Написать это реально, но понял, что нет столько времени. Ничего похожего не нашёл (может плохо искал?), и придумал вот такой алгоритм.

При привышении лимита, Nginx выбрасывает 503-юю ошибку Service Temporarily Unavailable. Вот я решил на неё и прицепиться!

Для каждого location создаём свою страничку с ошибкой
error_page 503 =429 @blacklist;

И соответствующий именованный location
location @blacklist {
    fastcgi_pass    localhost:1234;
    fastcgi_param   SCRIPT_FILENAME    /data/web/cgi/blacklist.sh;
    include         fastcgi_params;
}

Дальше интересней.
Нам нужна поддержка CGI-скриптов. Ставим, настраиваем, запускаем spawn-fcgi и fcgiwrap. У меня уже было готовое для collectd.

Сам CGI-скрипт
Читать дальше →
Total votes 57: ↑50 and ↓7+43
Comments50

Как почти забесплатно получить диплом магистра от университета Карнеги Меллон по Software Engineering

Reading time2 min
Views37K
Есть возможность почти забесплатно получить Магистерский диплом университета Карнеги Меллон (CMU) по Software Engineering. Если есть желающие поучиться на одной из лучших в мире програм — см. ссылку ниже. Это professional master degree, не для разработчика, а руководителя программного проекта. Выходцы из нее часто попадают на позиции CTO. Программа считается одной из самых лучших и наиболее востребованных в мире, так как выпускники:
  • получают самые высокие стартовые зарплаты в ИТ-индустрии по сравнению с выпускниками других вузов мира,
  • имеют абсолютное конкурентное преимущество на рынке труда среди рекрутеров (по рейтингу Wall Street Journal).

Проблема в дедлайне. Организаторы, кого я лично знаю, собирают заявки на 15 мест до 21 апреля, так что надо спешить. Однако, поскольку организаторы хотят выбирать из достойных кандидатов, реальный дедлайн: до 1 мая! innopolis.ru/university/priem_zayavok_na_obuchenie2

Эта новость, для тех, кто интересуется образованием за рубежом и умеет быстро реагировать на новые возможности, которые могут круто повернуть жизнь.

UPDATE: Поздравления 15 победителям Конкурса! innopolis.ru/university/rezultaty_konkursa Интересно, a сколько человек из победителей узнали о Конкурсе их этого поста на Хабре?

Читать дальше →
Total votes 45: ↑32 and ↓13+19
Comments38

Как мы делали Яндекс.Диск: серверная сторона, WebDAV и Erlang

Reading time5 min
Views51K
На прошлой неделе Яндекс.Диску исполнился год, и за этот год сервисом успели воспользоваться уже больше 8 000 000 пользователей.

А сейчас мы продолжаем рассказывать о том, сколько усилий понадобилось, чтобы всё это стало возможным. Недавно мы писали о том, как и почему команда Яндекс.Диска выбрала WebDAV для синхронизации десктоп-клиентов с сервером и начала работу над прототипом клиента Яндекс.Диска. Сегодня, как и обещали, — о том, как всё работает с серверной стороны.

Диск спасает файлы — не Шойгу

Для правильной синхронизации нужно не только уметь заливать файлы, но и реанимировать заливку в случае прерванного соединения, а также научить клиент учитывать изменения в файлах.
Читать дальше →
Total votes 86: ↑80 and ↓6+74
Comments52

Как учить английский язык

Reading time6 min
Views134K
Данный текст был написан моей женой для собственного блога. Мне он показался достаточно интересным и полезным для людей, интересующихся изучением иностранных языков, и я решил опубликовать его здесь, учитывая, что на Хабре таких людей очень много. Почему моя жена решила, что может давать какие-либо советы в этой области? Потому что она окончила иняз, свободно говорит на английском, продолжительное время вела курсы изучения английского языка с разными группами и благодарные ученики не раз положительно отзывались о ней, как о преподавателе, а сейчас она успешно изучает итальянский и уже использует его в своей работе.



Итак, кто заинтересовался — прошу под кат.
Читать дальше →
Total votes 106: ↑77 and ↓29+48
Comments58

pymorphy2

Reading time16 min
Views83K
В далеком 2009 году на хабре уже была статья "Кузявые ли бутявки.." про pymorphy — морфологический анализатор для русского языка на Python (штуковину, которая умеет склонять слова, сообщать информацию о части речи, падеже и т.д.)

В 2012м я начал потихоньку делать pymorphy2 (github, bitbucket) — думаю, самое время представить эту библиотеку тут: pymorphy2 может работать в сотни раз быстрее, чем pymorphy (втч без использования C/C++ расширений) и при этом требовать меньше памяти; там лучше словари, лучше качество разбора, лучше поддержка буквы ё, проще установка и более «честный» API. Из негатива — не все возможности pymorphy сейчас реализованы в pymorphy2.

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

Читать дальше →
Total votes 103: ↑100 and ↓3+97
Comments44

Собственное поле формы в Django

Reading time4 min
Views11K

Привет, хабр!
Я очень большой фанат фреймворка Django и все свои проекты пишу исключительно на нем. Сегодня я расскажу о том, как расширить стандартную библиотеку полей формы собственным оригинальным решением. Задача статьи не в том чтобы предложить готовое решение, а в том, чтобы осветить технологию создания кастомных полей.
Небольшое отступление. Однажды я корпел над созданием базы знаний для компании, в которой в то время работал. База представляла собой набор статей, помеченных тегами. К элементу ввода тегов предъявлялись следующие требования:
  • Множественный ввод
  • Автодополнение вводимого тега
  • Теги могут содержать пробелы (состоять из нескольких слов)
  • Возможность создать новый тег, а не выбрать из списка

После недолгих поисков, я нашел jQuery-плагин Tag-It!, который полностью удовлетворял требованиям к виджету. Осталось только прикрутить это поле к Django.
Что из этого получилось, можно увидеть под катом
Total votes 49: ↑45 and ↓4+41
Comments11

Information

Rating
Does not participate
Registered
Activity