Обновить
4
0

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

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

Как не надо писать код

Время на прочтение4 мин
Охват и читатели37K

image


Готовы погрузиться с головой в дивный мир программирования? Хотите узнать как непредсказуемо могут повести себя несколько простых строк кода?


Если ваш ответ "Да!" — добро пожаловать под кат.


Вас будут ждать несколько занимательных задачек на С или С++.


Правильный ответ с объяснением всегда будет спрятан под спойлером.


Удачи!

Читать дальше →

15 советов по работе с Github

Время на прочтение8 мин
Охват и читатели64K

Я 10 лет разрабатываю ПО, участвовал в нескольких open source-проектах и в многочисленных не-open source-проектах, работал в больших и малых командах, и везде мы использовали Github в качестве репозитория версионирования.

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

Теория вычислений. Введение в конечные автоматы

Время на прочтение5 мин
Охват и читатели105K
Спойлер
Cкажу cразу, что не буду объяснять слишком формально.

Конечные автоматы (finite-state machine)


Это до предела упрощенная модель компьютера имеющая конечное число состояний, которая жертвует всеми особенностями компьютеров такие как ОЗУ, постоянная память, устройства ввода-вывода и процессорными ядрами в обмен на простоту понимания, удобство рас­суждения и легкость программной или аппаратной реализации.

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

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

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

Пример 1
  • По горизонтали вверху находятся возможные входные символы.
  • По вертикали слева находятся текущие возможные состояния.

image

Здесь видно, что из состояния 0 в состояние 1 можно попасть только, если у нас будет входной символ 'a', из состояния 1 в состояние 2, если символ 'b'.


Текущее состояние — множество состояний в котором автомат может находиться в данный момент времени.

Стартовое состояние — состояние откуда КА начинает свою работу.

Заключительное состояние — множество состояний в которых автомат принимает определенную цепочку символов, в ином случае отвергает.
Read more →

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

Время на прочтение21 мин
Охват и читатели25K
image

Недавно я выпустил свою первую игру BYTEPATH и мне показалось, что будет полезно записать свои мысли о том, чему я научился в процессе её создания. Я разделю эти уроки на «мягкие» и «жёсткие»: под мягкими я подразумеваю идеи, связанные с разработкой ПО, жёсткие — это более технические аспекты программирования. Кроме того, я расскажу о том, почему хочу написать собственный движок.

Мягкие уроки


Сообщу ради контекста, что начал делать собственные игры примерно 5-6 лет назад и у меня есть 3 «серьёзных» проекта, над которыми я работал до выпуска первой игры. Два из эти проектов мертвы и полностью провалились, а последний я временно приостановил, чтобы поработать над BYTEPATH.

Вот gif-анимации из этих проектов



Первые два проекта провалились по разным причинам, но с точки зрения программирования они провалились (по крайней мере, как мне это видится) потому, что я слишком часто пытался быть слишком умным и заранее обобщал слишком многое. Большинство мягких уроков связано с этим провалом, поэтому важно было сказать об этом.
Читать дальше →

Linux для начинающего разработчика или как навсегда забыть о Windows

Время на прочтение7 мин
Охват и читатели105K

Дисклеймер


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

Пост предназначен в первую очередь для тех, кто занимается разработкой, но так же очень сильно поможет тем, кто пытался перейти на linux, но из-за каких бы то ни было непонятных вещей и трудностей плюнул и сказал: «Да ну нафиг этот линукс, еще возиться с ним буду».

В статье рассматривается установка Ubuntu 16.04 и настройка оной исключительно для работы.
Читать дальше →

Марвин Мински «The Emotion Machine»: Введение

Время на прочтение8 мин
Охват и читатели11K
image

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

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

Мы также способны на то, что не может ни одно другое живое существо: как только наш образ мышления терпит крах, мы начинаем думать над своими мыслями — такое рефлексивное мышление помогает найти ошибку в рассуждениях и помогает изобрести новые, более эффективные образы мышления. Однако мы все еще очень мало знаем о том, как наш мозг с этим справляется. Как работает воображение? Что такое сознание? Что такое эмоции, чувства, мысли? И в конце концов как мы думаем?

Сравните это с прогрессом в естественных науках. Что такое твердые тела, жидкости и газы? Что такое цвет, звук и температура? Что такое сила, давление и деформация? Какова природа энергии? Сегодня почти все подобные загадки объяснены несколькими простыми законами — уравнениями Ньютона, Максвелла, Эйнштейна и Шредингера.
Читать дальше →

Операционные системы с нуля; Уровень 0

Время на прочтение11 мин
Охват и читатели140K

Добрый день/вечер/ночь/утро! Есть один экспериментальный курс по операционным системам. Есть он в Стэнфордском университете. Но часть материалов доступно всем желающим. Помимо слайдов доступны полные описания практических занятий.


Чем этот курс отличается от прочих других? Большая часть кода пишется самостоятельно и выполняется на вполне реальном современном железе. В качестве целевой платформы выбран Raspberry Pi 3 model B. Т.е. достаточно актуальная архитектура AArch64. ARMv8 Cortex-A53, четыре ядра, 64-бита и вот это всё. В качестве основного языка программирования выбран Rust. Который безопасный, быстрый, без GC и так далее. Его, Rust, предполагается изучать во время курса.


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

Читать дальше →

Избранное: ссылки по reverse engineering

Время на прочтение10 мин
Охват и читатели81K


Всем привет!


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


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


Забавный факт: нам показывали, как некоторые компании рассылают наш список материалов от себя, но только в очень старой редакции. И вот после этой публикации они, наконец, смогут использовать его обновленную версию с чистой совестью ;)


Итак, перейдем к списку материалов!

Читать дальше →

Как наконец выпустить свою первую игру

Время на прочтение12 мин
Охват и читатели33K
image

Есть такая вероятность, что в этом году вы наконец-то решили сделать собственную игру. Отличная цель! И она определённо того стоит!

Вы уже наверно много раз слышали один и тот же совет от сотен других людей: делайте игру простой. В своей замечательной статье Эдмунд Макмиллен писал «если вы новичок, то начинайте с малого, а потом сделайте игру ещё меньше». В столь же хорошем посте ему вторит Томми Рефенес: «Просто сделайте свою игру так, как можете, начинайте с малого, а об остальном думайте потом».

На канале Extra credits есть хорошее видео о том, что же значит «маленькая игра».

Но «простой» — это не стандартная единица изменения. Если вы никогда до этого не делали игр, то откуда вам знать, насколько проста или легка игра? Означает ли «простая» MMO ВСЕГО с тремя играбельными классами? Лёгкая игра — это открытый мир всего с двумя типами биомов и тремя деревьями технологий?

Я понимаю вашу растерянность.

В целом я выпустил пять игр и перед началом разработки трёх из них я думал, что они будут «простыми». Во всех трёх случаях я ошибался. На завершение первой готовой игры мне понадобилось больше полутора лет. Это было не «просто».

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

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

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

Игры, в которых нужно писать код (часть 2)

Время на прочтение3 мин
Охват и читатели61K


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

Programmer Unknown's BattleGround: открытая площадка для сражений программистов

Время на прочтение2 мин
Охват и читатели19K
image

Изначально проект PUBG (просим прощения у оригинальной PUBG за использование их аббревиатуры, мы всего лишь хотим использовать эту игру для развития навыков программирования и не планируем публиковать ее в Steam в будущем) был разработан как внутренний проект нашей студии для развлечения. Затем же мы подумали, что он может быть полезен другим студиям, компаниям и образовательным учреждениям, и опубликовали его под лицензией MIT.
Читать дальше →

Пожалуй, самая необычная головоломка на Google Play

Время на прочтение7 мин
Охват и читатели68K
Это немного самонадеянно, но я решил озаглавить этот текст одним из отзывов о своей игре. На это есть две причины: первая — такая характеристика тешит мое самолюбие, признаюсь, чего уж скрывать. Вторая причина — мне бы хотелось, чтобы именно так воспринималась эта головоломка, а точнее целый набор, игроками.


Я недавно подсчитал, что уже 5 лет занимаюсь созданием игр в свободное от основной работы время. За этот период я сделал несколько игр, которые можно назвать успешными, если судить по количеству загрузок. Но по настоящему, я горжусь только последней, она изображена на картинке выше. Нет, это не игра про лутбоксы. Это набор головоломок, основная идея которого в том, чтобы объединить разноплановые головоломки одним сюжетом. Но главное, это должны быть головоломки с подвохом, такие, которые требуют от игрока нешаблонного, креативного мышления. Головоломки с простым, но при этом неожиданным решением. Под катом гифки, история создания и технические детали этой игры.
Читать дальше →

Платформы для экспериментов по обучению с подкреплением и не только

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

В этой статье приведен краткий обзор двенадцати подобных сервисов.
Читать дальше →

Как делать заметки как программист

Время на прочтение5 мин
Охват и читатели77K

Когда я был мал — писал ужасные конспекты: они представляли из себя тетради с грязным текстом и плохой структурой. Практически бесполезные.


Потом, когда я открыл для себя MOOC видео курсы, продолжил использовать те же антипаттерны, что и в школьные времена, но уже не так безобразно: с помощью VimWiki и позже — с Jupyter.


Записи всё еще были плохо структурированы. Посмотрите на это: у меня даже мотивации не хватает на то, чтобы просто открыть и посмотреть на то, что там внутри:


image


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


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

Читать дальше →

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

Время на прочтение29 мин
Охват и читатели77K
Визуалы – это люди, которые, воспринимают большую часть информации с помощью зрения. Визуалы составляют примерно 60% населения нашей планеты (автор статьи, Анна Виталь, также входит в их число). Вы можете спросить: как же нам удается общаться с вами с помощью изображений? Все достаточно просто – для этой цели мы используем хорошо известные визуальные символы и аналогии. Ниже представлены некоторые из таких зрительных аналогий, начиная с наиболее простых и заканчивая самыми сложными.

Читать дальше →

Просто о графах. Попытка популяризации

Время на прочтение19 мин
Охват и читатели42K
«Всякие звания (дворянина, купца, мещанина, крестьянина и пр., титулы — княжеские, графские и пр.) и наименование гражданских чинов (тайные, статские и проч. советники) уничтожаются...»
Об уничтожении сословий и гражданских чинов
Декрет ВЦИК и СОВНАРКОМа от 10.11.1917 года, ст. 2



image


Как-то же я обходился без этого раньше...


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

Вероятно, специфика “случайно распределенных графов” окажется маловостребованной в нашей с вами повседневности, но некоторое представление о теории графов может оказаться полезным в самых разнообразных ситуациях даже человеку не особенно к математике расположенному, – что же касается людей, занятых в такой области, как программирование, то изощренная изобретательность, как правило, сопутствует ежедневно выпадающим на их долю задачам, оттого представители этой профессии, в поисках новых идей и инструментов, случается, азартно загружают свой ум вещами, казалось бы не пригодными для полезного использования, однако, заказав пиццу за 10 тысяч биткоинов, они дарят хорошее настроение другим хорошим людям на многие годы, и таки оправдывают свою пассионарность.
Читать дальше →

Как читать математику

Время на прочтение16 мин
Охват и читатели66K
Математика — это «язык, который ни читать, ни понять невозможно без инициации» (Эдвард Ротштейн, «Эмблемы ума»)

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

Для математики существует особый протокол чтения. Как мы учимся читать литературу, так и математику мы должны научиться читать. Школьникам следует изучать протокол чтения для математики так же, как они учатся правилам чтения романа или стихотворения, учатся понимать музыку и живопись. Замечательная книга «Эмблемы ума» Эдварда Ротштейна выявляет взаимосвязь между математикой и музыкой, неявно затрагивая протоколы чтения для математики.
Читать дальше →

Как писать на ассемблере в 2018 году

Время на прочтение13 мин
Охват и читатели326K


Статья посвящена языку ассемблер с учетом актуальных реалий. Представлены преимущества и отличия от ЯВУ, произведено небольшое сравнение компиляторов, скрупулёзно собрано значительное количество лучшей тематической литературы.
Читать дальше →

Сегментация памяти (Схема памяти компьютера)

Время на прочтение19 мин
Охват и читатели68K
Представляю, Вам, перевод статьи одного из разработчиков PHP, в том числе версии 7 и выше, сертифицированного инженера ZendFramework. В данный момент работает в SensioLabs и большую часть занимается низкоуровневыми вещами, в том числе программированием в С под Unix. Оригинал статьи здесь.

Ошибка Сегментации: (Компьютерная верстка памяти)


Несколько слов, о чем эта запись в блоге


Я планирую в будущем писать технические статьи о PHP, связанные с глубоким пониманием памяти. Мне нужно, чтобы мои читатели имели такие знания, которые им помогут понять некоторые концепции дальнейшего объяснения. Для того, чтобы ответить на этот вопрос, нам придется перемотать время назад в 1960-е года. Я собираюсь объяснить вам, как работает компьютер, а точнее, как происходит доступ к памяти в современном компьютере, а затем вы поймете, из-за чего происходит это странное сообщение об ошибке — Segmentation Fault.

То, что вы будете читать здесь, краткое изложение основ дизайна компьютерной архитектуры. Я не буду заходить слишком далеко, если это не нужно, и буду использовать хорошо известные формулировки, так что, кто работает с компьютером каждый день может понять такие важные понятия о том, как работает ПК. Существует много книг о компьютерной архитектуре. Если вы хотите углубиться дальше в этой теме, я предлагаю вам достать некоторые из них и начать читать. Кроме того, откройте исходный код ядра ОС и изучите его, будь то ядро Linux, или любое другое.
Читать дальше →

Визуальное программирование на языке ДРАКОН

Время на прочтение15 мин
Охват и читатели69K

Визуальное и текстовое программирование


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


Исторически сложилось, что алгоритмы в программах записываются в виде исходных текстов. Почти никто не ставит под сомнение, что текст — это и есть лучшее средство представления алгоритмов. Алгоритм кодируется внутри функций на языке программирования, например, C или JavaScript. Для тех, кто хочет разобраться в алгоритме с высоты птичьего полёта, предусмотрен псевдокод. Однако с текстом есть серьезные проблемы. Дело в том, что человек не оптимизирован под сплошной текст. Человек оптимизирован на восприятие графики. Текст — это относительно новое изобретение, а вот графическую информацию организмы обрабатывают уже миллионы лет.


Исходя из этого, логично было бы составлять алгоритмы в графическом виде. Посмотрите на инженеров. Они повсеместно используют чертежи. Чем же программисты хуже? Они тоже могли бы составлять чертежи алгоритмов. Некоторые здесь возразят: визуальное программирование якобы неэффективно. UML неудобен, а в блок-схемах легко запутаться. Уж лучше программировать традиционным способом — текстом. В структурном программировании есть хотя бы структура, и она обеспечивает порядок и единообразие. А кроме того, рисовать диаграммы долго и трудно. Печатать быстрее, чем рисовать.


Так что же, программисты обречены всю жизнь работать только с текстом?
Возможно, не всё так плохо. Существуют визуальные языки для представления алгоритмов, в которых тоже есть порядок и структура, например ДРАКОН, BPMN и LML Action Diagrams. Здесь мы рассмотрим визуальный алгоритмический язык ДРАКОН.


Как программировать на языке ДРАКОН


ДРАКОН не является самостоятельным языком программирования. Он работает в паре с

Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность