Search
Write a publication
Pull to refresh
27
0
Maksim @MuLLtiQ

Software engineer

Send message

Как бросить кости без OpenGL

Reading time3 min
Views24K
image

Необязательное вступление
Разработчики приложений под iOS зарабатывают не на собственных творениях, а на сторонних заказах. Создав себе имя славного парня, который творит чудеса с iPad-ом, рано или поздно Вы будете получать предложения от знакомых своих знакомых.
-Алло! Напиши что-нибудь под iOS.


Позвольте несколько советов.
Если, по Вашему мнению, работы более чем на две недели, отказывайтесь.
Если на неделю — соглашайтесь за $5000.
Если на 2 дня — за $1000.

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


Один хороший человек захотел сделать электронную книгу под iOS, коллекцию афоризмов. Фразы вылетают случайно, данные предоставлены в формате комма сепарейтед валью. С флешкой и устным ТЗ он пришел к другу-программисту. Программист оценил примерный объем работы
  • Конвертируем данные в sqlite;
  • Заводим три UIView (левый, правый и центральный);
  • В каждый UIView добавляем UITextView и UILabel;
  • Обрабатываем нажатие touchesBegin для листания афоризмов вправо-влево;
  • Добавляем кнопку — показать случайный афоризм.
  • Добавляем закладки.
  • Получаем 1000 долларов США


Работы на 2 дня, программист согласился.
Однако в ТЗ было еще одно условие — при случайном выборе афоризма по экрану должен кататься игральный кубик. Самый обыкновенный, из шести граней.
Читать дальше →

Для новичков про stdafx.h

Reading time11 min
Views338K
StdAfx.h, Precompiled headers
Статья рассчитана на людей, которые знакомятся со средой Visual Studio и пытаются компилировать в ней свои Си++-проекты. В незнакомой среде всё кажется странным и непонятным. Особенно новичков раздражает файл stdafx.h, из-за которого возникают странные ошибки во время компиляции. Очень часто всё заканчивается тем, что новичок долгое время везде старательно отключает Precompiled Headers. Чтобы помочь людям разобраться что к чему, и была написана эта статья.
Читать дальше →

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

Reading time13 min
Views213K
Это история одного из самых запомнившихся случаев в моей инженерной практике. По понятным причинам я поменял имена, места и некоторые узнаваемые детали, чтобы нельзя было точно определить заказчика и других участников истории.


Вот так выглядит ленточное хранилище (наше было поменьше) и библиотечный робот (наш такой же). Китаец в комплект не входит.

Часть 1. Коробка


Помню, стояли последние дни ноября. Уже думая об окончании рабочего дня, я планировал свой вечер, когда вдруг мне сообщили, что в славном сибирском городе N у нашего заказчика сломалась ленточная библиотека. Запчасть сразу же отправили транспортной компанией, но вот уже 3 дня, как она все еще была в пути. Транспортная компания невнятно объяснялась и хмыкала в телефон, а заказчик стал не в шутку нервничать. Прогнозы были неопределенные, поэтому было принято решение везти еще одну запчасть своими силами на самолете. Сотрудник склада вручил мне габаритную коробку весом килограмм десять, обклеенную штрих-кодами и стикерами, и радостно хлопнул меня по плечу со словами: «Только не вздумай в багаж сдавать — помнут».

Коробка меня, безусловно, беспокоила, но не меньшее беспокойство мне внушал пакет с сухим молоком, который в последний момент мне вручил менеджер проекта. «У них там какие-то траблы с молочкой сейчас… из-за непогоды что ли… ребята местные просили 2 кг им привезти. Тебе ж не сложно?» — сказал он. По выражению его лица и характерному жесту ладони, как бы прикрывавшей мне рот, было ясно, как он сейчас хотел, чтобы я оказался сговорчивым или даже немым.
Читать дальше →

Мини-интерпретатор Lisp'a на Python

Reading time4 min
Views19K
Читая главу «Двоичные деревья» из книги Джона Монгана Programming Interviews Exposed я задумался о том, как чаще всего рекурсию объясняют начинающим программистам: через сортировку, обход двоичного дерева, построение последовательности Фибоначчи и т.д. Неужели нельзя найти пример поинтереснее? Из закоулков сознания вырвался Лисп, который по своей природе неотделим от понятия рекурсии. Более того, небольшой интерпретатор Лиспа — отличный пример для исследования рекурсии.

Каким же будет минимальный интерпретатор Лиспа, написанный на Питоне? К моему удивлению, решение уложилось в семь строк! Свою роль в этом сыграла как выразительность Питона, так и красота и незамысловатость Лиспа.
Читать дальше →

Кто бы смог мне подсказать, как require подключать

Reading time7 min
Views70K
Одним солнечным весенним утром, мне пришла в голову замечательная идея — заняться изучением популярной библиотеки RequireJS. Я уже давно читал много хорошего и о простоте использования и о преимуществах, которые она оказывает при использовании в проектах. Поэтому и подумать не мог, что подключение RequireJS к модульному проекту на Backbone может вызвать столько проблем. Я потратил два дня на то, что должно занять не более часа. А если у разработчика нет этих двух дней? Вот и решил поделиться с другими своим опытом, чтобы сэкономить время и нервы.
Читать дальше →

Безопасность магазина в рознице: основные атаки

Reading time7 min
Views113K


Вынос товара


Тащат всё, даже ненужное. Кажется, из спортивного интереса, по привычке или просто потому, что получилось. Но есть и настоящие профи. В простом случае товар банально кладётся в карман, в более сложных — избавляется от меток для противокражных ворот либо экранируется специальной сумкой с аналогом решетки Фарадея в стенках (от этого страдают магазины одежды). Крутые дорогие противокражные ворота умеют отличать редкоземельные магниты и сумки с экранирующими камерами на входе — поэтому новым витком стали аналоги средств РЭБ, в частности, разные китайские глушилки. Но куда чаще несут в кармане, рукаве, штанах, за голенищем или в коробке другого товара.

DDoS-атака на магазин с воровством


Представьте, в магазин внезапно заходит человек 15. Например, цыганский табор. Уследить за товаром просто физически невозможно. Мера — сначала напоказ нажимается тревожная кнопка (ещё на момент входа). Иногда такую атаку пытаются предпринять школьники, заваливаясь целым классом, но их-то найти по школам довольно просто (лица есть на видеонаблюдении).
Читать дальше →

Autotiling: автоматические переходы тайлов

Reading time6 min
Views18K
Буквально только что наткнулся на статью из песочницы о grid-tiling'е и решил написать свой аналог.
Мой метод распределения переходов несколько отличается от упомянутой в той статье.
Начало данной системы положено в небезызвестной игре WarCraft III.

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

Ну и где сборка для Linux?

Reading time2 min
Views41K

Что же вы раньше не спросили, вот она: Opera для Linux.
Да, всё верно — сегодня мы выпускаем первую сборку новой Opera для Linux на канале Developer.

Для того, чтобы сделать первую версию стабильнее и запустить её как можно скорее, мы специально сосредоточились на одной платформе — это 64-битная Ubuntu Linux с оболочками Unity или Gnome Shell. Поэтому сборка, которую мы показываем сегодня, работает только в этом окружении. По мере стабилизации разработки, мы рассмотрим поддержку и других платформ.

Как вы понимаете, это канал Developer, поэтому от этой сборки стоит ожидать соответствующего уровня стабильности. Несмотря на это, многие из нас используют эту сборку уже давно как основной браузер и она кажется вполне стабильной. Так что смелее — пробуйте и пишите нам, если что-то сломалось.
Читать дальше →

Крик опыта неудач

Reading time3 min
Views130K
Я написал такой пост, которые обычно сам не читаю. Нет времени. В голове много идей, и не знаю какую реализовать в первую очередь. Некогда читать не техническую информацию.

Это не success-story, а какой-то «way of the failures» человека, который хочет создать что-то свое, что-то классное и полезное для многих, быть честным, свободным и работать на самого себя. Если это про вас, то прошу вас, прочитайте этот пост и не наступайте на мои грабли. Уделите 10 минут. Я постараюсь говорить коротко и по существу.
Читать дальше →

Разработчик потратил 13 лет, чтобы закончить игру

Reading time2 min
Views137K
13 лет назад английский подросток Адам Батчер (Adam Butcher) пришёл домой с премьеры «Властелина колец» и твёрдо решил, что должен сделать игру, в которой реализует всё то, чего не хватает во всех остальных глупых играх. Там должны быть приключения и головоломки, настоящий сюжет и борьба со злом.

Парню было 14 лет, он как раз освоил популярную программу Multimedia Fusion — и в тот же день взялся за дело, нарисовал главного персонажа Тобиаса и объект № 1 — меч.


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

Doom 2014

Reading time2 min
Views36K
"… хочу бесконечные патроны и в ад" из бородатого анекдота
«Сюжет в игре — как сюжет в порнофильме. Он должен быть, но он не так важен» Джон Кармак

«Мы были на пороге удивительного открытия — супертехнологии… с бесконечными возможностями. Но вместо этого пришли они. Так дивный новый мир обернулся настоящим адом»

10 июня на официальном канале выложили видео о новом DOOM
Подробная информация появится на QuakeCon 2014 17 июля

Хронология событий:
— 3 августа 2007 года на QuakeCon 2007 Джон Кармак неофициально говорил о планах сделать Doom 4
— Официально игра Doom 4 была анонсирована 7 мая 2008 года.
— Джон Кармак пообещал, что Doom 4 на движке id Tech 5 будет выглядеть «в три раза» лучше Rage. «Мультиплеер в Doom 4 не будет таким же хорошим, как в Quake Live. Однако многопользовательская составляющая этой игры все равно будет на высоте, превосходя Doom 3 или Quake 4»
-15 января 2009 года опубликована новость о том, что британский писатель Грэм Джойс (англ. Graham Joyce) разрабатывает сценарий для Doom 4.
— 9 февраля 2009 года Брэд Хокинс (англ. Brad Hawkins), американский актёр кинофильмов и телевидения, сообщил, что принимает участие в создании «Doom 4», работая актёром по захвату движений
— В середине января 2010 года на официальном сайте id Software была открыта страница со списком вакансий для работы над новым проектом, при этом на странице был размещён логотип Doom
— На QuakeCon 2011 в интервью журналистам Кармак сообщил о возникших проблемах с Doom 4, связанных с размером игры.
— 21 октября 2011 года сайт Kotaku опубликовал материал, в котором сообщил о том, что разработка Doom 4 остановлена на неопределённое время (заморожена)
— В этот же день, через некоторое время после сообщения от Kotaku, вице-президент Bethesda по PR и маркетингу Пит Хайнс (англ. Pete Hines) в своём профиле в Твиттере сообщил, что никакая из игр от id Software в разработке, в том числе Doom 4, не была заморожена
— На мероприятии QuakeCon 2012 во время пресс-конференции Джон Кармак сообщил, что бо́льшая часть команды id Software в данный момент работает над Doom 4
— 9 февраля 2014 года, Bethesda показали, что доступ к бета-версии Doom 4, переименованной в «новый Doom» будет предоставлен тем, кто сделал предварительный заказ Wolfenstein: The New Order

для тех кто вырос на этой игре…
Читать дальше →

Мультиклеточный процессор — это что?

Reading time18 min
Views52K
Многие слышали о мультиклеточной архитектуре, процессорах и даже первых устройствах на них. Особенно продвинутые пользователи опробовали свои алгоритмы. Были проведены первые простые тесты производительности, а также пользователь Barsmonster, вытравил кристалл процессора Р1. Сейчас уже проходит первые проверки процессор R1 и скоро будет доступен всем. Но ответ на вопрос о том, как работает мультиклеточная архитектура и в чём её отличие, знают не все. Попытаемся сейчас ввести в курс дела.
Читать дальше →

Перестаньте писать классы

Reading time9 min
Views187K
Фото Джэка Дидриха из профиля на G+ Признак того, что объект не должен быть классом — если в нём всего 2 метода, и один из них — инициализация, __init__. Каждый раз видя это, подумайте: «наверное, мне нужна просто одна функция».

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

Перевод доклада Джэка Дидриха, одного из ключевых разработчиков языка Питон. Доклад прозвучал 9 марта 2012 на конференции PyCon US.
Читать дальше →

Про колеса

Reading time2 min
Views16K
Многие уже слышали про колеса / wheels; рассказывать про них подробно не буду — на хабре были хорошие статьи. Опишу пошагово один (очевидный) способ использования колес на машине разработчика.

Все, кто устанавливал пакеты вроде numpy или scipy через pip знают, что это долго: компиляция может и десять минут занять, и двадцать, и тридцать. Среду для компиляции-то можно настроить (ну по крайней мере под mac и linux это не так сложно), но устанавливать такие зависимости в каждый virtualenv — то еще удовольствие. Можно, конечно, чай попить. Или виртуаленвы не использовать / использовать один общий.
Читать дальше →

Лабораторные по многопоточности в Java: Parallel Copy

Reading time4 min
Views26K
Хорошие лабораторные по многопоточности (простые, понятные, нетривиальные и полезные в народном хозяйстве) — большая редкость. Предлагаю Вам одно условие и четыре лабораторные работы по элементарной многопоточности на Java.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Условия


Это реализация однопоточного побайтового копировальщика из InputStream в OutputStream. Копирование происходит в потоке вызвавшем метод copy(...)
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyUtil {
    public static void copy(InputStream src, OutputStream dst)throws IOException{
        try (InputStream src0 = src; OutputStream dst0 = dst) {
            int b;
            while ((b = src.read()) != -1) {
                dst.write(b);
            }
        }
    }
}

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

ANGULARJS + REQUIREJS

Reading time5 min
Views55K

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

Итак, опишем наш взгляд на решение проблемы.

Для чего?

Работая с AngularJs вы обязательно задумаетесь о правильной организации кода. Конечно уже существуют отличные примеры решения проблемы. Например можно изучить теоретический пост Брайана Форда или практическое руководство Клиффа Мейерса. Я же поделюсь способом организации кода в приложениях AngularJs с использованием RequireJs.

Данный подход будет полезен, если вы хотите:

  • перестать беспокоиться о подключении скриптов в правильном порядке;
  • загружать javascript код асинхронно;
  • иметь возможность скомпилировать код в один минифицированный JS-файл;
Читать дальше →

Вводная по сложным запросам в SQLAlchemy

Reading time7 min
Views98K

Во время посещения PyConRu 2014 я, с удивлением, узнал, что достаточно большая аудитория python-разработчиков не использует SQLAlchemy в качестве основного инструмента для работы с базой данных. Порассуждав на данную тему после Light Talks с коллегами было принято решение — во чтобы то ни стало написать статью о том, что же можно делать со всей мощью SQLAlchemy.


Обычно в написании сайтов не требуется чего-нибудь этакого от штатного ORM. А если и требуется, то хватает замены на нештатный или прочтения основной части документации. И, как правило, голову ломать над сложными запросами не приходится. Достаточно много различных ORM предлагают классические схемы One-2-Many, One-2-One, Many-2-Many, и т.д. Для обычных запросов и связей этого вполне достаточно. К сожалению, в больших проектах не обходится без частных случаев и программисты при сложных запросах пишут либо raw sql, либо полагаются на то, что им предлагает базовый функционал ORM. Это выглядит не совсем красиво или создает достаточно большую нагрузку на базу данных.

Понятно, что в погоне за скоростью выполнения сценариев, можно пожертвовать красотой кода, но что если скоростью можно пренебречь, а вот кроссплатформенностью — нет? Да и не хочется в python коде видеть что-то кроме python кода. А что если хочется на полную катушку использовать любимый ORM (для меня SQLAlchemy) и не писать raw sql запросы?
Читать дальше →

Делаем многопользовательскую игрy на Go и WebSocket'ах

Reading time9 min
Views49K
golang gopher
Продолжаем знакомство с языком программирования Go (golang). В прошлый раз мы посмотрели основные конструкции языка. В этой статье я хочу показать использование горутин и каналов. И, конечно, продемонстрировать все это на реальном приложении, в данноcм случае многопользовательской игре. Рассматривать будем не всю игру, а только ту часть бэкэнда, которая отвечает за сетевое взаимодействие между игроками посредством WebSoket.

Игра пошаговая, для двух игроков. Однако, описанные ниже приемы можно применять для создания других игр, от покера до стратегий.
Читать дальше →

Запуск Internet Explorer Developer Channel

Reading time3 min
Views11K
Несколько недель назад (впервые, на конференции DevCon 2014) мы говорили о том, что стремимся к построению более открытого диалога между командой Internet Explorer и сообществом разработчиков. Сегодня мы представляем Internet Explorer Developer Channel, полнофункциональный браузер, созданный для того, чтобы дать разработчикам оценить функциональность и новые возможности браузера, над которыми работает команда Internet Explorer.



IE Developer Channel доступен для загрузки с Microsoft Download Center для Windows 8.1 и Windows 7 SP1 с Internet Explorer 11.

IE Developer Channel может работать независимо от IE11. В нем присутствуют все возможности текущей версии Internet Explorer и некоторые новые функции, над внедрением которых мы работаем в настоящий момент. Оцените новые возможности и расскажите, что вы о них думаете в Twitter @IEDevChat или в Connect.

Улучшения инструментов F12, тесты и новый API

Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипах

Reading time6 min
Views21K
Привет, Хабра!
При разработке игр на JavaScript часто возникает необходимость создавать множество объектов. О том, как правильно это сделать и не утонуть в коде, я рассказывал, примерно — месяц назад на Frontend Dev Conf в Минске. Возможно, доклад будет интересен тем, кто не был на конференции и сталкивался с проблемой создания множества объектов, либо является разработчиком HTML5 игр.



Под катом текст с картинками.
Читать дальше →

Information

Rating
Does not participate
Date of birth
Registered
Activity