Как стать автором
Обновить
0
savant @savant read⁠-⁠only

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

Отправить сообщение

Введение в Distributed Switch Architecture: технология управления сетью как единым устройством

Время на прочтение 7 мин
Количество просмотров 19K


Команда дизайн-центра электроники Promwad возвращается на Хабр после зимних каникул с новыми статьями о разработке встроенного ПО и новых устройств для серийного производства. Сегодня мы поделимся своим опытом в теме сетевых технологий.

Среднестатистическая домашняя сеть, также как и сеть небольшого предприятия, — это уже давно не просто два–три компьютера, соединенные через первый попавшийся китайский коммутатор. Вместе с ростом объема контента (базы данных, потоковое аудио/видео и т.д.) и увеличением количества устройств (VoIP-устройства, серверы, NAS-ы, IP-камеры, а в домашних сетях — телевизоры и прочий «интернет вещей») растет и количество передаваемых данных через сетевую инфраструктуру. Потоки данных нужно разделять между собой, при этом не забывая о приоритезации трафика: например, VoIP-трафик желательно пускать с большим приоритетом, чем IPTV, а IPTV в свою очередь — чем торренты. Поэтому не удивительно, что со временем даже малые локальные сети усложняются, а емкости портов одиночных коммутаторов становится недостаточно…
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 7

15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц

Время на прочтение 6 мин
Количество просмотров 307K
Практически невозможно представить себе информационную панель без диаграмм и графиков. Они быстро и эффективно отображают сложные статистические данные. Более того, хорошая диаграмма также улучшает общий дизайн вашего сайта.

В этой статье я покажу вам некоторые из лучших JavaScript библиотек для построения диаграмм/схем (и сводных таблиц). Эти библиотеки помогут вам в создании красивых и настраиваемых графиков для ваших будущих проектов.

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

Читать дальше →
Всего голосов 71: ↑65 и ↓6 +59
Комментарии 17

Когда, куда и как бежать

Время на прочтение 6 мин
Количество просмотров 2.4K
В жизни часто случается и хорошее, и плохое. Кто-то доживает до конца дней своих и в кровати вспоминает, как счастливо он прожил жизнь, кто-то гибнет в катастрофах мирового и не очень масштаба, а кто-то умирает от бандитской руки.

Бандиты бывают разные: и законно поступающие и нет. Давайте это признаем.
Иногда вы, думая, что заработаете на своем стартапе огромные деньги, влезаете в долги… Но что делать, если стартап не принес денег, а жопа расплата уже близко?!
А бывает еще хуже: вы влезаете в долги, верите людям, а потом, когда уже вроде и поздно, понимаете, что вас просто подставили и развели.

Я буду вести этот рассказ по собственным наблюдениям и опыте. Просьба не спрашивать где я, как я и каким образом я вляпался в историю.

В посте абсолютно отсутствует реклама и ссылки, которые я привожу, сделаны для пояснения. Сам я к этим сайтам не имею никакого отношения.

Интересно? Тогда добро пожаловать под кат.

Читать дальше →
Всего голосов 94: ↑87 и ↓7 +80
Комментарии 47

GPRS изнутри. Часть 2

Время на прочтение 7 мин
Количество просмотров 58K
Продолжаем наше знакомство с пакетной передачей в сетях мобильных операторов, которое мы с Вами начали в первой части о GPRS/EDGE технологиях. В этой статье речь пойдет о процессе аутентификации и авторизации, т.н. процедуре GPRS Attach, а также активирование услуги, запрошенной абонентом — поднятие PDP Context'а. Посмотрим какие данные хранятся на стороне SGSN'а, а какие на стороне абонента.
Ну, что ж поехали…

Читать дальше →
Всего голосов 27: ↑25 и ↓2 +23
Комментарии 67

Быстрый Reflection через DynamicMethod

Время на прочтение 5 мин
Количество просмотров 2.2K
Одной из «вкусных» возможностей .NET, а в частности C#, является Reflection(рефлекшн) — богатый набор классов для работы с типами данных, их свойствами, методами, полями во время выполнения.
Но за такой широкий функционал приходится платит производительностью.
Вызов метода из кода выполняется практически в сто раз быстрее чем вызов через рефлекшн.
А если мы заранее не знаем какой конкретный класс будет использоваться и какой метод будет вызван или не хотим привязываться к конкретной библиотеке, то работа через рефлекшн может сильно снизить производительность приложения.

В данной статье я хотел бы рассказать об использовании динамических методов для таких целей.

Читать дальше →
Всего голосов 19: ↑16 и ↓3 +13
Комментарии 7

Как создать идеал?

Время на прочтение 4 мин
Количество просмотров 19K
В далеком 2007 году, мы, агентство «Shiloff Group», занимались ребрендингом группы компаний «АСК». В комплекс работ входило все: начиная от маркетинга и фирменного стиля, заканчивая наружной и медийной рекламой, ну и, разумеется, сайтом. Для придания уникальности этому сайту мы решили создать идеальную девушку.

image

Под катом 1.4 МБ картинок, будъте бдительны!
Как мы это сделали?
Всего голосов 382: ↑340 и ↓42 +298
Комментарии 282

Психологическая деформация программистов. Взгляд с обеих сторон баррикад

Время на прочтение 6 мин
Количество просмотров 136K
Само наличие психологической деформации у какой-либо профессии, как правило, достаточно спорный момент ввиду того, что у разных людей она проявляется по-разному. Однако общую тенденцию можно выделить и, пожалуй, настало то время когда можно достаточно смело говорить, что программисты всё же имеют свой особенный психологический портрет который обусловлен их профессиональной деятельностью.

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

И что же них такого деформированного?
Всего голосов 461: ↑436 и ↓25 +411
Комментарии 558

Разбираем и собираем обратно стек USB

Время на прочтение 14 мин
Количество просмотров 103K
Иллюстрированная проекция модели сетевого взаимодействия OSI на универсальную последовательную шину.

Три «замечательных» уровня стека USB


Меня не устроил вид стека USB, который можно встретить чаще всего на просторах сети:

Не сильно полезный стек USB

Уровень шины, логический, функциональный… Это, конечно, замечательные абстракции, но они скорее для тех, кто собирается делать драйвер или прикладной софт для хоста. На стороне же микроконтроллера я ожидаю шаблонный конечный автомат, в узлы которого мы обычно встраиваем свой полезный код, и он сперва будет по всем законам жанра глючить. Или же глючить будет софт на хосте. Или драйвер. В любом случае кто-то будет глючить. В библиотеках МК тоже с наскока не разобраться. И вот я смотрю на трафик по шине USB анализатором, где происходящие события на незнакомом языке с тремя замечательными уровнями вообще не вяжутся. Интересно, это у меня от гриппозной лихорадки в голове такой диссонанс?

Если у читателя бывали сходные ощущения, предлагаю альтернативное, явившееся мне неожиданно ясно в перегретом мозгу видение стека USB, по мотивам любимой 7-уровневой модели OSI. Я ограничился пятью уровнями:



Я не хочу сказать, что весь софт и библиотеки уже сделаны или должны проектироваться, исходя из этой модели. Из инженерных соображений код c уровнями будет сильно перемешан. Но я хочу помочь тем, кто начинает своё знакомство с шиной USB, кто хочет понять протоколы обмена устройств и терминологию предметной области, подобраться поближе к готовым примерам, библиотекам и лучше ориентироваться в них. Эта модель не для загрузки в МК, но в ваши блестящие умы, дорогие друзья. А ваши золотые руки потом всё сами сделают, я не сомневаюсь:)
Разобрать стек USB
Всего голосов 72: ↑70 и ↓2 +68
Комментарии 23

Lock-free структуры данных. Основы: откуда пошли быть барьеры памяти

Время на прочтение 22 мин
Количество просмотров 94K

Как только я заинтересовался lock-free алгоритмами, меня стал мучить вопрос – а откуда взялась необходимость в барьерах памяти, в «наведении порядка» в коде?
Конечно, прочитав несколько тысяч страниц руководств по конкретной архитектуре, мы найдем ответ. Но этот ответ будет годен для этой конкретной архитектуры. Есть ли общий? В конце концов, мы же хотим, чтобы наш код был портабелен. Да и модель памяти C++11 не заточена под конкретный процессор.
Наиболее приемлемый общий ответ дал мне мистер Paul McKenney в своей статье 2010 года Memory Barriers: a Hardware View of Software Hackers. Ценность его статьи – в общности: он построил некоторую упрощенную абстрактную архитектуру, на примере которой и разбирает, что такое барьер памяти и зачем он был введен.
Вообще, Paul McKenney – известная личность. Он является разработчиком и активным пропагандистом технологии RCU, которая активно используется в ядре Linux, а также реализована в последней версии libcds в качестве ещё одного подхода к безопасному освобождению памяти (вообще, о RCU я хотел бы рассказать отдельно). Также принимал участие в работе над моделью памяти C++11.
Статья большая, я даю перевод только первой половины. Я позволил себе добавить некоторые комментарии, [которые выделены в тексте так].
Передаю слово Полу
Всего голосов 123: ↑117 и ↓6 +111
Комментарии 19

RMI средствами С++ и boost.preprocessor

Время на прочтение 11 мин
Количество просмотров 7.1K
Это моя первая публикация на сем ресурсе, посему, прошу отнестись с пониманием к допущенным мною ошибкам.

RMI — весьма банальная задача для ЯП, поддерживающих интроспекцию. Но, С++, к сожалению, к ним не относится.

В данной публикации я хочу продемонстрировать возможность реализации весьма юзабильной RMI средствами С++ препроцессора.

Постановка задачи


1. Предоставить максимально простой синтаксис, чтоб невозможно было допустить ошибку.
2. Идентификация(связывание) процедур должна быть скрыта от пользователя для того, чтоб невозможно было допустить ошибку.
3. Синтаксис не должен накладывать ограничения на используемые С++ типы.
4. Должна присутствовать возможность версионности процедур, но, так, чтоб не ломалась совместимость с уже работающими клиентами.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 10

Автомобильный стрелочный тахометр для новичка или немного шаманства с фиксированной точкой на AVR

Время на прочтение 8 мин
Количество просмотров 119K
Всем привет! Хотелось бы поделиться с сообществом своей историей модернизации тахометра ТХ-193
image

Неделю назад обратился ко мне один человек с довольно нестандартным заданием — нужно было обеспечить работу древнего тахометра ТХ-193(ВАЗ 2106) с современным двигателем ВАЗ21126(Приора), имеющем систему зажигания с индивидуальными катушками на каждый цилиндр, а значит просто подключить ТХ-193 к катушке зажигания уже не получится. К тому-же заказчик хотел повысить эксплуатационные качества прибора, оставив не тронутым его внешний вид и дизайн. В общем дело кончилось тем, что я взялся выпотрошить электронную начинку прибора и разработать свою, с блэкджеком и шлюхами. Информацию о частоте вращения коленчатого вала тахометр теперь будет получать от ЭБУ Январь 7.2, для чего в последнем имеется специальный вывод.

Под катом фото, видео, схема, исходники и много текста, повествующего о логарифмах и о том как правильно масштабировать данные и отделаться от запятой.
Подробности
Всего голосов 58: ↑55 и ↓3 +52
Комментарии 50

Интерфейс JTAG? — Это очень просто

Время на прочтение 6 мин
Количество просмотров 247K
Многие знакомы со словом «JTAG», но знакомство это скорее всего поверхностное. В этой статье я хочу перевести Вас на новый уровень, так сказать «во френдзону». Возможно, для многих я не открою ничего нового, но надеюсь тем, кто давно хотел ознакомиться, будет интересно почитать. Итак, от винта.
image

Запустить JTAG тестирование
Всего голосов 90: ↑86 и ↓4 +82
Комментарии 17

Три парадигмы F#

Время на прочтение 16 мин
Количество просмотров 21K

Введение


Все, кто так или иначе связан с .NET программированием знает, что уже в следующую версию Visual Studio будет встроен новый язык программирования — F#, который позиционируется как функциональный, чем сразу, так уж повелось, вызывает подозрения в бесполезности. Для того, чтобы показать, что F# — куда больше, чем просто ФЯП (хотя и просто ФЯП — это очень немало), я и написал все нижеследующее.
Эта статья, несмотря на изрядную длину, не претендует на то, чтобы полностью описать всю функциональность языка. Это всего лишь краткий обзор, призванный продемонстрировать широкий спектр возможностей, каждая из которых заслуживает отдельной статьи, и даже не одной.
Кроме того, написав такой пространный пост, я хотел сделать задел на будущее, чтобы в дальнейшем мне не отвлекаться на незначительные вещи базового уровня. Конечно, сразу головой в пруд — это действенно, но и какой-никакой фундамент не помешает.
А уже в следующий раз я приведу пример на волнующую тему пригодности F# для обычной профессиональной программистской деятельности.
И еще раз, под катом действительно МНОГО текста. И не говорите потом, что я вас не предупреждал. =)
Читать дальше →
Всего голосов 43: ↑40 и ↓3 +37
Комментарии 68

Уроки по электрическим цепям — линии передачи, часть 2

Время на прочтение 9 мин
Количество просмотров 85K


Эта статья — перевод. Начало здесь.
Источник.

В программе:
1) Провода болтаются в воздухе, но источник тока/напряжения видит короткое замыкание.
2) На одном конце провода амплитуда равна 0 Вольт, а на другом — 1 Вольт. Как это возможно?
3) Согласование 75 Ом источника сигнала с 300 Ом нагрузкой при помощи правильно подобранного кабеля.

Стоячие волны и резонанс


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

На рисунке показано, как треугольная падающая волна зеркально отражается от открытого конца линии. Для простоты, линия передачи в этом примере показана как единая жирная линия, а не как пара проводов. Падающая волна идёт слева направо, а отражённая – справа налево.
Читать дальше →
Всего голосов 86: ↑86 и ↓0 +86
Комментарии 12

Регуляризация в ограниченной машине Больцмана, эксперимент

Время на прочтение 6 мин
Количество просмотров 20K
Привет. В этом посте мы проведем эксперимент, в котором протестируем два типа регуляризации в ограниченной машине Больцмана. Как оказалось, RBM очень чувствительна к параметрам модели, таким как момент и локальное поле нейрона (более подробно обо всех параметрах можно прочитать в практическом руководстве в RBM Джеффри Хинтона). Но мне для полной картины и для получения шаблонов наподобие таких вот, не хватало еще одного параметра — регуляризации. К ограниченным машинам Больцмана можно относиться и как к разновидности сети Маркова, и как к очередной нейроной сети, но если копнуть глубже, то будет видна аналогия и со зрением. Подобно первичной зрительной коре, получающей информацию от сетчатки через зрительный нерв (да простят меня биологи за такое упрощение), RBM ищет простые шаблоны во входном изображении. На этом аналогия не заканчивается, если очень малые и нулевые веса интерпретировать как отсутствие веса, то мы получим, что каждый скрытый нейрон RBM формирует некоторое рецептивное поле, а сформированная из обученных RBM глубокая сеть формирует из простых образов более комплексные признаки; чем-то подобным, в принципе, и занимается зрительная кора головного мозга, правда, вероятно, как то посложнее =)

Читать дальше →
Всего голосов 27: ↑24 и ↓3 +21
Комментарии 15

Дата-майнинг 10 000 актёров порно

Время на прочтение 2 мин
Количество просмотров 183K


Вокруг adult киноиндустрии существует много мифов и заблуждений. Например, многие склонны думать, что типичная актриса — блондинка с пышными формами. На самом деле это далеко не так. Джон Миллворд (Jon Millward) осуществил дата-майнинг кинематографической базы Internet Adult Film Database и проанализировал информацию о 125 тыс. фильмах, которые содержат информацию более чем о 115 тыс. актёрах. Для статистического анализа были сделана выборка 10 000 человек.
Читать дальше →
Всего голосов 260: ↑235 и ↓25 +210
Комментарии 115

Подборка инструментов для эффективной frontend разработки

Время на прочтение 3 мин
Количество просмотров 101K
В эту прекрасную пятницу осмелюсь предложить хабрасообществую небольшую подборку приложений, предназначенных для увеличения продуктивности во время работы с фронтэндом. Если ваш любимый апп здесь не представлен — добро пожаловать в комментарии!

Form Builder

image

Этот прекрасный генератор форм поможет вам в создании красивейших CSS логин-боксов и прочих input вещей, при минимальных временных затратах. Помимо форм на сайте этого проекта можно создавать и другие не менее красивые CSS элементы, в том числе кнопки и ленты.
еще 24 ссылки
Всего голосов 204: ↑197 и ↓7 +190
Комментарии 46

Практика рефакторинга в больших проектах

Время на прочтение 4 мин
Количество просмотров 14K
Некоторое время назад я попал в геймдев, где столкнулся с проектами по 2 млн. строк кода, которые пишут десятки программистов. При таких масштабах кодобазы возникают проблемы неведомого мне ранее характера. Об одной и них я хочу вам сейчас рассказать.

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

Примеры из практики, как моей, так и моих коллег:
  • Переделать всю работу с базой данных с чистого JDBC на Hibernate.
  • Переделать архитектуру сервиса с отсылки-приёмки сообщений на удалённый вызов процедур (RPC).
  • Полностью переписать подсистему трансляции XML файлов в рантайм объекты.


Что делать? С какой стороны подойти к проблеме? Ниже представлен набор советов и практик, которые нам помогают справиться с этой проблемой. Сначала более общие слова, а потом конкретные методики. В общем-то ничего сверхъествественного, но кому-то может помочь.
Читать дальше →
Всего голосов 55: ↑50 и ↓5 +45
Комментарии 51

Когда я говорил…

Время на прочтение 1 мин
Количество просмотров 189K
Когда я* говорил, что нужно вкладывать в сообщество и User Groups, вы вкладывали в теннисные столы. Теперь у нас много средненьких теннисистов и нет коммюнити.

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

Когда я говорил вкладывать деньги в обучение специалистов, вы продолжали раздавать деньги за рекомендации. Теперь у нас никто не работает, а все рекомендуют.
Читать дальше →
Всего голосов 632: ↑586 и ↓46 +540
Комментарии 443

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность