Pull to refresh
35
0
Антон Гуща @NCrashed

User

Send message

Альтернатива callback-ам

Reading time5 min
Views13K
Давайте предположим, что нужно сделать рельсовое приложение, которое позволяет создавать ордер, в зависимости от входных данных ордера создавать один или несколько сервисов, резервировать какие-нибудь ресурсы под эти сервисы.

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

Абсолютное большинство программистов начнет делать такое приложение на колбэках или тригерах. Создан новый ордер — ставим ему состояние new — и вешаем колбэк который начинает создавать сервисы и т.д. Далее я постараюсь объяснить, почему это абсолютное зло.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments17

Семь итераций наивности или как я полтора года свою дебютную игру писал

Reading time32 min
Views78K
imagination С появлением у меня в первом классе Dendy вопрос кем я стану отпал сам собой буквально через пару недель — программистом конечно же. Я долго и упорно шел к этому, невзирая на отсутствие информатики в школе, работал в техподдержке известного всем регистратора параллельно с учебой в институте, но полноценная жизнь началась лишь в тот момент, когда меня наконец-то взяли хоть куда-то писать код.

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

Под катом лежат семеро очевиднейших (как мне сейчас кажется) граблей, неожиданно вставших у меня на пути, а потому способных с отличной от нуля вероятностью встать на пути любого, идущего дорогой разработки игр.
Семь не слишком оригинальных мишеней для лба, разбавленных повествованием
Total votes 100: ↑96 and ↓4+92
Comments137

Сравнение производительности языков на примере простейшего классификатора

Reading time10 min
Views33K
Доброго времени суток, хабр!


Моим основным ЯП является D. Всегда понимал, что он будет проигрывать C++ из-за сборщика, каких-то высокоуровневых плюшек и т.д. Но никогда не доходили руки проверить насколько. Решил написать простенький классификатор (даже не помню метод как называется) и проверить. Результат меня приятно удивил: версия C++ отработала за 5.47 сек, версия D — за 5.55 сек. «0.08 сек при обработке файла в 74Мб это не так уж и много» — подумал я. Но, на всякий случай, решил попробовать собрать код на D с помощью gdc (dmd как frontend, gnu backend) и тут уже в душу закрались сомнения, что я всё сделал правильно: код отработал за 4.01 сек, что более чем на 20% быстрее версии на С++. Решил собрать с помощью ldc2 (dmd frontend, llvm backend): 2.92(!!) сек. Тут я решил разобраться.
Читать дальше →
Total votes 27: ↑22 and ↓5+17
Comments34

Почему программировать так тяжело?

Reading time7 min
Views132K
Привет, Хабр!

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

К сожалению, нет такого момента, когда можно встать и заявить, что «я закончил обучение и теперь я программист!». Учиться придется всю жизнь, и всю жизнь вы будете встречать неведомые проблемы, сталкиваться с совершенно непонятными ситуациями и спрашивать «какого хрена?!» даже будучи профессиональным программистом с многолетним стажем.

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




Много лет назад я думал, что программировать легко, но прошли годы, и я понял, что это не так. Всё из-за неверного восприятия того, что я считал программированием и того, какую работу выполняет программист.

Вначале я думал, что программировать – это только указывать компьютеру, что делать, эта часть процесса относительно лёгкая. После двадцати с лишним лет опыта, я действительно пришёл к выводу, что эта часть программирования достаточно лёгкая.
Читать дальше →
Total votes 89: ↑73 and ↓16+57
Comments111

Учёным удалось преобразовать сигналы мозга в слова

Reading time2 min
Views14K
image

Учёные из Государственного центра адаптивных нейротехнологий (США) и подразделения Государственного Нью-йоркского университета в Албани провели эксперимент по преобразованию сигналов мозга в речь. Они назвали этот опыт «интерфейсом мозг-текст». Но до настоящего чтения мыслей пока ещё далеко — Стивену Хокингу придётся пока пользоваться текущим интерфейсом для ввода слов в компьютер. Повсеместное введение этой технологии наверняка столкнётся с затруднениями.

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

При эпилепсии в мозгу выявляется «судорожный очаг» — органическое или функциональное повреждение участка мозга, вызванное любым фактором: недостаточное кровообращение, родовые осложнения, травмы головы, соматические или инфекционные заболевания, опухоли и аномалии, нарушения обмена веществ, инсульт, токсическое воздействие различных веществ. На месте повреждения образуется рубец, а также периодически может возникать острый отёк и раздражение нервных клеток двигательной зоны, что уже ведёт к судорожным сокращениям скелетных мышц.
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments6

О приоритетах космической экспансии

Reading time9 min
Views27K


11 июня успешно завершилась кампания по сбору средств на создание проекта миссии пилотируемого облета Марса и Венеры. Я уже некоторое время хотел написать о том, куда и зачем лучше лететь, но, поскольку очень критически отношусь к облетным миссиям, откладывал публикацию, чтобы критикой ненароком не помешать в целом полезной идее. Ну а сейчас, присоединившись к поздравлениям и пожелав всяческих успехов команде разработчиков проекта, можно без помех поразмышлять, какой объект будет наиболее востребованным для пилотируемой космической экспансии?
Читать дальше →
Total votes 96: ↑94 and ↓2+92
Comments91

Контракты в D

Reading time5 min
Views8.2K
Доброго времени суток, хабр!

Сегодня я хочу рассказать Вам о контрактном программировании и его реализации в D. Это очень интересная концепция построения API. Смысл заключается в формальной спецификации работы функции или класса на уровне кода, а не комментария.

Пример подобной спецификации для функции:
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments3

«Большие батальоны» в непрерывном времени (симуляция сражений)

Reading time7 min
Views16K
«Бог всегда на стороне больших батальонов» — Жак д'Эстамп дела Ферте, французский маршал

Рис. 1

Во многих компьютерных играх необходимо симулировать сражения без отображения их хода на экране. Например, это может быть Rogue-like пошаговая игра, в которой компьютер должен посчитать только исход сражения (кто победил) и потери сторон. Даже в интерактивных играх сражения, которые происходят за пределами поля видимости игрока, можно моделировать упрощенно. Я разработал интересную математическую модель для такого моделирования и представляю ее читателям.

В статье рассматривается «непрерывный» подход — то есть силы сторон являются непрерывными величинами, а их взаимодействие происходит в непрерывном времени. Это позволяет воспользоваться методами мат. анализа и получить решение в явном виде. Для армий, состоящих из большого количества боевых единиц, такое упрощение не вносит большой погрешности. Вместе с тем, решение в явном виде позволяет понять многое о задаче.
Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments59

Олимпиада по программированию в LabVIEW. Решение команды-победительницы

Reading time8 min
Views16K
Компьютерные игры про танки являются одними из самых популярных в game-индустрии. История подобных игр насчитывает десятки лет, но популярность их не угасает. Тема танков и танковых сражений получает развитие не только в компьютерных играх, но и является предметом соревновательного процесса в программировании. Например, в 2012 году проходили соревнования по программированию Russian AI Cup — CodeTanks. Участникам предлагалось разработать искусственный интеллект управления танком. Спустя несколько лет подобное соревнование повторилось. Организатором выступила компания National Instruments, которая ежегодно проводит олимпиады по программированию в среде LabVIEW среди студентов и молодых ученых. Участникам олимпиады 2015 года предлагалось разработать алгоритм для автономного управления танком средствами LabVIEW (представление об этой среде программирования можете получить по ссылке: «LabVIEW — первое знакомство»). Данная статья посвящена описанию алгоритма танка-победителя от команды LabVIEWPortal.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments19

Генератор кода для Haskell

Reading time4 min
Views9.1K
Некоторое время назад я решил поэкспериментировать с микросервисами на Haskell. Архитектура проекта подразумевает создание большого количества микро-проектов, каждый из которых отвечает за один небольшой объем задач. Через какое-то время мне надоело создавать эти проекты вручную, а также писать шаблонный код для каждой сущности из БД. Для решения этой проблемы я разработал небольшую утилиту, позволяющую генерировать шаблонный код. Под катом — подробнее.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments5

C++ в современном мире

Reading time5 min
Views114K


Дискуссии о текущем положении C++ в мире программирования, как правило, делят участников на два фронта: одни этот язык недолюбливают, пророча ему скорую гибель; другие же наоборот утверждают, что на C++ писали, пишут и будут писать. Я бы сказал, что истина находится где-то посередине, но это означало бы, что C++ находится в неком «подвешенном» состоянии, в котором он был, например, между выходами стандартов C++03 и C++11. На самом деле всё обстоит немного иначе. Как? Давайте попробуем в этом разобраться.
Читать дальше →
Total votes 62: ↑50 and ↓12+38
Comments70

Fungi hunting – подозрительное хобби

Reading time4 min
Views26K
Скажи англичанам, что любишь собирать грибы, и тебя не поймут. Зачем рисковать, когда в магазинах есть простые-понятные шампиньоны & трюфели? Дикие грибы и выглядят, и пахнут подозрительно, а тот, кто их ест и ходит живой, – либо невероятный везунчик, либо тот-кто-знает-все-секреты – что тоже, в общем-то, подозрительно.

Понять осторожных британцев поможет грибной фольклор и тест на выживаемость в английских лесах. Поехали!
Читать дальше →
Total votes 60: ↑46 and ↓14+32
Comments83

Проблемы слабых экосистем игровой индустрии

Reading time9 min
Views10K
«Экосистема игровой индустрии» — забавное словосочетание, которое я слышу вот уже несколько лет. Я слышал его в различных ситуациях и контекстах, но все-таки чаще всего это словосочетание употребляется так: «Наша экосистема пока что слабая, но мы ее улучшаем». Мне даже кажется, что несколько раз я сам бросал такую фразу журналистам. Кстати, я живу в Турции. Это полуевропейская, полувосточная страна, но я считаю, что у нас довольно много общего с другими странами мира. Я хочу проанализировать последствия так называемых «слабых экосистем» для разных участников игровой индустрии, а также проблемы, имеющие отношение к таким средам. Я также попробую озвучить свои идеи на предмет преодоления таких проблем.


Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments0

Оценка количества ошибок в программе. Модель Миллса

Reading time3 min
Views17K
Сколько ошибок в программе? Это вопрос, который волнует каждого программиста. Особую актуальность придает ему принцип кучкования ошибок, согласно которому нахождение в некотором модуле ошибки увеличивает вероятность того, что в этом модуле есть и другие ошибки. Точного ответа на вопрос о количестве ошибок в программе очень часто дать невозможно, а вот построить некоторую оценку — можно. Для этого существуют несколько статических моделей. Рассмотрим одну из них: Модель Миллса.

Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments18

Метапрограммирование: какое оно есть и каким должно быть

Reading time11 min
Views37K

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

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

Метапрограммирование реализовано в той или иной мере в очень разных языках; если не рассматривать экзотические и близкие к ним языки, то самым известным примером метапрограммирования является С++ с его системой шаблонов. Из «новых» языков можно рассмотреть D и Nim. Одна из самых удачных попыток реализации метапрограммирования — язык Nemerle. Собственно, на примере этой четверки мы и рассмотрим сабж.

Метапрограммирование — интереснейшая тема; в этой статье я попытаюсь разобраться, что же это такое, и каким оно должно быть в идеальном случае.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments26

DLang плагин для IntelliJ IDEA (Alpha, EAP, POC)

Reading time3 min
Views6.7K
Добрый день. Есть ли среди вас знатоки языка программирования D? Первое знакомство с этим языком часто наталкивается на проблему поиска подходящей IDE. С этой проблемой столкнулся и Я. И, как типичный тыжпрограммист, взялся написать плагин для поддержки языка D на платформе IntelliJ IDEA 14.

Disclaimer 1: Это версия 0.0.8, пока реализован минимум функциональности, наверняка будут баги, наверняка вам покажется, что плагин ничего не умеет. Я осознаю, что предстоит огромная работа по доведению плагина до состояния «можно пользоваться».

Disclaimer 2: Если всё же решитесь заглянуть в исходный код, хочу предупредить, что этой мой первый опыт программирования для IntelliJ IDEA. Критика приветствуется. Равно как и Pull реквесты.

DLang plugin 0.0.8




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

LFS: Темная сторона силы. Часть 2

Reading time13 min
Views19K

Предисловие


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

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

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

$ su - lfs
$ wget http://roy.marples.name/downloads/dhcpcd/dhcpcd-6.7.1.tar.bz2 --directory-prefix=$LFS/sources
$ wget http://www.linuxfromscratch.org/blfs/downloads/7.7/blfs-bootscripts-20150304.tar.bz2 --directory-prefix=$LFS/sources
$ logout


Дело в том, что стандартная документация, касающаяся сборки базовой системы не описывает процесс настройки сети в случае, когда вы будете получать ip-адрес от DNS провайдера, или в случае, если динамический ip выдает вам ваш домашний роутер. Или в том случае, если Вы выполняете сборку под ВМ, имеющей доступ к сети через NAT.

Поэтому после того как мы соберем всё и вся, мы дополнительно установим и настроим DHCP-клиент, который позволит свеженькой системе получить ip сразу после перезагрузки и иметь таки доступ в сеть. Этот шаг относится уже к книге BLFS.
Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments4

[UPD] Журнал Новости космонавтики может закрыться

Reading time4 min
Views14K
Российский журнал, посвященный исключительно космонавтике, может закрыться в ближайшее время.

Периодический журнал «Новости космонавтики» о событиях в отечественной и зарубежной космонавтике издаётся в Москве с августа 1991 года. По мнению ряда российских и зарубежных экспертов, «Новости космонавтики» являются «лучшим в мире космическим журналом» (Wikipedia)
image
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments31

Systemd за пять минут

Reading time4 min
Views653K
Наша компания занимается администрированием веб-серверов на базе CentOS. Довольно часто наши клиенты используют веб-приложения на базе python, ruby или java. Для автозапуска подобных приложений есть готовые шаблоны для написания стартап-скриптов. Но прогресс не стоит на месте, вышел уже второй релиз CentOS 7 и, следуя старой традиции «не ставить dot-zero релизы на продакшен», мы начинаем предлагать клиентам сервера на базе CentOS 7.1 (1503).

В CentOS7, так же как и в его родителе RHEL7, используется systemd — менеджер системы и служб для Linux, совместимый со скриптами инициализации SysV и LSB. systemd обеспечивает возможности агрессивной параллелизации и много всего прочего.

image

Огромный монстр с множеством возможностей, гибкими настройками и мегабайтами документации…

Но что делать, если стоит задача быстро-быстро, вот прямо вчера, сделать автозапуск некоего сервиса?
Давайте выжмем из документации минимально необходимый набор информации для создания простых старт-стоп скриптов.
Знакомство с systemd
Total votes 70: ↑66 and ↓4+62
Comments58

В Италии зарегистрировали фирму с уставным капиталом в биткоинах

Reading time2 min
Views4.3K
image

В марте в Италии произошло знаковое событие из мира криптовалют. О нём стало известно на прошлой неделе. Впервые в стране валюта биткоин была использована в качестве уставного капитала для регистрирующейся организации. Компания с ограниченной ответственностью (по-итальянски SRL, а по-нашему нечто вроде ООО) Oraclize в качестве уставного капитала при регистрации указала 45 BTC и была успешно зарегистрирована нотариусом.

По итальянским правилам, для регистрации компании типа SRL необходим уставной капитал в размере не менее €10,000. При этом в качестве капитала могут учитываться не только обычные деньги, но и любые активы, имеющие ценность с экономической точки зрения. Стефано Капаччиоли, энтузиаст биткоин и основатель компании AssoB.it, пропагандирующей использование криптовалют, был привлечён к процессу регистрации в качестве специалиста. Он подтверждал наличие у регистрирующих компанию лиц заявленной суммы в криптовалюте.
Читать дальше →
Total votes 15: ↑12 and ↓3+9
Comments3

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity