Как стать автором
Обновить
0
0

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

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

Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать

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

(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)

Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.

Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?

На ум сразу пришел бомж-программист, но после успеха с его приложением он предпочёл остаться «дзен-монахом». Есть ли еще примеры? Вдохновляющий пример, что научиться кодить может каждый — слепой программист. Когда я прочитал статью на Хабре «Смотря на код с закрытыми глазами», то понял, что нет преград, кроме собственных отмазок.

А у меня для вас есть три истории из моей жизни. Просто три истории.

История первая — ламер


Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.
Читать дальше →
Всего голосов 36: ↑29 и ↓7+22
Комментарии62

Анализ исходного кода Duke Nukem 3D: Часть 2

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

[Перевод первой части находится здесь.]

Унаследованный код


Build — это выдающийся движок, а множество игр, использовавших его, принесли большую и заслуженную славу и Кену Силверману, и 3D Realms.

Кен Силверман выполнил условия договора: он предоставил двоичный файл потрясающего 3D-движка с хорошо задокументированными методами и форматами ресурсов. В качестве признания его заслуг 3D Realms указала его имя в титрах как «Ken 'I can do that' Silverman» (Кен «Я могу это сделать» Силверман). Но разработка Build была сосредоточена на возможностях и скорости, а не удобстве портирования и чтения. После изучения кода я думаю, что open source-разработчики избегали его по следующим причинам:

  • Его обескураживающе сложно читать и получать из него знания.
  • Он не был портируемым.

В этой статье я перечислил часть сложностей, с которыми столкнулся. Также я выпустил порт Chocolate Duke Nukem 3D, призванный решить эти проблемы. Я хотел, чтобы люди запомнили, какой уровень гениальности нужен был для создания 3D-движка в то время. Кроме того, я хотел, чтобы они осознали, как движимый страстью подросток смог внести вклад в одну из величайших игр всех времён.
Читать дальше →
Всего голосов 57: ↑53 и ↓4+49
Комментарии7

Анализ исходного кода Duke Nukem 3D: Часть 1

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

Уйдя с работы в Amazon, я провёл много времени за чтением отличного исходного кода.

Разобравшись с невероятно замечательным кодом idSoftware, я принялся за одну из лучших игр всех времён: Duke Nukem 3D и за её движок под названием "Build".

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

Как обычно, я переработал свои заметки в статью. Надеюсь, она вдохновит вас на чтение исходного кода и совершенствование своих навыков.
Всего голосов 101: ↑98 и ↓3+95
Комментарии31

Инструментарий фондового рынка: Торговый терминал

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

image
Терминал Bloomberg

Многие брокеры предоставляют клиентам возможность осуществлять торговые операции и посредством веб-интерфейсов, однако в современных реалиях, когда многие трейдеры придерживаются внутридневного стиля торговли, и для них важна каждая секунда торгов – веб-интерфейс значительно уступает специализированному торговому терминалу, как в общем удобстве работы, так и в скорости отрисовки графиков или обновления биржевых данных.
Читать дальше →
Всего голосов 53: ↑38 и ↓15+23
Комментарии33

Исследование вирусного видео. Как создавать? Как продвигать?

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


Предлагаю читателям «Хабрахабра» транскрипт выступления на международном фестивале рекламы «Каннские львы» Джона Ратклиффа, основателя Mozayic, Mofilm (ранее Google и YouTube) и доктора Карен Нельсон-Филд, директора департамента стратегического развития в University of South Australia Business School (перевод с английского).

До недавнего времени YouTube был единственным игроком на рынке онлайн-видео, но за последние несколько лет такие компании, как Verizon, Disney, Amazon, Twitter and Facebook запустили собственные невероятно сильные платформы для онлайн-видео. Мы бы хотели разобраться, почему это произошло?
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии4

Как я писал бота для аукциона AliExpress

Время на прочтение4 мин
Количество просмотров111K
imageЗнаете, на aliexpress есть такие аукционы — Gaga Deals, сейчас там помойка, но когда-то были очень интересные предложения. Их идея заключалась в том, что:

  • Продажи стартуют каждый час
  • Число товаров ограничено
  • Кто первый встал того и тапки


Были очень вкусные лоты со скидкой 90%, топовые смартфоны этого года за 200-300 долларов, прошлогодние по 100 долларов. Разыгрывалось всего по 5 штук каждой позиции. Попробовал выиграть вручную, разумеется ничего не получилось. Ну и решил я написать бота…
Читать дальше →
Всего голосов 82: ↑73 и ↓9+64
Комментарии30

Алгоритм Левенберга — Марквардта для нелинейного метода наименьших квадратов и его реализация на Python

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



Нахождение экстремума(минимума или максимума) целевой функции является важной задачей в математике и её приложениях(в частности, в машинном обучении есть задача curve-fitting). Наверняка каждый слышал о методе наискорейшего спуска (МНС) и методе Ньютона (МН). К сожалению, эти методы имеют ряд существенных недостатков, в частности — метод наискорейшего спуска может очень долго сходиться в конце оптимизации, а метод Ньютона требует вычисления вторых производных, для чего требуется очень много вычислений.



Для устранения недостатков, как это часто бывает, нужно глубже погрузиться в предметную область и добавить ограничения на входные данные. В частности: МНС и МН имеют дело с произвольными функциями. В статистике и машинном обучении часто приходится иметь дело с методом наименьших квадратов (МНК). Этот метод минимизирует сумму квадрата ошибок, т.е. целевая функция представляется в виде



\frac{1}{2}\sum \limits_{i=1}^{N}(y_i'-y_i)^2 = \frac{1}{2}\sum \limits_{i=1}^{N}r_i^2 \tag{1}


Алгоритм Левенберга — Марквардта является нелинейным методом наименьших квадратов. Статья содержит:


  • объяснение алгоритма
  • объяснение методов: наискорейшего спуска, Ньтона, Гаусса-Ньютона
  • приведена реализация на Python с исходниками на github
  • сравнение методов

Читать дальше →
Всего голосов 80: ↑78 и ↓2+76
Комментарии28

Массивы в РНР 7: хэш-таблицы

Время на прочтение22 мин
Количество просмотров36K
Хэш-таблицы используются везде, в каждой серьёзной С-программе. По сути, они позволяют программисту хранить значения в «массиве», индексируя его с помощью строк, в то время как в языке С допускаются только целочисленные ключи массива. В хэш-таблице строчные ключи сначала хэшируются, а затем уменьшаются до размеров таблицы. Здесь могут возникать коллизии, поэтому нужен алгоритм их разрешения. Существует несколько подобных алгоритмов, и в РНР используется стратегия связных списков (linked list).

В Сети есть немало замечательных статей, подробно освещающих устройство хэш-таблиц и их реализации. Начать можно с http://preshing.com/. Но имейте в виду, вариантов структуры хэш-таблиц — несметное множество, и ни один из них не совершенен, в каждом есть компромиссы, несмотря на оптимизацию циклов процессора, использования памяти или хорошее масштабирование потокового окружения (threaded environment). Одни варианты лучше при добавлении данных, другие — при поиске и т. д. Выбирайте реализацию в зависимости от того, что для вас важнее.

Хэш-таблицы в РНР 5 подробно рассмотрены в материале phpinternalsbook, который я написал вместе с Nikic, автором хорошей статьи про хэш-таблицы в РНР 7. Возможно, её вы тоже сочтёте интересной. Правда, она писалась до релиза, поэтому некоторые вещи в ней слегка отличаются.

Здесь же мы подробно рассмотрим, как устроены хэш-таблицы в РНР 7, как с ними можно работать с точки зрения языка С и как ими управлять средствами РНР (используя структуры, называемые массивами). Исходный код в основном доступен в zend_hash.c. Не забывайте, что хэш-таблицы мы используем везде (обычно в роли словарей), следовательно, нужно проектировать их так, чтобы они быстро обрабатывались процессором и потребляли мало памяти. Эти структуры решающе влияют на общую производительность РНР, поскольку местные массивы не единственное место, где используются хэш-таблицы.
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии14

Как подружить Tensorflow и C++

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

Google TensorFlow — набирающая популярность библиотека машинного обучения с акцентом на нейросетях. У нее есть одна замечательная особенность, она умеет работать не только в программах на Python, а также и в программах на C++. Однако, как оказалось, в случае С++ нужно немного повозиться, чтобы правильно приготовить это блюдо. Конечно, основная часть разработчиков и исследователей, которые используют TensorFlow работают в Python. Однако, иногда бывает необходимо отказаться от этой схемы. Например вы натренировали вашу модель и хотите ее использовать в мобильном приложении или роботе. А может вы хотите интегрировать TensorFlow в существующий проект на С++. Если вам интересно как это сделать, добро пожаловать под кат.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии17

Цикл уроков по SDL 2.0: урок 1

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

От переводчика: вдохновившись циклом статей, я решил попробовать свои силы в SDL. Да вот незадача, каких-либо толковых уроков по SDL версии 2.0 на русском языке найти мне не удалось. Это и подтолкнуло меня к переводу замечательной серии туториалов Twinklebear, в оригинале доступных тут.

Добро пожаловать!

Цель данных уроков — познакомить вас с основами SDL 2.0 и гейм-дева на С++. Подразумевается, что у читателя есть некоторый опыт программирования на С++ и минимальные знания массивов, векторов, управляющих структур, функций и указателей.

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

Если вы хотите увидеть полный исходник или же скачать ресурсы для уроков, то все это можно получить на GitHub’е. Но не копируйте!

Также документация по SDL 2.0 доступна для чтения в этой вики.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии21

Расшифровка базы данных KeePass: пошаговое руководство

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

image


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


На данный момент существует 2 версии KeePass:


  • KeePass 1.x (генерирует файлы .kdb);
  • KeePass 2.x (генерирует файлы .kdbx).

Структура файла с базой данных KeePass (.kdb, .kdbx) состоит из 3 частей:


  • Подпись (не зашифрована);
  • Заголовок (не зашифрован);
  • Данные (зашифрованы).

Далее я подробно расскажу о том, как дешифровать базу данных KeePass 1.x и KeePass 2.x.

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

Что такое шаблоны проектирования?

Время на прочтение11 мин
Количество просмотров80K
Вы когда-либо задавались вопросом, что такое шаблоны проектирования? В этой статье будет разъяснено, почему шаблоны проектирования имеют существенное значение, и будет приведено несколько примеров на PHP, поясняющих, когда и где их следует использовать.

Шаблоны проектирования — это допускающие многократное использование оптимизированные решения проблем программирования, с которыми мы сталкиваемся каждый день. Шаблон проектирования — это не класс или библиотека, которые мы можем просто вставить в нашу систему. Он — много больше. Это — некоторый шаблон, который должен быть реализован в надлежащей ситуации. Он не зависит от языка. Хороший шаблон проектирования должен быть таким, чтобы его можно было использовать с большинством языков (если не со всеми) в зависимости от характеристик языка. Чрезвычайно важно то, что любой шаблон проектирования необходимо использовать очень осторожно — если он применён в ненадлежащем месте, то его действие может быть разрушительным и породить много проблем для вас. Однако применённый в нужном месте в нужное время он может стать вашим спасителем.
Читать дальше →
Всего голосов 35: ↑22 и ↓13+9
Комментарии75

Приведение типов

Время на прочтение4 мин
Количество просмотров207K
Будучи на конференции Qt Developer Days 2010 я узнал, что одним из самых популярных вопросов на собеседовании в разные зарубежные компании, работающие с Qt библиотекой, является вопрос о различиях в способах приведения типов в C++. Поэтому здесь я рассмотрю основные различия между static_cast, dynamic_cast, const_cast, reinterpret_cast, C-style cast, qobject_cast и qvariant_cast

Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии59

Побеждаем утечки памяти и ускоряем работу Firefox

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

Кроме решения проблемы утечки памяти, многие советы позволят ускорить работу браузера, так что пост будет интересен всем, кто использует Firefox. Практически каждый пункт подходит и для почтового клиента Thunderbird.

А если вам просто понравилась девушка с картинки, то здесь хайрез :)

Читать дальше →
Всего голосов 132: ↑96 и ↓36+60
Комментарии111

Не так-то просто обнулять массивы в VC++ 2015

Время на прочтение5 мин
Количество просмотров20K
В чем разница между двумя этими определениями инициализированных локальных переменных С/С++?

char buffer[32] = { 0 };
char buffer[32] = {};

Одно отличие состоит в том, что первое допустимо в языках С и С++, а второе — только в С++.

Что ж, давайте тогда сосредоточимся на С++. Что означают эти два определения?

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

Эти определения несколько различаются, но по факту результат один — весь массив должен быть инициализирован нулями. Поэтому согласно правилу «as-if» в С++ они одинаковы. То есть любой достаточно современный оптимизатор должен генерировать идентичный код для каждого из этих фрагментов. Верно?
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии30

oDesk (Upwork). Мой опыт за полтора года

Время на прочтение12 мин
Количество просмотров445K
Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
image
Читать дальше →
Всего голосов 192: ↑185 и ↓7+178
Комментарии321

Можно ли стать программистом после 30-ти?

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


Тема, вынесенная в заголовок, недавно обсуждалась в одном белорусском IT-онлайн-издании. Правда, там стоял вопрос, можно ли стать программистом после 40-ка. Автор статьи, состоящей из нескольких частей, начал было описывать свой путь из журналистов в программисты, затем свел все к урокам PHP «для самых маленьких» и далеко отступил от темы. Но в материалах прослеживалась мысль, что бросить журналистику и заняться программированием ему так и не удалось. Из этого следует, что после 40 лет стать программистом если и возможно, то весьма непросто. Попробуем снизить возрастную планку на 5 – 10 лет.

Мне близка эта тема, поскольку я сам зарабатываю на хлеб журналистским трудом и тоже мечтаю стать профессиональным программистом. Невзирая на возраст. А в свете последних тенденций в IT (дефицита кадров) все громче звучат идеи о переучивании в программистов специалистов из других отраслей. Так что, не побоюсь сказать, что тема эта имеет государственную важность. Желающих вместе со мной разобраться с этим вопросом прошу под кат.
Читать дальше →
Всего голосов 87: ↑70 и ↓17+53
Комментарии180

Работа с радиомодулями SI4432

Время на прочтение12 мин
Количество просмотров78K
В статье рассмотрены функциональные особенности работы радиомодуля на микросхеме ISM (industrial, scientific and medical radio bands) трансивера SI4432. Также приведены простейшие примеры программной инициализации модуля и описаны некоторые возможные вариации настройки.


Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии22

Методы сбора требований или «Как понять, что хочет заказчик?»

Время на прочтение7 мин
Количество просмотров165K
Данная статья будет полезна как аналитикам, так и менеджерам, занимающимся сбором и анализом требований. В ней описаны основные методики сбора требований, а также их плюсы и минусы. Возможно, что-то вы уже применяли на практике, а о чем-то, возможно, не знали. В общем, эта статья для всех тех, кто уже занимается бизнес — анализом или только планирует пополнить ряды аналитиков.
image
Читать дальше →
Всего голосов 11: ↑8 и ↓3+5
Комментарии1

Как на самом деле устроена торговля на бирже, и как ее можно улучшить: Простой алгоритм (часть 4)

Время на прочтение3 мин
Количество просмотров12K
Продолжаем серию статей бывшего HFT-трейдера Марко Стуккио, в которых он на пальцах объясняет, как устроена высокочастотная торговля на бирже (первая часть, вторая часть, третья часть). Пришло время обелить HFT от обвинений в ответственности за краткосрочные сбои в работе финансовых рынков.



В 2012 году много писали о провале трейдерской компании с Уолл-Стрит Knight Capital (KCG). Фирма начала практиковаться в высокочастотной торговле и потерпела сокрушительную неудачу, потеряв $440 млн. и пошатнув веру инвесторов в HFT. Более подробно об этом можно почитать здесь, здесь и здесь. Журналистам обычно некогда вникать в технические детали подобных историй. Но, как утверждает автор блога о HFT, причин для паники не было. Трейдерские системы надежны, если выстроены с умом.
Читать дальше →
Всего голосов 19: ↑15 и ↓4+11
Комментарии4

Информация

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