Pull to refresh
0
0
Синцов Роман @romiras_spb

User

Send message

Написание blockchain менее чем за 200 строк кода на Go

Reading time8 min
Views31K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Code your own blockchain in less than 200 lines of Go!".


image

Данный урок является хорошо адаптированным постом про простое написание blockchain на Javascript. Мы портировали его на Go и добавили дополнительных фич, таких как просмотр цепочек в браузере.

Читать дальше →
Total votes 40: ↑33 and ↓7+26
Comments19

Где найти и как выбрать тимлида

Reading time11 min
Views25K


Предыстория


Привет! Меня зовут Виталий Шароватов, я уже 16 лет работаю в IT. Сейчас я руковожу направлением фронтенд в Badoo. В него входят две команды, которые занимаются разработкой и поддержкой десктопной версии сайта badoo.com, мобильной версии m.badoo.com и многими другими проектами. Да, десктопную и мобильную версии у нас делают отдельные команды. :)

Два с половиной года назад я пришел в Badoo разработчиком, со временем вырос до тимлида, а потом, когда было решено перевозить команду Desktop Web в Лондон, стал руководителем направления.

Прошлой осенью на Codemotion Milan я делал доклад о росте из разработчика в тимлида (и писал на Хабр статью об этом) и о том, с какими неожиданными моментами мне пришлось столкнуться, а теперь расскажу, как при переходе из лида в руководителя направления я справился с подбором и «выращиванием» тимлида в одной из команд (Mobile Web).
Читать дальше →
Total votes 68: ↑65 and ↓3+62
Comments38

Что общего у собеседования кодера и игры «Змейка»?

Reading time10 min
Views38K

Если вы родились в 80-х или 90-х, то наверняка слышали о Snake. То есть, скорее всего, вы потратили безумное количество времени на своём Nokia 3310, выращивая огромную змею на мелком экранчике. Что ещё мы помним о телефонах Nokia?

Их неразряжающийся аккумулятор, правда? Как такой «примитивный» телефон выдерживал долгие часы игры в «Змейку» без разрядки аккумулятора?

Короткий (и неполный) ответ: всё дело в методе скользящего окна.

Мы бы с радостью написали целую статью о Snake, но в этом посте мы всё-таки рассмотрим менее зрелищный, но тем не менее очень важный метод, и ответим на вопросы типа:

  • Почему мы и другие программисты считаем его фундаментальным алгоритмом?
  • Почему он так часто используется на технических собеседованиях?
  • Как он использовался в Snake и других «реальных» областях применения?
  • На какие самые популярные вопросы собеседований можно (лучше) ответить с помощью метода скользящего окна?

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

NB: Если вас волнует только «Змейка» (и мы вас вполне понимаем), то можете перейти к самому концу поста.
Читать дальше →
Total votes 74: ↑71 and ↓3+68
Comments15

10 самых популярных сайтов для соревнований программистов на начало 2018 года

Reading time4 min
Views70K


В конце 2016 года была опубликована аналогичная статья. С тех пор список был обновлен на основе наблюдений и анализа нескольких ресурсов (постов в популярных блогах, обсуждений на Quora, поисковых запросов в Google и обсуждений на форумах, таких как reddit/learnprogramming и Hacker News).

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

На этих сайтах также можно просто посоревноваться с коллегами или развлечься, решая интересные головоломки. Порядок составления списка основан лишь на уровне сложности заданий: от начального до продвинутого.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments13

Как обучть мдль пнмть упртые скрщня

Reading time16 min
Views40K

Недавно я натолкнулся на вопрос на Stackoverflow, как восстанавливать исходные слова из сокращений: например, из wtrbtl получать water bottle, а из bsktballbasketball. В вопросе было дополнительное усложнение: полного словаря всех возможных исходных слов нет, т.е. алгоритм должен быть в состоянии придумывать новые слова.


Вопрос меня заинтриговал, и я полез разбираться, какие алгоритмы и математика лежат в основе современных опечаточников (spell-checkers). Оказалось, что хороший опечаточник можно собрать из n-граммной языковой модели, модели вероятности искажений слов, и жадного алгоритма поиска по лучу (beam search). Вся конструкция вместе называется модель зашумлённого канала (noisy channel).


Вооружившись этими знаниями и Питоном, я за вечер создал с нуля модельку, способную, обучившись на тексте "Властелина колец" (!), распознавать сокращения вполне современных спортивных терминов.


Читать дальше →
Total votes 88: ↑87 and ↓1+86
Comments17

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

Reading time9 min
Views64K
В сегодняшнем материале мы собрали одни из наиболее популярных книг, отобранных самими разработчиками — резидентами Reddit, Quora, Stack Exchange, Stack Overflow и Hacker News.

В нашу подборку попали работы по популярным языкам программирования, проектированию ПО, работе с Linux-системами, сборники практических советов для разработчиков — от начинающих, до опытных. Объединяют эту подборку высокие оценки самих программистов, которым эти книги помогали на разных этапах их карьеры.

Читать дальше →
Total votes 27: ↑22 and ↓5+17
Comments12

Подбираем пароли с помощью Google Chrome

Reading time6 min
Views152K

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


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


В случае, если мы имеем какой-либо портал, где пользователи – это люди, то бОльшую часть уязвимых слабых паролей можно отнести к одной из 4 групп:


  1. Пароли, входящие в топ самых популярных фраз (такие как «123456», «password», и т.п.).
  2. Пароли, представляющие собой сочетание клавиш – так называемые keyboard-walks пароли (например, «qwerty», «qazwsx», и т.п.).
  3. Пароли – искажённые логины («user123», «user321», и т.п.).
  4. Либо использование в качестве пароля популярных русских слов или имён в «перевёрнутой» раскладке («ljcneg», «fylhtq»)
Читать дальше →
Total votes 37: ↑33 and ↓4+29
Comments15

Выпуск#5: ITренировка — актуальные вопросы и задачи от ведущих компаний

Reading time5 min
Views14K
Пока мозг ещё не окончательно превратился в оливье, самое время немного заставить его поработать. Новая подборка логических и алгоритмических задач, предлагаемых на собеседованиях в известные IT-компании.

КДПВ

В нашу первую в новом году подборку попали вопросы и задачи, задаваемые в Alcatel-Lucent (Nokia).
Задачи мы постарись подобрать с различным уровнем сложности. На некоторые (а, может быть, и на все) вопросы можно найти ответ на просторах интернета, но это ведь не наш путь, верно?
Предлагаем интеллектуально размяться и попробовать самостоятельно решить приведённые задачи.

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

10 очевидных шагов для подготовки инфраструктуры интернет-магазина к Чёрной пятнице

Reading time10 min
Views9.8K


Несмотря на то, что мы предпочитаем писать про микросервисы, Kubernetes и прочее из области cloud native, нам хорошо известен и другой мир — гораздо более реальный, если посмотреть «в массе», например, на интернет-магазины (даже весьма успешные). В нём нет автоматического provisioning и масштабирования, сложной балансировки нагрузки и прочих красивых технических решений. Зато есть «Чёрная пятница», которая уже завтра, а значит — времени на подготовку практически не осталось. Конечно, наш рецепт №1 по качественной подготовке к ней (а заодно и получению целого букета дополнительных плюсов) — миграция на микросервисную архитектуру и Kubernetes, но предположим, что по какой-то причине этот вариант не подходит (до завтра его всё равно не реализовать).

Эта статья — список более-менее быстрых действий для оптимизации типовой инфраструктуры интернет-магазина (рассматриваются примеры с nginx, Apache, PHP, MySQL) с целью её подготовки к высоким нагрузкам. Они могут быть весьма очевидны для опытных системных администраторов, однако наверняка окажутся полезными для тех, кто глубоко ещё не погружался в эти вопросы, а их актуальность стремительно нарастает. Итак, попробуем выжать максимум из того, что есть в инфраструктуре, или хотя бы взять на заметку те основные вопросы, которыми стоит озаботиться перед следующими всплесками нагрузки.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments3

Вы работаете не в том месте (если у вас офис открытого типа)

Reading time6 min
Views48K

Что такое физическое пространство?


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


Мой домашний офис — крепость производительности

Когда я заходил в офис, окружение изменялось. Здесь постоянно всё отвлекало: другие сотрудники, лающие собаки (отмечу: маленькие собачонки не в счёт), импровизированные совещания и празднование дней рождения. Было очень сложно перейти в состояние потока и невероятно легко выйти из него. Среди всех мест, где я мог бы работать, стол в офисе, наверное, был худшим вариантом.

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

Я осознал, что ненавижу офисы открытого типа.
Читать дальше →
Total votes 61: ↑58 and ↓3+55
Comments206

За пять дней я прошел собеседования в пяти компаниях Силиконовой долины и получил пять предложений о работе

Reading time12 min
Views118K
За пять дней, с 24 по 28 июля 2017 года, я прошел собеседования в LinkedIn, Salesforce Einstein, Google, Airbnb и Facebook; все пять компаний предложили мне работу. Это был замечательный опыт и я понимаю, как мне повезло, что мои усилия оправдали себя, поэтому решил написать об этом. Здесь я расскажу о том, как готовился к собеседованиям, как они проходили и какое впечатление произвели на меня компании.



Как все началось


Я отработал в Groupon почти три года. Это моя первая работа, там были и прекрасные люди, и отличные проекты. Мы делали всякие интересные штуки, вводили перемены внутри компании, публиковали материалы и все в таком духе. Но со временем я стал ощущать, что темп моего самообразования стал затухать (попросту говоря, замедляться), мне не хватало пищи для ума. К тому же, как и всякого разработчика ПО из Чикаго, меня тянуло в Область залива Сан-Франциско — ведь там столько известных компаний.

Жизнь коротка, а профессиональная жизнь еще короче. Обговорив все с женой и заручившись ее полной поддержкой, я решил сделать решительный шаг и в первый раз в жизни поменять работу.
Читать дальше →
Total votes 95: ↑88 and ↓7+81
Comments98

Blockchain

Reading time9 min
Views121K
Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.

Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

В таких системах есть три группы действующих лиц:

  • источники событий (транзакций)
  • источники блоков (фиксаторы транзакций)
  • получатели (читатели) блоков и зафиксированных транзакций.

В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:

  • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments73

Чистый код на PHP

Reading time19 min
Views111K


Это принципы разработки ПО, взятые из книги Clean Code Роберта Мартина и адаптированные для PHP. Это руководство не по стилям программирования, а по созданию читабельного, многократно используемого и пригодного для рефакторинга кода на PHP.


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


Статья вдохновлена clean-code-javascript.

Читать дальше →
Total votes 69: ↑61 and ↓8+53
Comments180

Четыре типажа программистов

Reading time17 min
Views214K

Привет.


Я впервые пишу в поток об управлении и найме персонала. Речь пойдет об одном из способов классифицировать ваших будущих или действующих программистов. Мой основной тезис: все разработчики, грубо говоря, делятся на 4 больших типажа и каждому из этих типажей есть своя область применения. Попытка направить неправильный типаж на решение неподходящих для него задач ведет к провалу (неэффективная работа, или сотрудник покидает команду). Хотите знать почему так — добро пожаловать под кат. Приготовьтесь, текста много.

Читать дальше →
Total votes 258: ↑237 and ↓21+216
Comments548

Точность через неточность: Улучшаем Time-объекты

Reading time10 min
Views5.1K
При создании value-объекта для хранения времени, я рекомендую выбирать вместе с экспертами в предметной области и вокруг нее с какой точностью он будет храниться.

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


К сожалению, так делают не часто, и, когда приходит момент, проблема дает о себе знать. Рассмотрим следующий код:


$estimatedDeliveryDate = new DateTimeImmutable('2017-06-21');

// представим, что сегодня ТАКЖЕ 2017-06-21
$now = new DateTimeImmutable('now');

if ($now > $estimatedDeliveryDate) {
    echo 'Package is late!';
} else {
    echo 'Package is on the way.';
}

Ожидаемо что, что 21 июня этот код выведет Package is on the way., ведь день еще не закончился и пакет, например, доставят ближе к вечеру.


Несмотря на это код так не делает. Так как не указана часть со временем, PHP заботливо подставляет нулевые значения и приводит $estimatedDeliveryDate к 2017-06-21 00:00:00.
С другой стороны $now вычисляется как… сейчас. Now включает в себя текущий момент времени, который, скорее всего, не полночь, так что получится 2017-06-21 15:33:34 или вроде того, что будет позднее, чем 2017-06-21 00:00:00.

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

Система управления складом с использованием CQRS и Event Sourcing. Проектирование

Reading time6 min
Views10K
image
Итак, после постановки требований описанной в части 1 можно перейти к проектированию системы.

Основная наша задача в проектировании, как это понятно из названия статьи, добиться разделения интерфейсов на Query и Command, чтобы впоследствии разделить бизнес сценарии на те, которые будут читать данные (Query интерфейсы) и на те, которые будут изменять данные (Command интерфейсы). А также обеспечить минимальное время ожидание (latency) на обновление данных, доступных через Query, после того как мы изменили данные через Command.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments11

Искусственный интеллект помогает ученикам обманывать учителя

Reading time7 min
Views36K
image

Дэниз Гарсия [Denise Garcia] знает, что иногда её ученики обманывают её, но вскрытая ею в феврале ситуация оказалась совершенно необычной. Гарсия, учительница математики в Вест-Хартфорде, Коннектикут, случайно включила нетипично сложное уравнение в набор задач для своего класса, изучающего математику по институтской программе. Однако каким-то образом несколько человек из класса, где занимаются 15 учеников, сумели правильно решить его. Эти ученики продемонстрировали свои работы с решением уравнения, опровергнув обычную схему разоблачения списывания.

Гарсия была сбита с толку, но затем она вспомнила один разговор, происходивший за несколько лет до того. Некоторые из бывших учеников рассказали ей про онлайн-инструмент Wolfram|Alpha, способный за несколько секунд расправляться со сложными уравнениями. Он даёт как ответы, так и последовательные шаги для достижения ответов, поэтому обманщиков никак нельзя было отловить на копировании результата в домашнюю работу.
Читать дальше →
Total votes 33: ↑26 and ↓7+19
Comments148

10 типов структур данных, которые нужно знать + видео и упражнения

Reading time9 min
Views279K
Екатерина Малахова, редактор-фрилансер, специально для блога Нетологии адаптировала статью Beau Carnes об основных типах структур данных.

«Плохие программисты думают о коде. Хорошие программисты думают о структурах данных и их взаимосвязях», — Линус Торвальдс, создатель Linux.

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

В этой статье я покажу вам 10 самых распространенных структур данных.
Читать дальше →
Total votes 37: ↑29 and ↓8+21
Comments31

Где логика? Учимся мыслить системно. Часть 1

Reading time10 min
Views33K

I Вступление


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

Эдгар Аллан По
Для людей, активно завоевывающих свое место в обществе, в помощь сейчас доступно достаточное количество литературы об ораторском искусстве, о проведении переговоров, о лидерстве и т.п. Но львиную долю этих трудов объединяет то, что в них во всех, авторы учат облюбованным ими методикам человеческих отношений, приемам влияния на людей и т.п. Это напоминает рецепты из поваренной книги: «отмерьте полстакана теории, сдобрите щепоткой логики, смешайте со смелостью по вкусу … подавать себя лучше слегка подогретым».

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

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

Итак, поехали…

Для проведения любого анализа, необходимо какая-то точка отсчета. А поскольку, на мой взгляд, стрежнем в отношениях людей все же является взаимопонимание, ну по крайней мере для успешных взаимоотношений, то давайте попробуем зацепиться именно за эту тему.
Читать дальше →
Total votes 21: ↑15 and ↓6+9
Comments13

Руководство для начинающих по прогрессивным веб-приложениям и фронтенду

Reading time20 min
Views59K

image


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

Читать дальше →
Total votes 61: ↑44 and ↓17+27
Comments130

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity