Search
Write a publication
Pull to refresh
0
0
Send message

Пятничный формат: Как писать код, который никто не сможет сопровождать

Reading time16 min
Views95K


Благодаря советам экспертов в области Java вы научитесь писать код, который будет настолько сложно сопровождать, что любому, кто будет с ним работать после вас, потребуются годы, чтобы внести даже малейшие правки. Более того, если будете неизменно следовать этим правилам, вы сможете гарантировать себе пожизненное рабочее место, так как никто кроме вас не сможет разобраться в вашем коде.
Читать дальше →

Хавала: Алгоритм работы системы подпольного банкинга, сохранившейся с древних времен

Reading time5 min
Views99K


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

Одна из таких финансово-расчетных систем получила название «Хавала». Она зародилась в Индостане задолго до появления банковской системы западного образца (по разным оценкам, она работала уже в 8 веке), и до сих пор используется многими гражданами стран Среднего Востока, Африки и Азии в качестве альтернативного инструмента расчетов.
Читать дальше →

Площадки для браузерных игр

Reading time7 min
Views30K
Допустим, я создал браузерную игру, а что дальше? Если для мобильных — есть магазины Google Play, App Store, Windows Store и куча всяких альтернативных. Можно найти площадки для распространения сборок standalone — Desura, Steam, Itch.io. Но когда задумываешься о судьбе браузерки, то невольно впадаешь в ступор. И куда ее?

Думать о судьбе своего детища необходимо еще на начальном этапе разработки. Так, в случае с Dangerous Insects, я уже знал, где и как буду размещаться, хотя от игры в лучшем случае был только диздок. Вот и с HTML5 захотелось заранее прощупать почву.
Читать дальше →

jQuery-плагин для организации компонентов на странице

Reading time2 min
Views20K
JBlocks — небольшой jQuery-плагин (~100 строк) для организации компонентов на странице.

Строится на трех основных принципах:

  • опиши поведение компонента в декларации;
  • разметь компонент в html с помощью специальных атрибутов;
  • общайся со экземплярами компонента через АПИ.

Если вам интересна тема декларативного javascript — прошу под кат.
Читать дальше →

Подпольный рынок кардеров. Перевод книги «KingPIN». Глава 15. «UBuyWeRush»

Reading time10 min
Views22K
Кевин Поулсен, редактор журнала WIRED, а в детстве blackhat хакер Dark Dante, написал книгу про «одного своего знакомого».

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

Начало и план перевода тут: «Шкворень: школьники переводят книгу про хакеров».

Логика выбора книги для работы со школьниками у меня следующая:

  • книг про хакеров на русском языке мало (полторы)
  • книг про кардинг на русском нет вообще (UPD нашлась одна)
  • Кевин Поулсен — редактор WIRED, не глупый товарищ, авторитетный
  • приобщить молодежь к переводу и творчеству на Хабре и получить обратную связь от старших
  • работать в спайке школьники-студенты-специалисты очень эффективно для обучения и показывает значимость работы
  • текст не сильно хардкорный и доступен широкому кругу, но затрагивает вопросы информационной безопасности, уязвимости платежных систем, структуру кардингового подполья, базовые понятия инфраструктуры интернет
  • книга иллюстрирует, что «кормиться» на подпольных форумах — плохо заканчивается

Книгу полностью перевели, сейчас переводим статьи Пола Грэма. Кто хочет помочь — пишите в личку magisterludi.

Глава 15. «UBuyWeRush»

(за перевод спасибо хабраюзеру ungswar )

Захудалый торговый центр был расположен в том обширном равнинном интерьере Лос-Анджелеса, который вряд ли бы напечатали на открытке. Далеко от океана и так далеко от холмов, что приземистые оштукатуренные строения могли бы стать Голливудской сценой, где невыразительное голубое небо за ними играло бы роль хромакея, который заполнят горами или деревьями во время пост-продакшна.

Крис припарковал машину на стоянке усеянной мусором. На маркизе перед входом верхняя вывеска рекламировала салун «Страна ковбоев», ниже шел обычный для юга Лос-Анджелеса набор: винный магазин, ломбард, маникюрный салон. Еще одна была не совсем обычной: UBuyWeRush (ТыПокупаешьМыВрываемся) — единственная магазинная вывеска в Лос-Анджелесе, которая так же являлась ником на сайтах CarderPlanet (Планета кардеров) и Shadowcrew (Теневая команда).

Он прошел внутрь офиса, где пустое окно ресепшна предлагало в аренду помещения бывшей медицинской клиники по 60 центов за квадратный метр. На стене висела карта мира в проекции Меркатора ощетиненная канцелярскими кнопками. Криса тепло встретил лично UBuy — Цезарь Карренза.

Цезарь пришел в подполье окольным путем. В 2001 году он закончил институт DeVry по специальности программирование и надеялся найти работу в Интернете. Когда найти такую не удалось, он решил попробовать себя в качестве самостоятельного предпринимателя в сети.

Из объявления в газете Daily Commerce он узнал о предстоящем аукционе, где владельцы публичного склада в Лонг Бич продают содержимое контейнеров, брошенных арендаторами. Придя на этот аукцион, он обнаружил, что там соблюдается весьма специфический ритуал. Управляющий, вооружившись внушительным болторезом, перерезал замок недобросовестного владельца на глазах у участников аукциона и открывал дверь. Участники — их было около двадцати — старались оценить содержимое стоя на отдалении нескольких метров. Победитель мог закрыть контейнер своим навесным замком и должен был очистить его от содержимого в течение 24-х часов.
Читать дальше →

Unity — Концептуальные идеи и подсказки для новичков игродева. Простая процедурная генерация моделей для 2D игры

Reading time5 min
Views41K
Введение в проблему

Здравствуйте, дорогие читатели!

Мысли о создании серии простых уроков «концептуальные идеи для новичков игродева» появились у меня спонтанно, где-то в 2:00 по Московскому времени во время создания своего нынешнего проекта. Ну нет, это так мне кажется, что спонтанно, но, наверное, это мое подсознание так среагировало. Среагировало потому, что все больше юных (коим я и сам являюсь) и очень юных программистов решают заняться созданием игр. Как мне кажется, общая тенденция молодежи-программистов (и людей, интересующихся сферой программирования) плавно перешла от создания сайтов и модных блогов к созданию развлекательных продуктов. Я начинаю замечать это и среди своих знакомых, которые одно время говорили, что, мол игры — это не серьезное программирование, но теперь уже проявляют настоящий интерес к этой среде.

Я объясняю это для себя следующим, очевидным образом. Любые информационные направления приобретает массовые тенденции к изучению при выполнении двух условий: наличие простого и адекватного инструмента осуществления конкретных задач в выбранной информационной сфере и легкость получения прибыли при продаже ваших выполненных задач. В пример же опять можно привести сферу веб-технологий (когда-то сайты было создавать ультра-хардкорно, а сейчас, наверное, даже моя мама сможет поставить блог на WordPress или его аналогах. Опять же почему? Потому что WordPress открыл возможность создавать свои блоги всем мамам вокруг света, и потому что веб-сайты открыли доступ к быстрой популярности, славе, деньгам и рому).

Но пришла эра развлечений – я не буду упоминать с каким трудом делались первые игры, но прошли десятилетия, стали появляться платные игровые движки, через какое-то время они стали практически бесплатные (Unity, Unreal Engine4), причем не движки от Васи с соседнего подъезда в которых можно только сделать “грабеж корованов ”, а движки мастодонты который представляют из себя комплексные среды разработки, способные реализовать ваши проекты мечты. Однако есть и обратная сторона этих популярных технологий. А именно большое количество некачественных продуктов. Обленились придумывать что-то свое… “Лучше сделаю флеппи берд!” – подумал Вася.
Читать дальше →

Разработка менеджера закачек на GO

Reading time8 min
Views30K
Менеджер многопоточных закачек на GO.

http://loafter.github.io/godownloader/
https://github.com/Loafter/godownloader


Вступление


Давным-давно, в году этак 1998, для выхода в интернет я использовал модем на работе у отца. Он его включал вечером после работы и я мог наслаждаться просторами сети интернет на скорости аж 31.2 кбит/c. В то время не было истеричных блогеров, страницы не весили по мегабайту, а в новостных сайтах говорили только правду. Естественно основной интерес представляли ресурсы. Картинки, программы, всякие дополнения к играм, вроде машинок. Как сейчас помню качать через IE было сущим адом. Скачать файл весом больше 500 кб было просто невозможно, древний осел был намного упрямей.
Читать дальше →

Задача о конфетах

Reading time3 min
Views23K
На днях столкнулся с интересной задачкой, которая показалась мне достойной аудитории данного ресурса. Условие ее следующее:

«Найти максимально допустимое отклонение массы конфеты при ее производстве, чтобы нетто коробки, состоящей из 12 штук их, не выходило за пределы 310±7 грамм в 90% случаев. Закон распределения считать нормальным.»

Стоит сказать, что условие не было выдернуто из интернета или подсмотрено на каком-нибудь ресурсе занимательных задач, а пришло от одного очень хорошего друга, который по должности своей инженер по организации и управлению производством на одной небезызвестной кондитерской фабрике. То есть задача имеет вполне реальное происхождение, а ее решение — практическую пользу.

Я предложил читателям решить задачу самостоятельно и должен сказать, что они справились с этим лучше меня. В своем же решении я я сделал не верное допущение.
Решение

Бинарные деревья поиска и рекурсия – это просто

Reading time8 min
Views649K
Существует множество книг и статей по данной теме. В этой статье я попробую понятно рассказать самое основное.

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

image
Рис. 1 Бинарное дерево
Читать дальше →

Новый PHP, часть 2: Scalar types

Reading time8 min
Views45K

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

До сих пор мы говорили о типах только в отношении классов и интерфейсов. В течение многих лет мы только их (и массивы) и могли использовать. Однако же, PHP 7 добавляет возможность использовать и скалярные величины тоже, такие как int, string и float.

Но постойте. В PHP большинство примитивов являются взаимозаменяемыми. Мы можем передать "123" в функцию, которая хочет int, и довериться PHP, который все сделает «правильно». Так для чего же тогда нужны скалярные типы?
Читать дальше →

Настройка отправки почтовых уведомлений в Zabbix на CentOS 7

Reading time3 min
Views31K
Вроде бы и задача не самая новая. И статей в гугле воз и маленькая тележка. Но почему то у меня ушла почти неделя на все эксперименты и топтания по всевозможным граблям.

Итак, задача: Сервер CentOS 7, установлен комплект LEMP, установлен сервер Zabbix 2.4.6. Нужно настроить отправку уведомлений админам на почту.

Оговорка — CentOS ставился по методу «секс и еще раз секс» — minimal installations. Ввиду этого некоторые пакеты «должные быть из коробки» не работают, ибо их никто еще не поставил.
Читать дальше →

Понять Open Source

Reading time11 min
Views53K
image


Опен сорс заставляет меня чувствовать себя мазохистом.
Я люблю его, однако часто работа с ним – боль.
(c) Мой

Когда-то – может, уже лет 10 назад – было модно предрекать конец опен сорсу. Интернет пестрил заголовками типа «Почему Open Source скоро умрет» или «Почему Open Source никогда не победит платное ПО». Это не точные заголовки. Скорее, впечатление, которое сохранилось с тех пор.

Сейчас мы видим, что опен сорс цветет и пахнет. Иногда хорошо пахнет, иногда – не очень. Но в целом по-прежнему набирает популярность и даже как-то эволюционирует. Собственно, об этом и поговорим: о том, что Open Source представляет собой сейчас, и куда будет двигаться дальше. Хотелось бы увидеть в комментариях ваши мнения по этому поводу.

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

Я запланировал три поста, которые опубликую, если тема покажется интересной:

  1. Этот пост, где поговорим о том, как научиться понимать Open Source
  2. Модели использования Open Source для достижения бизнес-целей
  3. В третьем посте я предложу нестрогую классификацию открытого кода по его профпригодности. По тому, насколько удобно, эффективно и полезно работать с различными сторонними проектами.

Поехали!

Brotli — новый алгоритм сжатия веб-данных от Google

Reading time2 min
Views29K
image

Так как веб-сайты и онлайн-сервисы с каждым годом становятся все «тяжелее», возрастает необходимость и сжатия данных в вебе. По этой причине Google выпустил новый алгоритм сжатия данных для веб-сайтов — Brotli, что в переводе с швейцарского немецкого означает «маленькая булка хлеба». Алгоритм уже доступен широкой аудитории на GitHub.
Читать дальше →

Аккордеон на AngularJS и Bootstrap

Reading time5 min
Views27K
Аккордеон добавляет визуальное оформление и соответствующее поведение типа «горизонтальный аккордеон» произвольному (в рамках использованного шаблона и стилей) блоку разметки HTML.

Блок разметки должен иметь два обязательных элемента — общий контейнер и вкладки:

<ul ngc-accordion>
    <li ngc-accordion-tab="наименование1" template="template.html">... </li>
    <li ngc-accordion-tab="наименование2" template="template.html">... </li>
</ul>
    

Или так:

<div ngc-accordion>
    <div ngc-accordion-tab="наименование1" template="template.html">... </div>
    <div ngc-accordion-tab="наименование2" template="template.html">... </div>
</div>
    

Выглядит так:


Читать дальше →

gulpfile в 10 строк? Легко! — упрощаем создание типовых задач

Reading time2 min
Views26K
Последнее время почти в любом проекте требуется сделать сборку less/sass/css/js/html и т.д. файлов. Gulp является отличным решением для выполнения этих задач, это глоток воздуха после grunt'a, но и он не идеален.



Например, если нужно сделать сборку common js, используя browserify, то нужно подключать с десяток зависимостей и писать почти 50 строчек кода. Вот один из примеров.

Нужно упрощать gulpfile.js
Читать дальше →

Целенаправленная и сознательная деавтоматизация бизнеса

Reading time7 min
Views46K


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

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

И вообще вели себя вызывающе с точки зрения ИТ.

При этом объём кода, нужные мощности и сложность реализации процессов росли. Дело в том, что такая деавтоматизация требует очень нехилых вложений в ИТ. Сейчас объясню на примерах, в чём дело и зачем мы так странно делаем.
Читать дальше →

19 советов по повседневной работе с Git

Reading time14 min
Views289K


Если вы регулярно используете Git, то вам могут быть полезны практические советы из этой статьи. Если вы в этом пока новичок, то для начала вам лучше ознакомиться с Git Cheat Sheet. Скажем так, данная статья предназначена для тех, у кого есть опыт использования Git от трёх месяцев. Осторожно: траффик, большие картинки!

Содержание:
  1. Параметры для удобного просмотра лога
  2. Вывод актуальных изменений в файл
  3. Просмотр изменений в определённых строках файла
  4. Просмотр ещё не влитых в родительскую ветку изменений
  5. Извлечение файла из другой ветки
  6. Пара слов о ребейзе
  7. Сохранение структуры ветки после локального мержа
  8. Исправление последнего коммита вместо создания нового
  9. Три состояния в Git и переключение между ними
  10. Мягкая отмена коммитов
  11. Просмотр диффов для всего проекта (а не по одному файлу за раз) с помощью сторонних инструментов
  12. Игнорирование пробелов
  13. Добавление определённых изменений из файла
  14. Поиск и удаление старых веток
  15. Откладывание изменений определённых файлов
  16. Хорошие примечания к коммиту
  17. Автодополнения команд Git
  18. Создание алиасов для часто используемых команд
  19. Быстрый поиск плохого коммита

Читать дальше →

Тонкости модульной системы ECMAScript 2015 (ES6)

Reading time5 min
Views118K
Уже около полугода я пишу на ES6 (который в итоге назвали ES-2015) и ES7, с использованием бабеля в качестве транслятора. Писать мне приходилось в основном серверную часть, соответственно, использование модулей было само собой разумеющимся: до ES6 — с помощью модульной системы самой ноды, а теперь — с помощью стандартизированной семантики самого языка. И мне захотелось написать статью, в которой расписать тонкости, плюсы, подводные камни и необычности новообретенной модульной системы языка: отчасти — чтобы другим было проще, отчасти — чтобы разобраться во всём окончательно самому.

Я разберу, что такое модуль, как происходит экспорт сущностей, как происходит импорт сущностей, чем система модулей ES6 отличается от системы модулей в NodeJS.
Итак, начнем.

Information

Rating
Does not participate
Date of birth
Registered
Activity