Pull to refresh
3
0
Михаил Богатырев @ksupipr

Марковевед

Send message

Психология читабельности кода

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

Каждый программист старается писать хороший код. Читабельность — один из главных признаков такого кода. О ней написано достаточно много книг, но всё же в теме есть пробелы. Например, те самые книги сфокусированы больше на советах КАК написать читабельный код, а не на причинах того, почему один код является хорошо читабельным, а другой — нет. Книга говорит нам «используйте подходящие названия переменных» — но что делает одно название более подходящим, чем другое? Работает ли это для всех примеров подобного кода? Работает ли это для всех программистов, которым попадётся на глаза этот код? Как раз о последнем я и хотел бы поговорить чуть детальнее. Давайте погрузимся немного в человеческую психику. Наш мозг — главный наш инструмент, хорошо бы изучить специфику его работы.
Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments64

Юнит-тестирование для чайников

Reading time15 min
Views1.1M
Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



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

Оно выполняет свою задачу, но сложно для автоматизации. Как правило, тесты требуют, чтобы вся или почти вся система была развернута и сконфигурирована на машине, на которой они выполняются. Предположим, что вы разрабатываете web-приложение с UI и веб-сервисами. Минимальная комплектация, которая вам потребуется: браузер, веб-сервер, правильно настроенные веб-сервисы и база данных. На практике все еще сложнее. Разворачивать всё это на билд-сервере и всех машинах разработчиков?

We need to go deeper
Total votes 70: ↑63 and ↓7+56
Comments65

Случайное распределение урона в RPG

Reading time9 min
Views29K
image

Для вычисления урона от атаки в таких настольных ролевых играх, как Dungeons & Dragons, используются броски урона. Это логично для игры, чей процесс основан на бросках кубиков. Во многих компьютерных RPG урон и другие атрибуты (сила, очки магии, ловкость и т.д.) вычисляются по похожей системе.

Обычно сначала пишется код вызова random(), а затем результаты корректируются и подстраиваются под нужное игре поведение. В этой статье будут рассмотрены три темы:

  1. Простые корректировки — среднее значение и дисперсия
  2. Добавление асимметрии — отбрасывание результатов или добавление критических попаданий
  3. Полная свобода в настройке случайных чисел, неограниченная возможностями кубиков
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments13

Создание 3D-шахмат в Unity

Reading time16 min
Views33K
image

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

В этом туториале мы создадим 3D-игру в шахматы на Unity. В процессе вы узнаете. как реализовать следующее:

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

К конце этого туториала мы создадим многофункциональную игру в шахматы, которую можно будет использовать как основу для разработки других настольных игр.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments5

40 «глупых» вопросов о CRM

Reading time21 min
Views35K
Все, кто работают с клиентами, жаждущими купить ПО, хоть раз да слышали фразу «А можно глупый вопрос?». Как правило далее следует вполне адекватная речь, просто человек стесняется простых вопросов. А стесняться не нужно — ведь каждый из нас не может знать абсолютно всё. На то и есть профессионалы в разных сферах, чтобы разъяснять даже то, что им самим кажется очевидным.

Мы собрали 40 самых распространённых вопросов о CRM-системах и решили разом на них ответить. Конечно, мы не безумные оптимисты, чтобы полагать, что после этого поток иссякнет. Да и нет такой цели. Но если вы не знали и боялись спросить — читайте, сохраняйте, пользуйтесь. Только вопрос-ответ, никакой лирики.


Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments27

11 лучших шрифтов для программирования

Reading time3 min
Views270K
Много статей и сайтов сравнивают шрифты для программирования — всё это отличные ресурсы. Так зачем я опять поднимаю эту тему? Потому что сам всегда терялся в десятках шрифтов и не мог понять, какой лучше. Так что я опробовал много шрифтов и выбрал следующие для вас. Они довольно популярны и их легко получить. И самое главное, все эти шрифты бесплатны!

Я ранжировал шрифты по следующим показателям:

  • Насколько различимы схожие символы, такие как 0O, 1lI.
  • Легко ли читается шрифт (ширина строк, ширина/высота символов).
  • И мои личные предпочтения!

Все скриншоты сделаны в VSCode на одном фрагменте кода. Если не обозначено иное, то везде установлен размер "editor.fontSize": 14.
Читать дальше →
Total votes 56: ↑54 and ↓2+52
Comments117

Глупые часы не такие уж глупые

Reading time3 min
Views55K

ДО и ПОСЛЕ — почувствуй разницу

Почти год назад я писал про придуманные мной часы.
Закончилась та статья такой фразой: “Теперь в моих планах, когда ничто меня не торопит, сделать устройство более технологичным и решить пару вопросов, всплывших во время создания первой модели”. Как говорится — не прошло и года.

Самые первые часы, в итоге, перекочевали в комнату сына, т.к. они создают мягкое, уютное освещение и ему не страшно спать. А мне как раз этот свет мешал. И сейчас в моей спальне стоят часы версии 2.0 под кодовым названием LUMO. И они уже чуть поумнее.

Так как у меня появилась микроочередь из желающих такие часы себе, мне пришлось подумать, как их улучшить, одновременно упростив их изготовление и сборку, а также снизив себестоимость.
Читать дальше →
Total votes 128: ↑126 and ↓2+124
Comments151

Исследуем вопрос наказаний 2.0

Reading time11 min
Views60K
Этот материал будет полезен в первую очередь тем, кто много занимался программированием и вдруг внезапно стал вынужден заниматься управлением проектами и людьми. С год назад я рассказал про наказания на конференции, а солнышки из Битрикса сделали текстовую версию для #habr. К сожалению, потеряв в точности, четкости и правильности акцентов. За год материала добавилось. В конце — чеклист для ленивых :)

Итак. Если вы не садист или моральный урод, а ваши сотрудники — не мазохисты, то сомневаюсь, что кому-то из вас наказания доставляют удовольствие. Мне — нет.
image
Читать дальше →
Total votes 109: ↑91 and ↓18+73
Comments175

Как работает реляционная БД

Reading time51 min
Views546K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Total votes 232: ↑229 and ↓3+226
Comments134

PostgreSQL: аналитика для DBA

Reading time4 min
Views36K
Многие пользователи СУБД PostgreSQL знают, что сервер во время своей работы собирает разнообразную статистику, но не все знают, что ее полезно анализировать и как ее извлекать для этого. В этом небольшом тулките собраны несколько полезных запросов, дающих некоторое представление о том, как использовать это «скрытое знание», которое постоянно копится. Эти запросы можно использовать для мониторинга состояния PostgreSQL (ручного или с помощью плагинов для систем мониторинга вроде Nagios, Cacti или Zabbix), для поиска узких мест в работе сервера и многих других подобных задач. Помните, что это лишь верхушка айсберга; в документации можно найти описания нескольких десятков системных представлений, которые также могут быть полезны администратору PostgreSQL.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments20

HighLoad++ — это блюдо, которое подают высоконагруженным

Reading time6 min
Views21K


Пожалуй главным отличием конференции разработчиков высоконагруженных систем HighLoad++ от многих других является отсутствие скрытых целей. За нами не стоит ни одного лица или организации, которая бы навязывала правила игры или занималась хантингом на мероприятии, типа:
  • Крупной компании
  • Толстосума-спонсора
  • Государственных структур

Уже долгие годы HighLoad++ остается событием, которое одни разработчики организуют для других разработчиков.

Девять лет назад мы приняли для себя несколько строгих правил, которым стараемся неукоснительно следовать. Не будем перечислять их все — для этого еще придёт время, назовем лишь основные.
Читать дальше →
Total votes 35: ↑27 and ↓8+19
Comments10

Правильный дизайн API: что такое «один», «много», «нуль» и «ничто»

Reading time9 min
Views20K
Здравствуйте, наши постоянные и эпизодические читатели.

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

Приятного чтения
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments6

Сборщик почты (делаем простые вещи сложно)

Reading time21 min
Views26K

В качестве предисловия


Наверное, многие из вас в своей практике сталкивались с задачей сбора почты с ряда ящиков. Зачем это может быть нужно? Наверное, потому что это универсальный механизм обмена данными между системами. Множество библиотек под любые языки, реализующих SMTP, POP3, IMAP, готовые решения по реализации стэка сообщений (как я сложно назвал почтовый ящик...) и т.д.

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

Кому достаточно приведенного ниже кода — дальше могут не читать:

         foreach (var mailbox in mailboxes)
                using (var client = new Pop3Client())
                {
                    client.Connect(Hostname, Port, false);
                    client.Authenticate(User, Password);

                    var count = client.GetMessageCount();
                    for (var i = 0; i < count; i++)
                    {
                        Mail = client.GetMessage(i + 1);
                        var cat = SortMail(Mail);
                        DoSomething(Mail, cat);
                    }
                }

Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments5

Готовим Sublime Text 2 для front-end

Reading time7 min
Views268K
Ни для одного опытного программиста или верстальщика не секрет, что настроенная под себя среда разработки (не в смысле IDE, а в более общем) — жизненная необходимость. Было время, когда я делал очередную верстку в практически голом Notepad++ на единственном мониторе, поочередно открывая Photoshop, браузер и редактор. Сегодня, в эпоху «автоматизации всего», мне сложно представить, как вообще можно было так работать.

Sublime Text 2 — популярный расширяемый кроссплатформенный текстовый редактор, для которого написано множество плагинов если и не на все случаи жизни, то на многие. В этом посте я попытаюсь рассказать как из этого конструктора сложить удобный инструмент front-end разработчика для работы с HTML, CSS и JavaScript.
Читать дальше →
Total votes 107: ↑95 and ↓12+83
Comments134

Как найти работу в Германии

Reading time4 min
Views146K

Для всех, кто просил описать как искать работу программистом в Германии, а так же для тех, кто в комментариях бездоказательно писал, что Германия далеко не лучшее место для работы, ну и для всех интересующихся написан этот пост.
Читать дальше →
Total votes 103: ↑95 and ↓8+87
Comments283

Вам календарик 2012

Reading time1 min
Views2.9K


И вот опять вам календарик!

По сложившейся традиции канун 31 декабря я провожу поедая мандарины и обновляя календарик для Хабра.

В карман (100×70мм):
pdf, eps, svg или png (1185×836, 300dpi)

На стенку (A4):
pdf, eps, svg или png (3512×2487, 300dpi)

Сделай сам:
Генератор календариков (Python, CC-BY)

Читать дальше →
Total votes 160: ↑139 and ↓21+118
Comments35

Постинг данных из скрипта во Вконтакт на публичную страницу

Reading time3 min
Views9.5K

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

Идея
Всё началось с идеи — вначале она мне показалась немного скучной, и смысл в реализации я не видел, но подумав дважды (а то и трижды) я понял, что это может принести некоторый профит к моим навыкам. Но об этом ниже :)
Читать дальше →
Total votes 25: ↑15 and ↓10+5
Comments15

Dingoo A320 vs Gemei A330 — unboxing

Reading time2 min
Views8.5K
И вот наконец-то мне пришли долгожданные Dingoo A320 и Gemei A330, которые бурно обсуждаются в комментариях к предыдущему посту. Как и обещал всем, выкладываю много фотографий (все они кликабельны) и свои первые впечатления.

Коробка посылки слегка помята, а наш доблестный DHL постарался и выбил из меня еще денег «за таможенное оформление», но все же они здесь:



Что же внутри?
Total votes 64: ↑49 and ↓15+34
Comments166

Dingoo A320 за $49.50

Reading time1 min
Views16K
Такое себе маленькое уведомление — сейчас можно купить известную хабра-людям портативную игровую консоль Dingoo A320 (wikipedia) всего за $49.50 (это уже с почтовым трекинговым номером). Почитать хабра-статьи про нее можно тут и тут.



Как это сделать?
Total votes 110: ↑102 and ↓8+94
Comments575

40 механик для социальных игр

Reading time4 min
Views30K
Разработчик игр Раф Костер (Raph Koster) составил всеобъемлющий список базовых правил, на которых основаны социальные отношения в играх (мультиплеер, параллельная игра и т.д.). Эти правила для разработчиков игры заменяют азбуку. Во многом они пересекаются с принципами игровой механики, которые уже обсуждались на Хабре.

Раф Костер приобрёл известность как создатель дизайна Ultima Online и креативный директор проекта Star Wars Galaxies, после чего основал собственную студию.
Читать дальше →
Total votes 102: ↑92 and ↓10+82
Comments33

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Works in
Date of birth
Registered
Activity