Pull to refresh
1
0
Никита @deus

User

Send message

19 принципов разработки по БЭМ, или что должен знать каждый разработчик библиотек

Reading time11 min
Views43K
БЭМ набирает популярность и становится актуальнее — например, недавно Google выпустил новую библиотеку блоков под названием Material Design Lite, реализованную по БЭМ-методологии. Команда БЭМ тоже не сидела без дела — мы выпустили новую версию библиотеки bem-components, на базе которой построены сайты и проекты не только Яндекса, но и других разработчиков.

Эти события натолкнули нас на мысль ещё раз вспомнить и рассказать вам, как сформировались принципы разработки библиотек в БЭМ-методологии. Надеемся, что многим это будет интересно и полезно. Итак, поехали.

image

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

Если вы хотите узнать на примерах, как мы пришли к нашим принципам разработки, добро пожаловать под кат.
Читать дальше →
Total votes 68: ↑52 and ↓16+36
Comments32

Google скрывает смелые проекты будущего в секретной лаборатории

Reading time2 min
Views2.1K


У Google есть секретная лаборатория, о которой не знают даже многие сотрудники компании и в которой разрабатываются проекты, описания которых звучат как из научно-фантастического фильма. Об этом рассказывает в своей статье издание New York Times.

В лаборатории, расположенной где-то в области залива Сан-Франциско, ярчайшие инженеры Google работают над десятками проектов. Это место, где ваш холодильник может быть подключен к Интернету и заказывать продукты, когда они заканчиваются. Ваша тарелка может сообщать в социальной сети, что вы едите. А ваш робот может пойти в офис, пока вы дома в пижаме.
Читать дальше →
Total votes 99: ↑77 and ↓22+55
Comments61

Новая версия сниффера 0x4553-Intercepter 0.8 + 0x4553-NAT

Reading time1 min
Views2.2K
Долгожданное обновление сниффера Intercepter'а, помимо мелких исправлений был включен режим DHCP сервера.

Он имеет минимально необходимый функционал и выдает компьютерам в сети указанные настройки, быстрее чем это делает существующий DHCP сервер. Если вдруг легитимный сервер успеет выдать настройки раньше, то Intercepter
отошлет специальный ответ клиенту, после чего клиент возобновит процедуру запроса настроек.

Основным назначением данного режима является скрытая выдача ложной конфигурации сети для перехвата трафика.



Скрытность заключается в использовании несуществующих MAC и IP адреса, а так же в выдаче несуществующего шлюза, который в свою очередь будет роутить пакеты, что позволит перехватывать и обрабатывать данные.
Читать дальше →
Total votes 26: ↑19 and ↓7+12
Comments2

Реализация механизма исключений средствами языка C

Reading time1 min
Views1.4K
Программисты C++, Java, C#… при написании кода на «чистом» C часто сталкиваются с проблемой отсутствия механизма исключений. Классический способ обработки ошибок в C — проверка кодов возврата. В сложных алгоритмах при глубокой вложенности это весьма неудобно. Приведенный ниже способ не нов, но, к сожалению, многие с ним не знакомы.

Итак, в POSIX есть пара полезных функций: setjmp и longjmp

#include <setjmp.h>

int setjmp(jmp_buf env);
void longjmp(jmp_buf evn, int val);


Рассмотрим пример:


#include <setjmp.h>
jmp_buf jbuf;

/* ...... */

/* Ставим обработчик */
int result = setjmp(jbuf);
switch(result) {
   case 0: /* это блок try */
   case 1: /* Один из блоков catch */
   case 2: /* Еще один catch */
};

/* .... */

/* Здесь мы хотим кинуть исключение */
longjmp(jbuf, КОД_ИСКЛЮЧЕНИЯ);


Вызов setjmp сохраняет состояние стека в переменную. При сохранении setjmp возвращает 0. Эту переменную необходимо сделать доступной для кода, который будет инициировать переход. После вывода longjmp всё будет выглядеть так, как будто setjmp вернул отличное от 0 значение.

Что стоит отметить:
1) longjmp никогда не возвращает управление. Либо будет откат к setjmp, либо, если jmp_buf битый — segmentation fault.
2) Второй параметр longjmp — то значение, которое вернет setjmp по восстановлении стека. 0 передать не получится (в этом случае вернется 1).
3) Описанный выше механизм ломает «нормальную логику» работы программы на C. При этом в некоторых случая может сделать программу более читаемой. К этому стоит относиться как к goto.

UPDATE-замечание от mraleph:
Строго говоря setjmp не сохраняет «состояние стека». Он сохраняет лишь значения регистров, поэтому в частности jmp_buf'ом нельзя пользоваться, если функция, в которой он был создан завершилась…
Total votes 12: ↑7 and ↓5+2
Comments8

POST из java

Reading time2 min
Views1.8K
Сегодня поделюсь вот таким опытом. Услышав модное слово REST, решили тут же применить этот тренд в проекте. В проекте необходимо было хранить картинки для соответствующих ресурсов. И было выбрано такое соглашение:
  • GET http://localhost/res/image/1001
    — позволяет скачать картинку (файл jpg) для ресурса за номером тысяча один
  • POST http://localhost/res/image/1001
    — принять и сохранить (заменить, если была) картинку
  • DELETE http://localhost/res/image/1001
    — соответственно удалить

Модель, кстати, себя оправдала. Пользуемся по сей день. А вот в процессе разработки возник вопрос как же это чудо попробовать, протестировать. Тем более реализация этой функциональности на клиенте (Flex, btw) ещё не была готова.

Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments10

Алгоритм рейтинг листа.

Reading time2 min
Views1.3K
Доброе время суток, уважаемое хабросообщество.
В процессе создания одного проекта столкнулся с проблемой реализации рейтинга пользователей. В принципе, можно провести аналогию и с Хабром. Дело в том, что пользователь рейтенгуется в соответствии с неизвестным алгоритмом и получает какой-то показатель (хабрасила, мы назовём его рангом). После чего формируется лист, упорядоченный по убыванию этого показателя. Вроде бы всё просто.
  • Имеем n параметров, от которых зависит ранг. При изменении любого из параметров пересчитываем ранг.
  • Для отображения топ-листа делаем простой select из базы данных с order'ом по рангу.
Вроде бы всё выглядит, проще некуда. Но тут появляются несколько проблем.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments40

Как сделать flush bluetooth-сокета в C (Linux)?

Reading time5 min
Views923
Вчера столкнулась с тем, что написанная мною серверная программа (Fedora 10, C), общающаяся с моим же мобильным клиентом (Symbian 9.1, Mobile Python for Series 60) стала давать сбой при пересылке файла.

_____________________________________________________
P.S.: Жаль, что никто не откликнулся советом… Впрочем, уже сама разобралась. Оказывается, стоит контролировать значение, возвращаемое функцией write() — реально может отправляться меньше байт, чем пыталась переслать программа. Пытаясь отправить массив байт, стоит проверять, сколько байт реально отправилось — и упорно досылать неотправленное.
_____________________________________________________

Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments3

Мегафон не спешит закрывать старые дыры в безопасности

Reading time3 min
Views41K
Не так давно, netAn опубликовал интересную статью описывающую проблемы безопасности системы Мегафон — Сервис-гид.

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

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

Как показал анализ, в Мегафоне, существует внутренний гейт, с которым соединятся и messages.megafon.ru, moscowsg.megafon.ru и многие другие приложения для авторизации абонентов. Используя мобильные приложения «UMS» и «Мегафон Диск» можно подбирать пароли с высокой скоростью за счет отсутствия необходимости в проведении полной процедуры аутентификации.

Об этой проблеме было отправлено письмо в службу технической поддержки абонентов Мегафон несколько недель назад, но как ни странно она не отреагировала на наше письмо. На момент 11 декабря ничего не исправлено.
Читать дальше →
Total votes 63: ↑59 and ↓4+55
Comments24

Как работают экспертные системы прогнозирования продаж или сколько грузить планшетов в граммах

Reading time8 min
Views51K


Я уже писал краткий обзор того, как IT-решения помогают оптимизировать цепочки поставок. Теперь я расскажу о том, как такие системы внедряются в реальности в России и что это даёт. К сожалению, я не могу называть конкретных заказчиков, поэтому мы сейчас будем торговать абстрактными телефонами и планшетами и сталкиваться с теми же проблемами.

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

Соответственно, задач у вас сейчас три:
  • Поддерживать ассортимент продукции по основной линейке;
  • Понимать, сколько будет продаж, чтобы планировать закупку аксессуаров;
  • Держать на контроле все хиты и новинки, чтобы всегда продавать ходовые товары и «снимать пену» на запусках новых девайсов.

Через полгода становится веселее
Total votes 70: ↑63 and ↓7+56
Comments38

Карманный перехват и восстановление файлов из трафика

Reading time2 min
Views26K
Про MiTM на айфонах и андроидах уже были соответствующие посты.
К упомянутым инструментам добавился еще один, так сказать специализированный.

Была создана консольная версия снифера Intercepter-NG и она же портирована под unix-like
операционные системы, включая IOS и Android.

image

Читать дальше →
Total votes 78: ↑76 and ↓2+74
Comments36

Актуальность атаки SMBRelay в современных Windows сетях

Reading time4 min
Views11K
Впервые с smbrelay я столкнулся в середине 2000х годов и знакомство оказалось неудачным. На тот момент существовало всего несколько эксплоитов, которые даже в то время работали абы как. И это не смотря на то, что сама уязвимость протокола выявлена еще в конце 90х годов. Не получив нужного результата весь интерес совершенно пропал.

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

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

Стоит отметить, что столь серьезная уязвимость в первозданном виде просуществовала до конца 2008 года, ровно до тех пор, пока не появился вменяемо работающий эксплоит.
Читать дальше →
Total votes 42: ↑40 and ↓2+38
Comments8

Обновление 0x4553-Intercepter

Reading time1 min
Views3K

0x4553-Intercepter 0.8.1


Несколько приятных обновлений:
  • 1. Анализ pcap дампов из консоли, ./intercepter -t dump.cap
    на выходе будет dump.cap.txt со всей сграбленой информацией.
  • Автостарт снифинга при запуске приложения. В конфигурационном файле
    необходимо указать порядковый номер интерфейса в графе autorun.
  • MiTM через ICMP редирект. Не очень распространенная техника, особенно под Windows.
    Позволяет проводить точечные атаки на целевые адреса. Возможно на ее базе будет создан
    более универсальный метод позволяющий перехватывать почти весь трафик.


Видео MiTM:


Читать дальше →
Total votes 46: ↑34 and ↓12+22
Comments22

Русская документация по mootools 1.2

Reading time1 min
Views2.7K
Русская документация по MooTools По данным летнего опроса на habrahabr, на mootools програмируют около 8% разработчиков. Понятно, что чем популярнее фреймворк, тем быстрее и качественнее он развивается, тем больше плагинов под него появляется в сети. Можем ли мы как либо влиять на эту цифру? Я думаю, можем!

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

Разработчики MooTools неплохо поработали над документацией, но в сети она доступна только на английском. Ну вот я и решил исправить ситуацию. Сейчас полностью переведена только секция Core, остальные секции пока что находятся в процессе перевода. Вот я и решил обратиться к Вам, уважаемые разработчики, принять участие в переводе (кого заинтересовало мое предложение пишите мне на oleg точка cherniy at Гмейл.ком).

Полезные ссылки:
Total votes 63: ↑57 and ↓6+51
Comments31

Создание демон-процесса на Java

Reading time6 min
Views35K
Доброго всем времени суток.

Недавно, по долгу службы, появилась необходимость написать background process для IBM AIX 5.2 на Java с контролирующим shell скриптом.

Раз работа проделана, документация поднята, код написан, почему бы не поделиться с общественностью? По сему, переходим к делу.

читать дальше ...
Total votes 37: ↑34 and ↓3+31
Comments26

Erlang. Что это, зачем, как и для кого.

Reading time2 min
Views78K
Статья короткая, если понравиться, попробую осветить этот язык программирования подробнее.

Что



Erlang, это функциональный язык программирования с динамической типизацией, главной особенностью которого является программирование на уровне отдельных процессов(почти аналог threads в других ЯП), коммуникация между которыми реализуется с помощью MPI(Message Passing Interface).

Читать дальше →
Total votes 81: ↑70 and ↓11+59
Comments95

Экстренная реанимация epmd

Reading time3 min
Views9K
(Проблема, по всей видимости, чрезвычайно экзотическая, но в плане «как оно внутри устроено» достаточно познавательная.)

Вот, допустим, работает у вас приложение, написанное на Эрланге (ну, скажем, тот же ejabberd). Давно работает, хорошо работает, но в один прекрасный день вы пытаетесь запустить управляющий скрипт (ejabberdctl, соответственно), а он вам выдает «nodedown» или еще что-нибудь страшное в этом духе, мол, не отзывается никто. При этом само приложение прекрасно отзывается на все клиентские запросы и слыхом не слыхивало о том, что оно down. По внезапному наитию вы запускаете epmd -names и — о, ужас! — получаете пустой список.

Программы на Эрланге используют для связи между собой нотацию node@host, физически же каждый узел (читай — системный процесс) открывает для этого случайный высокий порт. Задача сервиса epmd — связать между собой логическую адресацию по имени и физическую адресацию по номеру порта. Своего рода аналог DNS, с той разницей, что без реестра epmd кластер на Эрланге разваливается на кучку отдельных глухонемых узлов — что у нас только что по какой-то загадочной причине и произошло. Можно, конечно, начать искать виновных, но сначала все-таки неплохо бы поднять систему на место.

Что в такой ситуации делать? Можно, конечно, просто насильно перезапустить приложение, но, с одной стороны, клиенты отвалятся, с другой, такой красивый uptime жалко… Вот если б можно было как-нибудь восстановить реестр на живой системе, а?..

Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments12

На передовой дизайна виртуальных машин

Reading time4 min
Views4.4K
Пока готовится первая статья в обучающей серии об языке Эрланг, решил сделать перевод одного интересного блог-поста. Пост об развитии виртуальной машины Эрланг и целях, которые пытаются достичь его авторы.

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

Алгоритмы организации тэгов

Reading time3 min
Views27K
Тэги – неотъемлемая часть всех современных сайтов и косвенный признак принадлежности сайта к пресловутому Вэб-Два-Ноль.

В статье я хочу рассказать об способах и алгоритмах тегирования информации.
Читать дальше →
Total votes 42: ↑39 and ↓3+36
Comments48

Начинающим Java программистам

Reading time2 min
Views1.2M
Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения


  • www.javable.com — сайт со статьями и tutorial'ом по Java. Все в основном на русском.
  • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial'ов на все возможные темы.

Читать дальше →
Total votes 120: ↑113 and ↓7+106
Comments58

Распределённая система кеша ehcache для приложений любого уровня

Reading time3 min
Views28K
Сегодня я хотел бы рассказать об одном интересном проекте, который вам пригодится при проектировании и реализации сложных веб-приложений на платформе Java. Речь идёт о ehcache — универсальной системе распределённого кеширования для Java приложений и сервлетов. Это необычно небольшое приложение (честно, такого уровня системы, размером в несколько сотен Кб это редкость, при этом высокого качества), которое реализует кеш как динамический (в оперативной памяти), так и дисковый кеш, причём изначально спроектированное для работы с кешами большого объёма (порядка гигабайтов) и в распределённых системах.

Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments8
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity