• Инди-игра для Android в цифрах


      Всем привет,

      Сегодня, я хочу рассказать о запуске своего последнего проекта — «Shooting club 3», поделиться множеством самой разнообразной статистки о доходах, бюджетах, загрузках, в общем все то, что мне самому было бы интересно послушать о других играх. Конечно, мне хотелось чтобы этот топик был «success story», но, будем откровенны, пока это не так. Возможно, это из-за того, что игра еще совсем новая и со временем она «разгонится». По крайней мере, мы на это надеемся!
      Читать дальше →
    • Воспитываем Джуниора

        imageВ последнее время, многие компании начали открывать у себя вакансии для молодых неопытных программистов. Честно говоря, я считаю, что это здорово, ибо устроиться на работу, не имея опыта, в большинстве отраслей довольно сложно. Однако, беря на работу Джуниора вы должны понимать, что на вас ложится некая ответственность, фактически, вы становитесь наставником этого человека, и не каждый руководитель или тим-лид эту ответственность осознает.
        В этой статье, я хочу рассказать о том, нужен ли вам вообще начинающий разработчик и как выстраивать с ним взаимоотношения.
        Для начала, давайте определим, кто такой Джуниор. Начинающие программисты бывают разные, мы возьмем молодого человека, не глупого, только после института, он знает нужный нам язык программирования, у него за плечами несколько маленьких самостоятельных проектиков и, самое главное, есть желание учиться дальше.
        Читать дальше →
      • Про Linux — для любознательных Windows-пользователей



          Так уж получилось, что даже на Хабре многие имеют очень смутное представление о семействе OS Linux.

          Цель данной статьи – максимально популярным языком рассказать про особенности и отличия Linux от Windows для тех, кто вообще не имел с ним дела.

          Я уже не один год свободно пользуюсь Archlinux, загружая винду лишь «на поиграться». Данная статья рассказывает о вещах, которые я выяснил эмпирическим путем, тыкаясь словно слепой котенок. Если бы в свое время мне попалась бы именно такая информация именно в такой форме — это сэкономило бы мне как минимум 2 года, в течение которых я переходил с Windows на Linux.

          Станиславский заинтригован!
        • Анализируем числовые последовательности



            Иногда, если имеешь дело с числовыми последовательностями или бинарными данными, возникает желание “пощупать” их, понять, как они устроены, подвержены ли сжатию, если зашифрованы, то насколько качественно. Если речь идет о генераторах псевдо-случайных чисел, хочется знать, насколько они псевдо и насколько случайны.
            В самом деле, что тут можно придумать, ну … матожидание, дисперсию посчитать или гистограмму какую построить…
            Сейчас мы рассмотрим метод, позволяющий снимать, своего рода, отпечатки пальцев с числовых последовательностей.

            Читать дальше →
          • Как делать графики в LaTeX

              Очень часто в документ необходимо вставить тот или иной график. На сегодняшний день есть множество инструментов позволяющие это сделать с возможностью вставки в LaTeX документ среди них Gnuplot, Matplotlib. В данном посте хотелось бы осветить еще один способ создания графика при помощи пакета pgfplots. Этот пакет является «надстройкой»/«дополнением» к пакету Tikz(PGF).

              Читать дальше →
            • Функторы, аппликативные функторы и монады в картинках

              • Translation
              Вот некое простое значение:


              И мы знаем, как к нему можно применить функцию:


              Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


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


              data Maybe a = Nothing | Just a
              

              Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
              Читать дальше →
            • «Фактура убила текстуру?» — мысли о роли текстур, фактур и материалов в играх



                Не то чтобы я был диким фанатом консолей, но есть вещи, которые действительно впечатляют. Понятное дело, что консолям нового поколения без впечатляющих пилотов на рынке делать нечего. Речь идет не о Watch Dogs, который тоже заслуживает внимания, как любая песочница с открытым миром, а о Tom Clancy’s The Division анонсированная для PS4 и Xbox One. Картинка (я оцениваю лишь ее) выглядит действительно хорошо. Игры уже давно стремятся быть не играми. Это уже почти кино. Меня мало волнует сейчас вопрос гейм-плея данной игры. Сейчас я просто потребитель, который готов клюнуть на вкусную обертку.

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

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

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



                Что я вижу здесь? Для начала посмотрите трейлер и решите, что видите для себя вы. А потом… лопата?


                Читать дальше →
              • Нестандартный способ получить недоступную информацию на iOS



                  По следам своего выступления на Positive Hack Days я хотел бы поделиться с вами результатами исследования демона configd на MACH-уровне в iOS 6. Как вы знаете, в iOS доступно не так много информации о состоянии подключения Wi-Fi. В общем-то, Public API не дает возможности узнать ничего, кроме SSID, BSSID и сетевых настроек адаптера. А режим шифрования? мощность сигнала? Под катом я расскажу, как узнать все это без применения Private API и Jailbreak.
                  Читать дальше →
                • Создание огроооомных приложений на AngularJS

                  • Translation
                  • Tutorial
                  Документация по Ангуляру отлично подходит для начала работы и ковыряния в API. Однако, она не объясняет как организовать и управлять приложением, когда оно разрастется до десятков или сотен тысяч строк кода. Я собрал здесь некоторые из моих наблюдений и передового опыта по управлению расползающимися приложениями. Сначала взглянем на организацию, затем перейдем к некоторым советам по улучшению производительности и закончим краткой сводкой по инструментам, серверам и процессу сборки. Этот пост будет сосредоточен на больших приложениях, в частности, есть отличная статья по лучшим практикам AngularJS с декабрьской встречи, на которую также стоит взглянуть.
                  Читать дальше →
                • А пойдёмте учиться в Гарвард?

                    В январе-апреле этого года я попробовал себя на курсе CS50x Гарвардского университета на edx.org. Сказать, что мне понравилось — это не сказать ничего. Это было нереально круто. На мой взгляд, сферическое обучение Computer Science в вакууме должно быть именно таким. By the way, сертификат я так и не получил — я изначально поздно стартанул и не уложился в дедлайн — не хватило буквально недели. Sad but true.

                    Но это был хороший опыт, и я решил узнать, что же еще предлагает Гарвард в сфере онлайн-обучения, и вот что я нашел:
                    image
                    Читать дальше →
                  • Scala rule-based inference engine

                    Всем привет! Хочу показать общественности свой открытый движок вывода правил (forward chaining) с поддержкой нечеткой логики, под рабочим названием Scala inference engine (sie) (код).

                    UPD.
                    Библиотека выложена в центральный репозиторий maven-а:
                        <dependency>
                            <groupId>net.sf.brunneng.fusie</groupId>
                            <artifactId>fusie</artifactId>
                        </dependency>
                    


                    Читать дальше →
                  • А давайте я вам расскажу про градиенты!


                      скрин финального результата

                      В этой статье я рассказываю о том, как я изобрел свой личный велосипед, рисующий градиент практически как в фотошопе. Сразу предупреждаю, алгоритм ужасно медленный и неоптимизированный. Оптимизацией и рассмотрением какого-нибудь популярного алгоритма градиента я собираюсь заняться во второй части статьи

                      Зачем?


                      Как-то захотелось мне реализовать программную отрисовку градиентов, максимально похожих на фотошоповские. Никакой конкретной цели у меня не было, так, интересная задачка на вечер. В качестве языка была выбрана Java. Важной идеей было то, что я хотел написать этот алгоритм именно своими силами, не подглядывая в чужие алгоритмы.
                      Читать дальше →
                    • Графы дорожных сетей и алгоритмы работы с ними

                      В математике сети дорог (автомобильных и не только) представляются взвешенным графом. Населенные пункты (или перекрестки) — это вершины графа, ребра — дороги, веса ребер — расстояния по этим дорогам.

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

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

                      Мы не знаем эти правила, однако, работая с дорожными сетями, вполне можно использовать алгоритмы, которые эффективны для графов дорог, хотя и не подходят для графов в универсальном или математическом смысле. Рассмотрим здесь два таких алгоритма.
                      Читать дальше →
                    • Скрытые цепи Маркова, алгоритм Витерби

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

                        Исходный сигнал

                        Интересный метод, описан в статье «A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition» L.R. Rabiner, которая вводит модель скрытой цепи Маркова и описывает три ценных алгоритма: The Forward-Backward Procedure, Viterbi Algorithm и Baum-Welch reestimation. Несмотря на то, что эти алгоритмы представляют интерес только в совокупности, для большего понимания описывать их лучше по отдельности.
                        Читать дальше →
                      • Ежедневная работа с Git

                        • Tutorial
                        Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

                        Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
                        • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
                        • будет ли менеджер и заказчик удовлетворён этим процессом?
                        • будет ли легко работать разработчикам?
                        • смогут ли новички быстро включиться в процесс?
                        • можно ли процесс относительно легко и быстро изменить?


                        Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

                        Далее очень много букв случайным образом превратились в пост.
                      • ВУЗ для IT специалиста: взгляд изнутри

                          Если вы давно закончили институт и уже сформировавшийся, матерый специалист, то вам не стоит читать дальше. Вы не узнаете из этого поста ничего нового и полезного. Может быть он вызовет у вас улыбку. Но судя по комментариям к статьям, на сайте достаточно и тех, кто еще учится или только собирается учиться на IT специальности. Для них этот пост написан и я искренне надеюсь может быть чем-то полезен.
                          Так сложилось, что я работаю подрабатываю в университете преподавателем на компьютерной специальности и уже много лет работаю разработчиком (фрилансером и офсерсером). Т.е. могу видеть обе стороны одной медали, имя которой — ВУЗ.
                          Дальше будет много букв и ни одной картинки. Кому еще интересно — прошу под кат.
                          Читать дальше →
                        • N+1 полезная книга для бизнеса: часть 3



                            Привет!
                            Прошлые два обзора полезных книг за 2010 и 2011 год собрали просто адовое количество закладок, поэтому я продолжу. Прошел ещё год, ещё около 250 прочитанных книг – и вот самые интересные под катом.

                            Кто сказал, что слоны не умеют танцевать? Возрождение корпорации IBM: взгляд изнутри (Герстнер Луис)


                            Отличная книга про то, как удалось восстановить IBM. То, что со стороны выглядело как бессистемное перемещение активов и последовательность приказов без особого смысла, через несколько лет начало складываться в единую систему.

                            Догнать зайца (Стивен Спир)


                            Отличная книга про дебаг производственных процессов. Одна из основных вещей – то, что все серьёзные проблемы возникают из-за сочетания некритичных багов. Есть примеры из американской ядерной программы, NASA и т.п. Я предлагаю прямо сейчас пойти и прочитать описание железнодорожного крушения на Каменской: один не отчитался, второй не проверил тормоза, третий зажал тангенту, четвёртый сорвал стоп-кран. Результат — катастрофа.
                            Читать дальше →
                          • 8 фактов, которые вы, возможно, не знали о C#

                            • Translation
                            Вот несколько необычных фактов о языке C#, о которых знают лишь немногие разработчики.

                            1. Индексаторы могут использовать params параметры


                            Мы все знаем, как обычно выглядят индексаторы x = something["a"], а так же код необходимый для его реализации:

                            public string this[string key]
                             {
                               get { return internalDictionary[key]; }
                             }
                            

                            Но знали ли вы, что для доступа к элементам вы можете использовать params параметры x = something["a", "b", "c", "d"]?
                            Просто напишите ваш индексатор следующим образом:
                            Читать дальше →