Pull to refresh
8
Karma
0
Rating
Дмитрий Гах @dgakh

Разработчик ПО

Блокчейн: возможности, структура, ЭЦП и задание для студента, часть 1

Decentralized networks *Cryptography *Data storages *

Предисловие


Работаю ассистентом в вузе (как хобби), решил написать несколько лабораторных для студентов по дисциплине «распределенные системы». В первой части будет рассказано про возможности блокчейна, структуру и ЭЦП, а во второй части про: проверку подписи, майнинг и примерную организацию сети. Отмечу, что не являюсь специалистом по распределенным системам (организация сети может быть неверной).
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Views 31K
Comments 2

Hacksplaining — интерактивный курс по веб-уязвимостям

OWASP corporate blog Information Security *
image
 
Hacksplaining представляет каталогизированный и наглядный онлайн-туториал по основным веб-уязвимостям. По каждой уязвимости представлено подробное описание, насколько часто встречается, как сложно ее эксплуатировать и уровень ее критичности. К каждой уязвимости приложено подробное описание, вектор эксплуатации, уязвимый код и рекомендации по устранению и защите. В качестве примера в статье приведен разбор одного из заданий по взлому виртуального онлайн-банкинга с помощью эксплуатации sql-инъекции.
Читать дальше →
Total votes 36: ↑33 and ↓3 +30
Views 36K
Comments 6

Инструменты для команды удалённых разработчиков

Parallels corporate blog Programming *System Analysis and Design *Development for iOS *Development for MacOS *


Сегодня все чаще говорят о возможности удаленной работы. Тут и там большие компании анонсируют повсеместный исход офисного и не только планктона из корпоративных теплиц. Разработчики – первые, кого вспоминают в этот контексте. Работая удалённым разработчиком, вы зачастую не можете встретиться лицом к лицу с клиентом, лично представить свой проект, присесть за стол к коллеге, чтобы вместе решить какую-то проблему. Из-за этого у некоторых может возникнуть впечатление, что у удалённой работы есть ряд серьёзных недостатков. На мой взгляд, и по мнению десятков тысяч удаленных разработчиков это ложное впечатление. Удалённые разработчики в целом счастливее, работают усерднее, и быстро осваивают подходящие инструменты для совместной работы. Конечно, удалённая работа — вещь непростая. Ведь нас с детства приучают к тому, что нам нужен коллектив, и что общаться нужно лицом к лицу. Уходя из офиса на удалёнку, приходится учиться пользоваться инструментами, компенсирующими географическую распределённость команды. Под катом — подборка инструментов, которая поможет вам эффективно взаимодействовать с коллегами в других городах и странах. Безусловно, это не весь инструментарий. Было бы любопытно прочесть о ваших находках в комментариях к данной статье.
Total votes 41: ↑37 and ↓4 +33
Views 18K
Comments 16

Как создавать, собирать, устанавливать и использовать пакеты с программами и библиотеками для UNIX-подобных систем

Open source *C++ *C *Development for Linux *
Tutorial
Речь пойдёт о программах и библиотеках для UNIX-подобных систем, распространяемых в виде исходного кода (в том числе в виде тарболлов), написанных обычно на C и C++ (хотя этот же порядок работы может применяться к софту на любом языке). Многие вещи в этой статье написаны применительно конкретно к GNU/Linux, хотя многое из статьи может быть обобщено и на другие UNIX-подобные ОС.

Под словом «пакет» я понимаю в этой статье пакет с исходными текстами, причём не пакет конкретного дистрибутива GNU/Linux, а просто пакет, исходящий от оригинальных авторов софта (UPD от 2017-02-09: кроме тех случаев, где из контекста ясно, что слово «пакет» употреблено в другом смысле).

В этой статье я разберу следующие вопросы:

  • Вот скачал программу или библиотеку. Как её собрать и установить? Как воспользоваться библиотекой?
  • Что такое префикс (prefix) установки? В чём разница между сборкой и установкой? Куда обычно устанавливают программы?

Я разберу только совсем базовые вещи. Те, которые типичные участники сообщества свободного ПО, программирующие на C и C++ под UNIX-подобные системы, обычно уже знают. Как создавать тарболлы (на примере «голого» make) и как устанавливать чужие тарболлы. Advanced советы по созданию «хороших» пакетов я не дам. «Продвинутые» вещи читайте в документации систем сборки, в замечательной статье «Upstream guide» от Debian (в её конце есть ещё куча ссылок о создании «хороших» пакетов). Многое в этой статье можно было сделать по-другому, моя цель: дать хотя бы один способ, не пытаться объять необъятное.
Читать дальше →
Total votes 44: ↑39 and ↓5 +34
Views 30K
Comments 17

Повышаем производительность кода: сначала думаем о данных

VK corporate blog High performance *System Analysis and Design *C++ *Game development *
Translation


Занимаясь программированием рендеринга графики, мы живём в мире, в котором обязательны низкоуровневые оптимизации, чтобы добиться GPU-фреймов длиной 30 мс. Для этого мы используем различные методики и разработанные с нуля новые проходы рендеринга с повышенной производительностью (атрибуты геометрии, текстурный кеш, экспорт и так далее), GPR-сжатие, скрывание задержки (latency hiding), ROP…

В сфере повышения производительности CPU в своё время применялись разные трюки, и примечательно то, что сегодня они используются для современных видеокарт ради ускорения вычислений ALU (Низкоуровневая оптимизация для AMD GCN, Быстрый обратный квадратный корень в Quake).


Быстрый обратный квадратный корень в Quake

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

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

В статье мы рассмотрим кеширование, векторное программирование, чтение и понимание ассемблерного кода, а также написание кода, удобного для компилятора.
Читать дальше →
Total votes 141: ↑133 and ↓8 +125
Views 58K
Comments 103

Биологические предпосылки деградации компаний

Start-up development Personnel Management *IT career Business Models *


Современные научные представления говорят о существовании у процессов функционирования человеческого мозга определенных особенностей, которые:

  • на личном уровне подталкивают к прокастинации;
  • в стартапе по мере его успеха и роста приводят к потере прежней творческой «внутренней атмосферы» и нарастанию бюрократии;
  • в больших компаниях приводят к «иерархическому регрессу».

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

Некоторые компании сопротивляются этому, а некоторые даже и не понимают, почему приходит в упадок их внутренняя корпоративная культура. Почему попытки привить хорошие и правильные принципы и практики организации бизнеса не дают ожидаемых результатов…
Читать дальше →
Total votes 86: ↑81 and ↓5 +76
Views 88K
Comments 160

Chatbot на базе рекуррентной нейронной сети своими руками за 1 вечер/6$ и ~ 100 строчек кода

Data Mining *
Translation
Tutorial
В данной статье я хочу показать насколько просто сегодня использовать нейронные сети. Вокруг меня довольно много людей одержимы идеей того, что нейронки может использовать только исследователь. И что бы получить хоть какой то выхлоп, нужно иметь как минимуму кандидатскую степень. А давайте на реальном примере посмотрим как оно на самом деле, взять и с нуля за один вечер обучить chatbot. Да еще не просто абы чем а самым что нинаесть ламповым TensorFlow. При этом я постарался описать все настолько просто, что-бы он был понятен даже начинающему программисту! В путь!

image
Читать дальше →
Total votes 57: ↑54 and ↓3 +51
Views 93K
Comments 26

Помнить всё: метод римской комнаты

SmartProgress corporate blog GTD *
«Записывайте всё!» — говорит гуру GTD Дэвид Аллен. Создайте систему для записи, которой всецело доверяете, и — записывайте всё!

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

В конце концов, эту чудесную систему можно где-то потерять.

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



Читать дальше →
Total votes 32: ↑26 and ↓6 +20
Views 48K
Comments 41

Статистика сбоев DRAM от Google

Computer hardware
Статистика, собранная за два с половиной года на десяти серверах Google, показала, что количество ошибок в RAM гораздо выше, чем предполагалось ранее. В среднем на каждый модуль DIMM приходится 3751 ошибка в год. Если в микросхеме не реализована технология ECC, то эти ошибки так и остаются неисправленными.

Это первое столь масштабное и полное исследование надёжности оперативной памяти, используемой в стандартных ПК. Были проверены модули разных производителей и разных типов (DDR1, DDR2, FB-DIMM).



Как оказалось, количество ошибок мало зависит от температуры системы и марки DIMM, зато зависит от производителя материнской платы. Полные результаты см. здесь.
Total votes 59: ↑55 and ↓4 +51
Views 2.1K
Comments 58

Статистика отказов в серверной памяти

IT Infrastructure *Server Administration *


В 2009 году, на ежегодной научной конференции SIGMETRICS, группа исследователей, работавших в Университете Торонто с данными, собранными и предоставленными для изучения компанией Google, опубликовала крайне интересный документ "DRAM Errors in the Wild: A Large-Scale Field Study" посвященный статистике отказов в серверной оперативной памяти (DRAM). Хотя подобные исследования и проводились ранее (например исследование 2007 года, наблюдавшее парк в 300 компьютеров), это было первое исследование, охватившее такой значительный парк серверов, исчисляемый тысячами единиц, на протяжении свыше двух лет, и давшее столь всеобъемлющие статистические сведения.

Отмечу также, что та же группа исследователей, во главе с аспирантом, а ныне профессором Университета Торонто, Бианкой Шрёдер (Bianca Shroeder) ранее, в 2007 году публиковала не менее интересное исследование, посвященное статистике отказов жестких дисков в датацентрах Google (краткую популярную выжимку из работы Failure Trends in a Large Disk Drive Population (pdf 242 KB), если вам скучно читать весь отчет, можно найти здесь: http://blog.aboutnetapp.ru/archives/tag/google). Кроме того, их перу принадлежит еще несколько работ, в частности об влиянии температуры и охлаждении, и о статистике отказов в оперативной памяти, вызываемой, предположительно, космическими лучами высоких энергий. Ссылки на публикации можно найти на домашней странице Шрёдер, на сервере университета.
Читать дальше →
Total votes 72: ↑67 and ↓5 +62
Views 46K
Comments 81

Алгоритмы — это лишь одна из переменных в уравнении

Programming *Designing and refactoring *Algorithms *
Прочитал весьма занимательную статью про важность алгоритмов, вывод из которой показался мне весьма спорным

Для начала — тезис. Я утверждаю, что знание алгоритмов и даже наличие системного образования не делает вас хорошим разработчиком. Можно сказать жестче — для большинства задач вы будете профнепригодны, даже владея теорией графов, зная вычислительные сложности алгоритмов и прочитав всего Кнута.



Все дело в том, что разработка ПО — это не просто алгоритмы или языки.
Читать дальше →
Total votes 115: ↑101 and ↓14 +87
Views 46K
Comments 143

Пишите код, который легко удалять, а не дополнять

PayOnline corporate blog Website development *Programming *Algorithms *
Translation
image«Всякая строка кода рождается без причины, продолжается в слабости и удаляется случайно», — Жан-Поль Сартр программирует на ANSI C.

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

Чем больше у вашего API пользователей, тем больше кода приходится переписывать для введения новых изменений. Верно и обратное: чем больше вы полагаетесь на сторонний API, тем больше проблем испытываете когда он изменяется. Упорядочивание взаимодействия и взаимосвязей разных частей кода является серьезной проблемой в больших системах. И по мере развития проекта, растет и масштаб этой проблемы.

Перевод статьи на русский язык подготовлен компанией PayOnline, провайдером платежных решений для вашего онлайн-бизнеса.
Читать дальше →
Total votes 61: ↑48 and ↓13 +35
Views 50K
Comments 25

Дизайн карты: как и почему

OpenStreetMap *Geoinformation services *Data visualization *
Tutorial
В сети можно найти достаточно материалов по созданию стилей карт (и на хабре в том числе), но в основном они показывают техническую сторону создания стиля в tilemill/mapbox studio. А вот с теорией дела обстоят гораздо хуже, в основном пишут о каких-нибудь отдельных аспектах дизайна, и то не всегда объясняют почему нужно делать так, а не иначе. В этой статье я постараюсь исправить эту ситуацию и поделиться опытом с начинающими картостроителями.


Всех интересующихся прошу под кат.
Изучить основы картостроения
Total votes 30: ↑29 and ↓1 +28
Views 28K
Comments 37

Мое знакомство с ASP.NET MVC в Visual Studio 2015 на примере построения прототипа МИС

.NET *ASP *C# *
Sandbox
В этом году в качестве курсовой работы мне нужно было написать несложную медицинскую информационную систему (МИС) для небольшой частной клиники по лечению эпилепсии.

База данных пациентов в клинике уже была, написана она была еще в далеком 1998 году в Microsoft Access того времени (причем даже с красивым пользовательским интерфейсом), но вот работала она только в одном месте — на компьютере заведующего, да еще и поддерживать ее стало совершенно невозможно. Значит, давно назрела необходимость внедрять что-то новое!

Сказано — сделано. Работать надо было быстро (все-таки сдавать курсовую пора) и при этом хотелось сделать работу максимально интересной для себя. Я давно хотел разобраться с ASP.NET MVC, был немного знаком с C# и общими принципами MVC, поэтому скачал последнюю Visual Studio 2015 RC и принялся за работу.

Под катом — весь процесс знакомства с технологией и разработки такой системы со всеми встретившимися подводными камнями. Данная статья пригодится всем, кто знаком с программированием и когда-то делал блог по туториалу для любого MVC фреймфорка и хочет узнать, как же сделать что то более интересное.
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Views 51K
Comments 8

50+ полезных ресурсов для самообучения

Studying in IT
learning

На сегодняшний день, когда информация стала доступна как никогда и получить новые знания проще простого, у нас появилась другая проблема: как фокусироваться и структурировать новые знания, если отсутствуют внешние ограничения вроде экзамена или необходимости подготовки к уроку?
И снова нас спасают разработчики и интернет, где появляется все больше открытых университетов, онлай-курсов, лекций и сервисов организации своего обучения.
Я решила собрать в одном месте ссылки на ресурсы дистанционного обучения и другие полезные сервисы на английском и русском языках, большинство из которых бесплатны. Не было цели охватить все, но если вы считаете, что в список нужно что-то добавить –, пожалуйста, напишите в комментариях.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 109K
Comments 16

Как компьютер сам свой код улучшал, или программируем процесс программирования

Algorithms *
На носу было придумывание темы для диплома, на кафедре популярностью пользовались различные варианты идей связанных с генетическими алгоритмами, а мне самому хотелось сделать что-нибудь этакое. Так и родилась идея, давшая начало данному проекту, а именно генетическому оптимизатору программного кода.



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

Например вот такая забавная оптимизация набора арифметических инструкций (взятых из какой-то подвернувшейся под руку математической библиотеки), соответствующих формулам: , которая на 6 джаве с выключенным JIT у меня давала около 10% ускорения, при этом на первый взгляд даже не очевидно что эти формулы эквивалентны (ОТКУДА ТУТ OR? ЭТО ВООБЩЕ ЗАКОННО?!), хотя это так. Под катом я расскажу, как именно получались такие результаты и каким образом компьютер придумывал лучший код чем тот, который мог написать я сам.
Читать дальше →
Total votes 45: ↑43 and ↓2 +41
Views 33K
Comments 39

Реализация пула объектов на языке C#

.NET *C# *
Sandbox
Доброго времени суток!
В этой статье я расскажу, как повысить производительность многопоточного (и не только) C#-приложения, в котором часто создаются объекты для «одноразовой» работы.
Немного про многопоточность, неблокирующую синхронизацию, использование встроенного в VS2012 профилировщика и небольшой бенчмарк.
Читать дальше →
Total votes 68: ↑63 and ↓5 +58
Views 51K
Comments 16

Несколько советов по OpenMP

High performance *Concurrent computing *
image

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

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

1. Именуйте критические секции

В очередь, сукины дети, в очередь! //М. А. Булгаков «Собачье сердце»

С помощью директивы critical мы можем указать участок кода, который будет исполняться только одним потоком в один момент времени. Если один из потоков начал выполнение критической секции с данным именем, то остальные потоки, начавшие выполнение этой же секции, будут заблокированы. Они будут ждать своей очереди. Как только первый поток завершит выполнение секции, один из заблокированных потоков войдет в нее. Выбор следующего потока, который будет выполнять критическую секцию, будет случайным.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Views 25K
Comments 4

Храним 300 миллионов объектов в CLR процессе

.NET *C# *Big Data *

Камень преткновения — GC


Все managed языки такие как Java или C# имеют один существенный недостаток — безусловное автоматическое управление паматью. Казалось бы, именно это и является преимуществом managed языков. Помните, как мы барахтались с dandling-указателями, не понимая, куда утекают драгоценные 10KB в час, заставляя рестартать наш любимый сервер раз в сутки? Конечно, Java и C# (и иже с ними) на первый взгляд разруливают ситуацию в 99% случаев.

Так-то оно так, только вот есть одна проблемка: как быть с большим кол-вом объектов, ведь в том же .Net никакой магии нет. CLR должен сканировать огромный set объектов и их взаимных ссылок. Это проблема частично решается путём введения поколений. Исходя из того, что большинство объектов живёт недолго, мы высвобождаем их быстрее и поэтому не надо каждый раз ходить по всем объектам хипа.

Но проблема всё равно есть в тех случаях, когда объекты должны жить долго. Например, кэш. В нём должны находиться миллионы объектов. Особенно, учитывая возрастание объемов оперативки на типичном современном серваке. Получается, что в кэше потенциально можно хранить сотни миллионов бизнес-объектов (например, Person с дюжиной полей) на машине с 64GB памяти.

Однако на практике это сделать не удаётся. Как только мы добавляем первые 10 миллионов объектов и они “устаревают” из первого поколения во второе, то очередной полный GC-scan “завешивает” процесс на 8-12 секунд, причём эта пауза неизбежна, т.е. мы уже находимся в режиме background server GC и это только время “stop-the-world”. Это приводит к тому, что серверная апликуха просто “умирает” на 10 секунд. Более того, предсказать момент “клинической смерти” практически невозможно.
Что же делать? Не хранить много объектов долго?

Зачем


Но мне НУЖНО хранить очень много объектов долго в конкретной задаче. Вот например, я храню network из 200 миллионов улиц и их взаимосвязей. После загрузки из flat файла моё приложение должно просчитать коэффициенты вероятностей. Это занимает время. Поэтому я это делаю сразу по мере загрузки данных с диска в память. После этого мне нужно иметь object-graph, который уже прекалькулирован и готов “к труду и обороне”. Короче, мне нужно хранить резидентно около 48GB данных в течении нескольких недель при этом отвечаю на сотни запросов в секунду.

Вот другая задача. Кэширование социальных данных, которых скапливаются сотни миллионов за 2-3 недели, а обслуживать необходимо десятки тысяч read-запросов в секунду.
Читать дальше →
Total votes 50: ↑44 and ↓6 +38
Views 34K
Comments 81

NFX — Ультраэффективная Бинарная Сериализация в CLR

.NET *C# *Big Data *

Требования


В данной статье мы рассмотрим задачи переноса сложных объектов между процессами и машинами. В наших системах было много мест, где требовалось перемещать большое кол-во бизнес объектов различной структуры, например:

  • самозацикленные графы объектов (деревья с back-references)
  • массивы структур (value types)
  • классы/структуры с readonly полями
  • инстансы существующих .Net коллекций (Dictionary, List), которые внутренне используют custom-сериализацию
  • большое кол-во инстансов типов, специализированных для конкретной задачи


Речь пойдёт о трёх аспектах, которые очень важны в распределённых кластерных системах:

  • скорость сериализации/десериализации
  • объём объектов в сериализированном виде
  • возможность использовать существующие объекты без надобности “украшения” этих объектов и их полей вспомогательными атрибутами для сериализации

Читать дальше →
Total votes 24: ↑19 and ↓5 +14
Views 21K
Comments 40
1

Information

Rating
Does not participate
Location
Баку, Азербайджан, Азербайджан
Registered
Activity