Как стать автором
Обновить
16
Карма
0
Рейтинг
Ярик @wirzus

Пользователь

  • Подписчики 2
  • Подписки 1

Перестаньте называть себя программистом и другие карьерные советы

Карьера в IT-индустрии
Перевод
Есть один курс, который я бы добавил в программу обучения по всякой инженерной специальности, и он не о компиляторах или сложности алгоритмов. Это “Введение в реальность индустрии”, ибо об этом не говорят и это приводит к никому не нужным обломам. Эта статья претендует стать README.txt для молодого инженера в деле построения карьеры. Ее цель — сделать вас счастливее, заполнив пробелы в образовании относительно того, как работает реальный мир. Я не призываю следовать написанному как подробному руководству, но я надеюсь, что эта информация окажется для вас более ценной, чем то ничто, что вам рассказали об этом в университете.
Читать дальше →
Всего голосов 251: ↑212 и ↓39 +173
Просмотры 254K
Комментарии 176

Разбираемся с монадами с помощью Javascript

JavaScript *Функциональное программирование *
Перевод
Оригинальная статья — Understanding Monads With JavaScript (Ionuț G. Stan).
Буду признателен за комментарии об ошибках/опечатках/неточностях перевода в личку

От автора


Последние несколько недель я пытаюсь понять монады. Я все еще изучаю Haskell, и, честно говоря, думал, что знаю, что это такое, но когда я захотел написать маленькую библиотечку — так, для тренировки — я обнаружил, что хотя и понимаю, как работают монадические bind (>>=) и return, но не представляю, откуда берется состояние. Так что, вероятно, я вообще не понимаю, как это все работает. В результате, я решил заново изучить монады на примере Javascript. План был тот же, когда я выводил Y Combinator: взял изначальную задачу (здесь это взаимодействие с неизменяемым явно состоянием), и проделал весь путь к решению, шаг за шагом изменяя изначальный код.
Читать дальше →
Всего голосов 39: ↑37 и ↓2 +35
Просмотры 40K
Комментарии 18

Fail2ban [incremental]: Лучше, быстрее, надежнее

Информационная безопасность *
fail2ban image
Про fail2ban написано уже много, в том числе и на хабре. Эта статья немного о другом — как сделать защиту им еще надежнее и о еще пока неизвестных в широких кругах новых функциях fail2ban. Добавлю сразу — речь пойдет пока про development branch, хотя уже долго проверенный в бою.

Краткое вступление


В большинстве своем fail2ban устанавливается из дистрибутива (как правило это какая-нибудь стабильная старая версия) и настраивается по манам из интернета за несколько минут. Затем годами работает, без вмешательства админа. Нередко даже логи, за которыми вроде как следит fail2ban, не просматриваются.
Так вот, сподвигнуть на написание этого поста меня заставил случай, произошедший с одним сервером моего хорошего знакомого. Классика жанра — пришла абуза, за ней вторая и пошло поехало. Хорошо еще злоумышленник попался ленивый — логи не потер, да и повезло еще крупно, что logrotate был настроен, чтобы хранить логи месяцами.
Как дальше жить
Всего голосов 72: ↑71 и ↓1 +70
Просмотры 145K
Комментарии 60

Трансдьюсеры в JavaScript. Часть первая

JavaScript *Программирование *Функциональное программирование *
Рич Хикки, автор языка Clojure, недавно придумал новую концепцию — Трансдьюсеры. Их сразу добавили в Clojure, но сама идея универсальна и может быть воспроизведена в других языках.

Сразу, зачем это нужно:

  • трансдьюсеры могут улучшить производительность, т.к. позволят не создавать временные коллекции в цепочках операций map.filter.takeWhile.etc
  • могут помочь переиспользовать код
  • могут помочь интегрировать библиотеки между собой, например underscore/LoDash могут уметь создавать трансдьюсеры, а FRP библиотеки (RxJS/Bacon.js/Kefir.js) могут уметь их принимать
  • могут упростить FRP библиотеки, т.к. можно будет выбросить кучу методов, добавив один метод для поддержки трансдьюсеров


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

Читать дальше →
Всего голосов 56: ↑52 и ↓4 +48
Просмотры 29K
Комментарии 56

Сверхбыстрое распознавание речи без серверов на реальном примере

Разработка под Android *
Tutorial

В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
К статье я также прилагаю все исходники программы и саму сборку под Android.

Прикручиваем Pocketsphinx к своему Андроиду
Всего голосов 185: ↑182 и ↓3 +179
Просмотры 316K
Комментарии 87

Centrifuge — я больше не буду обновлять страницу перед отправкой комментария

Блог компании Mail.ru Group Разработка веб-сайтов *Python *
Прошло некоторое время с тех пор, как я писал про Центрифугу в предыдущий раз. Произошло множество изменений за этот период. Многое из того, что было описано в ранних статьях (1, 2) кануло в лету, но суть и идея проекта остались прежними — это сервер рассылки real-time сообщений пользователям, подключенным из веб-браузера. Когда на вашем сайте возникает событие, о котором вам нужно моментально сообщить некоторым вашим пользователям, вы постите это событие в Центрифугу, а она, в свою очередь, отправляет его всем заинтересованным пользователям, подписанным на нужный канал. В самом простом виде это показано на схеме:



Проект написан на Python с использованием асинхронного веб-сервера Tornado. Использовать можно даже если бекенд вашего сайта написан не на Python. Хотелось бы рассказать о том, что Центрифуга представляет собой на данный момент.
Читать дальше →
Всего голосов 57: ↑55 и ↓2 +53
Просмотры 24K
Комментарии 31

oDesk (Upwork). Мой опыт за полтора года

Фриланс
Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
image
Читать дальше →
Всего голосов 192: ↑185 и ↓7 +178
Просмотры 230K
Комментарии 321

Как была взломана Gamma International

Информационная безопасность *
image

3 августа в сабреддите /r/Anarchism некто пользователь PhineasFisher создал тред, в котором сообщил о том, что ему удалось украсть 40 гигабайт различных данных компании Gamma International. Возможно, подобная история могла оказаться не столь громкой, если бы не бизнес, которым занимается эта европейская фирма — создание и продажа программных средств для взлома и скрытой слежки (а иными словами — самой настоящей малвари), заказчиками которых обычно выступали государственные структуры. Через несколько дней после первого сообщения взломщик выложил длинный рассказ о том, как ему удалось проникнуть на сервера Gamma International и что удалось там найти.

Читать дальше →
Всего голосов 107: ↑106 и ↓1 +105
Просмотры 86K
Комментарии 28

Руководство по установке и настройке OpenVPN

Информационная безопасность *
Из песочницы



Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.



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



Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.



В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.



Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.



Надеюсь, что эта статья будет полезна тем, кто впервые столкнулся с необходимостью создания сети VPN или уже использует ее для решения тех или задач, а также тем, кто ищет замену коммерческим реализациям VPN.


Читать дальше →
Всего голосов 128: ↑115 и ↓13 +102
Просмотры 1M
Комментарии 95

Книги о кибербезопасности: 5+ рекомендаций наших экспертов

Блог компании «Лаборатория Касперского» Информационная безопасность *
Недавно у меня состоялся показательный разговор с Алексеем Малановым, сотрудником «Лаборатории» и опытным исследователем вредоносных программ, о том, может ли, например, сотрудник отдела по связям с общественностью (=не технарь) стать вирусным аналитиком? Ответ был простой и сложный одновременно: основы программирования, архитектура процессоров, особенности операционных систем, сетевые протоколы… В общем, «купи книжку по Ассемблеру и приходи лет через пять».

А что, если подняться на уровень выше? От анализа конкретных экземпляров вредоносных программ (что само по себе непросто) перейти к комплексному исследованию компьютерных инцидентов? Этим у нас занимается подразделение Global Research and Analysis Team (GReaT). К ним я недавно обратился с похожим вопросом: какие книги они могут порекомендовать другим специалистам по компьютерной безопасности (имея в виду, что азы программирования и прочие базовые вещи уже освоены)? В результате получился список из пяти книг — а на самом деле из десяти :-), — с которым можно ознакомиться под катом.
Читать дальше →
Всего голосов 52: ↑48 и ↓4 +44
Просмотры 86K
Комментарии 14

10 самых распространённых ошибок при программировании на JavaScript

Блог компании Mail.ru Group Разработка веб-сайтов *JavaScript *
Перевод


Сегодня JavaScript лежит в основе большинства современных веб-приложений. При этом за последние годы появилось большое количество JavaScript-библиотек и фреймворков для разработчиков Single Page Application (SPA), графики, анимации и даже серверных платформ. Для веб-разработки JavaScript используется повсеместно, и поэтому качество кода обретает всё большее значение.

На первый взгляд, этот язык может показаться довольно простым. Встраивание в веб-страницу базового функционала JavaScript — это не проблема для любого опытного разработчика, даже если он ранее не сталкивался с этим языком. Однако это обманчивое впечатление, поскольку JavaScript гораздо сложнее, мощнее и чувствительнее к нюансам, чем кажется поначалу. Немало тонкостей в этом языке приводит к большому количеству распространённых ошибок. Сегодня мы рассмотрим некоторые из них. На эти ошибки нужно обратить особое внимание, если вы хотите отлично программировать на JavaScript.
Читать дальше →
Всего голосов 205: ↑176 и ↓29 +147
Просмотры 154K
Комментарии 127

Интересная задачка для интервью, карринг и частичное применение функции

JavaScript *
Из песочницы
Хожу по job interview. Где-то скучно, где-то весело. Где-то интересно. На одном из таких меня попросили написать функцию, которая умеет складывать два числа. Я написал:

  it ('should add two numbers', function () {
    var add = function (a,b) {
      return a + b;
    };

    assert.equal(add(2,3), 5);
  });


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

  it ('should be called like add(num1)(num2)', function () {
    var add = function (a) {
      return function (b) {
        return a + b;
      };
    };

    assert.equal(add(2)(3), 5);
  });


Читать дальше →
Всего голосов 168: ↑163 и ↓5 +158
Просмотры 77K
Комментарии 74

Заметки о дизайне для разработчиков

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

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

DISCLAIMER: Оригинальная статья написана программистом, так что дизайнеры могут посчитать часть ниже написанного полной ересью, и это их право. ЦА статьи — разработчики, которым нужно заниматься дизайном.

Читать дальше →
Всего голосов 96: ↑88 и ↓8 +80
Просмотры 50K
Комментарии 31

Функциональный Javascript. Пишем свои линзы, часть 1

JavaScript *Функциональное программирование *
Из песочницы
Привет, хабр.
В данной статье мы познакомимся с линзами, узнаем для чего они нужны, а также реализуем их на JavaScript.

Зачем нужны линзы


Начнем, пожалуй, с ответа на вопрос, зачем же нужны линзы.

В функциональном программировании широко используются неизменяемые структуры данных. Работа с ними значительно отличается по сравнению с изменяемыми данными.

В основе этого лежит тот факт, что при изменении какой-либо части неизменяемой структуры данных создается ее копия, отличающаяся от оригинала этой самой измененной частью. Полное копирование всей исходной структуры не эффективно, поэтому новая структура как правило использует ссылки на неизмененные части из оригинала.
Читать дальше →
Всего голосов 53: ↑48 и ↓5 +43
Просмотры 26K
Комментарии 42

Квантовые деньги

Блог компании Web-payment.ru Информационная безопасность *
В последнее время в шумихе по поводу квантовых компьютеров (точек, телепортов), на мой взгляд, теряется одна маленькая, но крайне важная деталь, а именно качественно новый механизм. Мир ожидает от квантовых компьютеров неслыханного быстродействия (чтоб взломать RSA), но это то же самое быстродействие, только быстрее; от квантовых точек — высокого разрешения (чтоб смотреть анимэ), те же пиксели/люминофор, только еще меньше; телепотация — то же самое отоволокно/OWC только быстрее (конечно же, я упрощаю).
Но еще в 1969 году (до Феймана, Рида, Минина, Бениоффа, Дойча, Екимова) один чудак предложил идею, которая может лечь в основу будущей инфраструктуры обмена информацией.

В своей статье «Conjugate coding», которую он написал в 1969, а опубликовали ее только в 1983, Стивен Виснер предложил идею как защитить деньги от подделки.

Что самое привлекательное в идее квантовой проверки подлинности, что она строится не на сложности (технической, вычислительной, инженерной, математической и т.д.), а на физической невозможности. На Хабре был замечательный обзор «Техника для проверки подлинности денег», где, помимо оптических, электрических, механических и тд способов защиты, вскользь упоминались квантовые деньги. (со слабыми измерениями пока мало что ясно, поэтому они не угроза квантовым деньгам)

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

На картинке: Квантовая банкнота, предложенная Стивеном Виcнером в 1969 году. Содержит пирамиду с глазом, серийный номер и 20 ловушек для фотонов, чье содержимое является загадкой. В каждой ловушке находится 1 фотон с неизвестной поляризацией.

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

Статья написана для Хабра редакцией сайта о платежных системах с мониторингом обменников Web-payment.ru
Читать дальше →
Всего голосов 53: ↑46 и ↓7 +39
Просмотры 27K
Комментарии 27

Как развивать силу воли

GTD *

Одной из самых важных вещей в GTD является сила воли. Без нее вы не будет доводить дела до завершения, любая выбранная вами система не буде работать. Первый же приступ лени не даст вам заглянуть в список дел. GTD, todo list, канбан доска — это всё инструменты. Мы про них много читаем, учимся их использовать, даже программируем. Только самый важный инструмент, который всегда при нас, это сила воли.

До не давнего времени я не понимал, как работает сила воли, не знал, в какой момент времени меня покинет самообладание. Это изменила одна книга. Я рекомендую ее прочесть каждому ITшнику, особенно фрилансерам. У нас, как правило, слабый внешний контроль, поэтому приходиться полагаться только внутренний. Поэтому так важно его настроить. Почему я рекомендую именно эту книгу в качестве руководства под катом.
Читать дальше →
Всего голосов 98: ↑74 и ↓24 +50
Просмотры 95K
Комментарии 62

Приводим в порядок css-код. Опыт Яндекса

Блог компании Яндекс Разработка веб-сайтов *CSS *
Всем привет!

Я работаю над фронтендом огромного проекта — поисковой выдачи Яндекса. И у нас, как и у любого другого большого веб-проекта, есть огромное количество css-кода и немаленькая команда, которая с ним взаимодействует.

Когда много людей, используя разные инструменты, пишут и редактируют css, со временем этот css может получиться очень запутанным, неконсистентым и в целом начинает выглядеть плохо. Например, кому-то удобнее писать вендорные префиксы в одном порядке, кому-то — в другом, кто-то ставит кавычки вокруг url, кто-то — нет, а кто-нибудь фикся срочную багу к релизу мог бы, к примеру, написать position: relative в начале блока свойств, незаметив что где-нибудь внизу между color и box-shadow, уже есть position: absolute, и долго гадать, почему у него ничего не работает.



Но несмотря на то, что все пишут код по-разному, у нас в репозитории идеальный порядок: css-код полностью консистентен, и прекрасно выглядит. Весь.

Как мы этого добились, можно прочитать под катом.
Читать дальше →
Всего голосов 174: ↑169 и ↓5 +164
Просмотры 88K
Комментарии 70

Разработка через страдание

Разработка веб-сайтов *Программирование *Проектирование и рефакторинг *
Перевод
От переводчика:
Немало копий сломано в спорах о том, когда уместнее KISS, а когда DRY, когда лучше как можно быстрее и проще решить задачу любыми средствами, а когда стоит создавать красивые и универсальные абстракции. Натан Марц, автор популярного фреймворка Storm, используемого в Твиттере, предлагает свой вариант. Чтобы не создавать тонны бесполезного кода ради абстрактной универсальности и в то же время не позволять системе превращаться в кашу из костылей, он использует «разработку через страдание» (suffering oriented programming).



Однажды меня спросили: «Как ты решился пойти на такой страшный риск — писать Storm одновременно с запуском стартапа?» (Storm — фреймворк для распределённых вычислений в реальном времени). Да, пожалуй, со стороны создание такого крупного проекта для стартапа кажется крайне рискованным. Тем не менее, с моей точки зрения это вообще не было рискованным делом. Трудным, но не рискованным.

Я использую стиль разработки, который сильно уменьшает степень риска таких больших проектов, как Storm. Я называю этот стиль «разработкой через страдание». В двух словах: не занимайтесь реализацией технологий, от отсутствия которых вы не испытываете страданий. Этот совет применим как к большим, архитектурным решениям, так и к маленьким повседневным задачам. Разработка через страдание существенно уменьшает риск, гарантируя, что вы всегда работаете над чем-то важным, и что вы хорошо разобрались в предметной области, прежде чем вложить в решение много сил.

Я придумал такую мантру разработки: «Сначала сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро».
Читать дальше →
Всего голосов 101: ↑93 и ↓8 +85
Просмотры 54K
Комментарии 64

Работа с геолокациями в режиме highload

PostgreSQL *Геоинформационные сервисы *Big Data *
При разработке ПО часто возникают интересные задачи. Одна из таких: работа с гео-координатами пользователей. Если вашим сервисом пользуются миллионы пользователей и запросы к РСУБД происходят часто, то выбор алгоритма играет важную роль. О том как оптимально обрабатывать большое количество запросов и искать ближайшие гео-позиции рассказано под катом.

image
Читать дальше →
Всего голосов 37: ↑35 и ↓2 +33
Просмотры 50K
Комментарии 12

Заставьте сайт работать на сенсорных устройствах

Блог компании Сибирикс Разработка веб-сайтов *


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

Читать дальше →
Всего голосов 40: ↑33 и ↓7 +26
Просмотры 56K
Комментарии 7

Информация

В рейтинге
Не участвует
Откуда
Krakow, Польша
Зарегистрирован
Активность