• React.js: собираем с нуля изоморфное / универсальное приложение. Часть 2: добавляем bootstrap, страницы и роутинг

    • Tutorial

    Разработка изоморфного приложения глазами моей жены


    Это продолжение статьи про разработку изоморфного приложения с нуля на React.js. В этой части мы добавим несколько страниц, bootstrap, роутинг, концепцию Flux и ее популярную реализацию Redux.

    Читать дальше →
  • Разработка браузерной онлайн игры на meteor

      Здравствуйте, меня зовут Александр Зеленин и я веб-разработчик. Последние полгода занимался разработкой многопользовательской космической браузерной стратегии. На текущий момент мы уже находимся на стадии закрытого бета тестирования (доступного для вложившихся) и запустили компанию на бумстартере.



      В этом посте хочу рассказать про процесс разработки игры с нуля силами двух человек.
      Читать дальше →
    • Обзор топологий глубоких сверточных нейронных сетей

        Это будет длиннопост. Я давно хотел написать этот обзор, но sim0nsays меня опередил, и я решил выждать момент, например как появятся результаты ImageNet’а. Вот момент настал, но имаджнет не преподнес никаких сюрпризов, кроме того, что на первом месте по классификации находятся китайские эфэсбэшники. Их модель в лучших традициях кэгла является ансамблем нескольких моделей (Inception, ResNet, Inception ResNet) и обгоняет победителей прошлого всего на полпроцента (кстати, публикации еще нет, и есть мизерный шанс, что там реально что-то новое). Кстати, как видите из результатов имаджнета, что-то пошло не так с добавлением слоев, о чем свидетельствует рост в ширину архитектуры итоговой модели. Может, из нейросетей уже выжали все что можно? Или NVidia слишком задрала цены на GPU и тем самым тормозит развитие ИИ? Зима близко? В общем, на эти вопросы я тут не отвечу. Зато под катом вас ждет много картинок, слоев и танцев с бубном. Подразумевается, что вы уже знакомы с алгоритмом обратного распространения ошибки и понимаете, как работают основные строительные блоки сверточных нейронных сетей: свертки и пулинг.

        Читать дальше →
      • Трамплин вызова магических функций в PHP 7

        • Перевод


        В этой статье мы подробно рассмотрим оптимизацию в виртуальной машинe в PHP 7 (виртуальной машине Zend). Сначала коснёмся теории трамплинов вызовов функций, а затем узнаем, как они работают в PHP 7. Если вы хотите полностью во всём разобраться, то лучше иметь хорошее представление о работе виртуальной машины Zend. Для начала можете почитать, как устроена ВМ в PHP 5, а здесь мы поговорим о ВМ PHP 7. Хотя она и была переработана, но действует практически так же, как и в PHP 7. Поэтому если вы разберётесь в ВМ PHP 5, то разобраться с ВМ PHP 7 не составит никакого труда.
        Читать дальше →
      • Как посчитать перестановки. Лекция в Яндексе

          Некоторое время назад в московский офис Яндекса приезжал Игорь Пак — ученый с множеством научных работ, выпускник мехмата МГУ и аспирантуры Гарварда. Сейчас Игорь работает в Калифорнийском университете. Его лекция в Яндексе была посвящена различным классам последовательностей и перестановкам. В том числе прямо по ходу лекции он представил выкладки, опровергающие гипотезу Нунана и Зайлбергера — одну из ключевых в области перестановок.



          Под катом — подробная текстовая расшифровка и большинство слайдов.
          Читать дальше →
        • PHP: неправильный путь

          • Перевод
          image

          В мире PHP-программирования существует набор трендов. Некоторые люди активно продвигают их (в книгах и на сайтах) как «современный PHP», а другие подходы выставляют как устаревшие, глупые или просто неверные.

          Похоже, все эти люди без устали стараются заставить каждого программировать так, как они считают нужным. Эта статья написана, чтобы поделиться прагматичным взглядом на PHP-программирование. Взглядом, продиктованным опытом и практическими последствиями, а не популярными тенденциями, теориями или академическими догмами. Материалы, представленные на сайте PHP — The Wrong Way, будут обновляться по мере появления новой информации. Приглашаем всех поучаствовать в этом.
          Читать дальше →
        • Ломаем сбор мусора и десериализацию в PHP

          • Перевод


          Эй, PHP, эти переменные выглядят как мусор, согласен?
          Нет? Ну, посмотри-ка снова…


          tl;dr:
          Мы обнаружили две use-after-free уязвимости в алгоритме сбора мусора в PHP:

          • Одна присутствует во всех версиях PHP 5 ≥ 5.3 (исправлена в PHP 5.6.23).
          • Вторая — во всех версиях PHP ≥ 5.3, включая версии PHP 7 (исправлена в PHP 5.6.23 и PHP 7.0.8).

          Уязвимости могут удалённо применяться через PHP-функцию десериализации. Используя их, мы отыскали RCE на pornhub.com, за что получили премию в 20 000 долларов плюс по 1000 долларов за каждую из двух уязвимостей от комитета Internet Bug Bounty на Hackerone.
          Читать дальше →
          • +64
          • 17,9k
          • 4
        • Философия программирования 4 — Технология «Шапито»

            Представьте себе конвейер с программистами: сели люди за одним круглым столом, один огромный монитор во всю стену, и у каждого ещё свой обычный.

            Первый: тоном капитана звездолёта, — нужна функция connectToDB() в главном файле.
            Второй: — открываю — открывает нужный файл, находит функцию.
            Первый: — что здесь происходит?
            Третий: — запускаю — ставит брейкпойнт, запускает приложение, в момент останова произносит: — dbinstance в порядке — выводит значение на экран --, remotePort равен 8999, — это значение тоже видно на экране.
            Первый: — странно, надо бы профилировать этот вызов.
            Третий: — ок — диктует четвёртому — новая строка 123 console.time(), 125 console.timeEnd()
            Четвёртый: набирает, — готово.
            Читать дальше →
          • Небольшой скрипт для отслеживания цен avito из Google Spreadsheet

            • Tutorial
            Хочу поделиться с сообществом небольшим скриптом для загрузки цен с сайта объявлений AVITO в Google Spreadsheet. Вдруг кому-нибудь еще пригодится.

            Логика такая — в цикле бежим по ячейкам таблицы с адресами и запрашиваем странички. Из полученных страниц получаем цену и подставляем в соседние ячейки. Запуск скрипта через пункт меню Avito -> Update Prices.

            Page Sample
            (наименнннование sic!)
            Читать дальше →
          • Обзор платежных агрегаторов для приема платежей

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

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

              Чем же платежные агрегаторы отличаются друг от друга, и на что стоит обратить внимание?


              Каждую компанию было решено рассмотреть по десяти параметрам. Ниже приведено детальное описание параметра и почему на это стоит обратить внимание.
              Читать дальше →
            • Необъятные масштабы бытия. Часть 1. Межпланетные дали



                Человек издревле пытался понять устройство окружающего его мира и найти свое место в нем. Упорство и изобретательность его разума в течение тысяч лет приближали человека к объективному пониманию мира вопреки закрепленному культурой субъективному (не редко ложному) восприятию. Одной из первых задач к достижению этих целей является определение масштабов окружающего нас мира.

                В данном обзоре я ознакомлю вас с историей постижения человеком масштабов мироздания с эпохи изобретательных греков и до современной эры высоких технологий. Вы узнаете, почему «плоская Земля на трех китах» вызывала смех еще у древних римлян, как современники короля-солнце определили межпланетные расстояния и каким образом космические катаклизмы помогают постигать вселенские масштабы.
                Читать дальше →
              • Математические обозначения: Прошлое и будущее

                • Перевод


                Перевод поста Стивена Вольфрама (Stephen Wolfram) "Mathematical Notation: Past and Future (2000)".
                Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе и подготовке публикации

                Содержание


                Резюме
                Введение
                История
                Компьютеры
                Будущее
                Примечания
                Эмпирические законы для математических обозначений
                Печатные обозначения против экранных
                Письменные обозначения
                Шрифты и символы
                Поиск математических формул
                Невизуальные обозначения
                Доказательства
                Отбор символов
                Частотное распределение символов
                Части речи в математической нотации
                Стенограмма речи, представленной на секции «MathML и математика в сети» первой Международной Конференции MathML в 2000-м году.

                Резюме


                Большинство математических обозначений существуют уже более пятисот лет. Я рассмотрю, как они разрабатывались, что было в античные и средневековые времена, какие обозначения вводили Лейбниц, Эйлер, Пеано и другие, как они получили распространение в 19 и 20 веках. Будет рассмотрен вопрос о схожести математических обозначений с тем, что объединяет обычные человеческие языки. Я расскажу об основных принципах, которые были обнаружены для обычных человеческих языков, какие из них применяются в математических обозначениях и какие нет.

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

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

                Традиционная математическая нотация представляет математические объекты, а не математические процессы. Я расскажу о попытках разработать нотацию для алгоритмов, об опыте реализации этого в APL, Mathematica, в программах для автоматических доказательств и других системах.

                Обычный язык состоит их строк текста; математическая нотация часто также содержит двумерные структуры. Будет обсуждён вопрос о применении в математической нотации более общих структур и как они соотносятся с пределом познавательных возможностей людей.

                Сфера приложения конкретного естественного языка обычно ограничивает сферу мышления тех, кто его использует. Я рассмотрю то, как традиционная математическая нотация ограничивает возможности математики, а также то, на что могут быть похожи обобщения математики.
                Читать дальше о математической нотации, её прошлом и будущем...
                • +50
                • 37,9k
                • 9
              • Полезные трюки PostgreSQL



                  В мануале есть всё. Но чтобы его целиком прочитать и осознать, можно потратить годы. Поэтому один из самых эффективных методов обучения новым возможностям Postgres — это посмотреть, как делают коллеги. На конкретных примерах. Эта статья может быть интересна тем, кто хочет глубже использовать возможности postgres или рассматривает переход на эту СУБД.
                  Читать дальше →
                • Айтишник на отдыхе: а как насчет телескопа?



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


                      Пример очень неудачного опыта, пояснение в разделе “о технике безопасности”

                      К моему предыдущему посту было множество комментариев по части экспериментов с детьми. Тогда я пообещал написать отдельный пост о простых увлекательных опытах. Сейчас я это обещание выполняю. Данная статья будет вводной, в ней я расскажу только о самых популярных и известных экспериментах которые легко выполнить дома с ребенком.
                      Читать дальше →
                    • Руководство по собеседованию на вакансию PHP-программиста

                      Вездесущий… это определённо то слово, которым можно описать язык PHP по отношению к вебу. Он действительно вездесущ. В настоящее время, среди всех серверных языков программирования, PHP используется наиболее широко. На нём написаны более 80% сайтов, при этом следующий по популярности ASP.NET со своими 17% остаётся далеко позади.



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

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

                      Как же отличить тех, кто обладает реальной компетентностью в PHP (не говоря уже о тех, кто входит в 1% наиболее опытных кандидатов) от тех, у кого только поверхностные знания?
                      Читать дальше →
                    • Архитектура Stack Overflow

                      • Перевод
                      image

                      Чтобы понять, как все это работает, давайте начнем с показателей Stack Overflow. Итак, ниже приводится статистика за 12 ноября 2013 и 9 февраля 2016 года:

                      статистика
                      • 209,420,973 (+61,336,090) HTTP-запросов к нашему балансировщику нагрузки;
                      • 66,294,789 (+30,199,477) страниц было загружено;
                      • 1,240,266,346,053 (+406,273,363,426) битов (1.24 TБ) отосланного HTTP-трафика;
                      • 569,449,470,023 (+282,874,825,991) битов (569 ГБ) всего получено;
                      • 3,084,303,599,266 (+1,958,311,041,954) битов (3.08 ТБ) всего отослано;
                      • 504,816,843 (+170,244,740) SQL-запросов (только из HTTP-запросов);
                      • 5,831,683,114 (+5,418,818,063) обращений к Redis;
                      • 17,158,874 (not tracked in 2013) поисков в Elastic;
                      • 3,661,134 (+57,716) запросов Tag Engine;
                      • 607,073,066 (+48,848,481) мс (168 часов) выполнения SQL-запросов;
                      • 10,396,073 (-88,950,843) мс (2.8 часов) затрачено на обращение к Redis;
                      • 147,018,571 (+14,634,512) мс (40.8 часов) затрачено на запросы к Tag Engine;
                      • 1,609,944,301 (-1,118,232,744) мс (447 часов) затрачено на обработку в ASP.Net;
                      • 22.71 (-5.29) мс в среднем (19.12 мс в ASP.Net) на формирование каждой из 49,180,275 запрошенных страниц;
                      • 11.80 (-53.2) мс в среднем (8.81 мс в ASP.Net) на формирование каждой из 6,370,076 домашних страниц.


                      Вы можете спросить, почему существенно сократилась продолжительность обработки в ASP.Net по сравнению с 2013 годом (когда было 757 часов) несмотря на прибавление 61 миллиона запросов в день. Это произошло как и из-за модернизации оборудования в начале 2015 года, так и из-за некоторого изменения параметров в самих приложениях. Пожалуйста, не забывайте, что производительность – это наша отличительная особенность. Если Вы хотите, чтобы я более подробно рассказал о характеристиках оборудования – без проблем. В следующем посте будут подробные спецификации железа всех серверов, которые обеспечивают работу сайта.

                      Итак, что изменилось за прошедшие 2 года? Кроме замены некоторых серверов и сетевого оборудования, не очень многое. Вот укрупненный список хардварной части, которая обеспечивает работу ресурса (выделены различия по сравнению с 2013 годом):

                      • 4 Microsoft SQL Servers (новое железо для 2-х из них);
                      • 11 Web-серверов IIS (новое оборудование);
                      • 2 сервера Redis (новое оборудование);
                      • 3 сервера Tag Engine (новое оборудование для 2-х из 3-х);
                      • 3 сервера Elasticsearch (те же, старые);
                      • 4 балансировщика нагрузки HAProxy (добавлено 2 для поддержки CloudFlare);
                      • 2 брандмауэра Fortinet 800C (вместо Cisco 5525-X ASAs);
                      • 2 маршрутизатора Cisco ASR-1001 (вместо маршрутизаторов Cisco 3945);
                      • 2 маршрутизатора Cisco ASR-1001-x (новые!).

                      Что нам необходимо, чтобы запустить Stack Overflow? Этот процесс не сильно изменился с 2013 года, но из-за оптимизации и нового железа, нам необходим только один web-сервер. Мы этого не хотели, но несколько раз успешно проверили. Вношу ясность: я заявляю, что это работает. Я не утверждаю, что это (запуск SO на единственном web-сервере) — хорошая затея, хотя каждый раз выглядит весьма забавно.
                      Читать дальше →
                    • Go в 2015 году

                        Уходящий 2015-й год выдался достаточно насыщенным для языка программирования Go и его сообщества. Всё больше людей открывают для себя мощь, скрывающуюся за простотой языка, сообщество растёт, развивается и играет всё более значимую роль в настоящем и будущем Go. Этот — шестой по счёту год существования языка — ознаменовался несколькими важными изменениями внутренностей языка, фантастическим улучшением сборщика мусора, первым шагом к стандартизации работы с зависимостями и многими другими событиями.
                        Давайте пройдемся вкратце по важным событиями 2015-го года в мире Go.


                        Читать дальше →
                      • Пример решения типичной ООП задачи на языке Go

                        • Tutorial
                        Недавно попалась на глаза занимательная статья с аналогичным названием о языке Haskell. Автор предлагал читателю проследить за мыслью программиста, решающего типичную ООП задачу но в Хаскеле. Помимо очевидной пользы расширения представлений читателей о том, что ООП — это отнюдь не «классы» и «наследование», подобные статьи полезны для понимания того, как правильно пользоваться языком. Предлагаю читателю решить ту же самую задачу, но на языке Go, в котором ООП тоже реализован непривычно.
                        Читать дальше →
                      • 7 игр за 7 дней: rewarded video

                          image

                          Ты решил выпустить свою игру под iOS? Значит, читай дальше. Яхты, машины, виллы — все это будет твое. Главное — удачно жениться. А разработчикам игр остаются свобода и счастье творчества. Sic!

                          Да, закатай губу и помни, каждый день в яблочный магазин выкладывается более 1000 игр. Представь, что какой-то тип-игроман заходит в Appstore раз в неделю посмотреть свежие приложения. Его ждет 7*1000=7000 новых игр. И еще миллион старых, которых он не пробовал. Он пролистает 3 страницы с иконками и описаниями, увидит 3 десятка приложений, почитает отзывы и скачает себе пару бесплатных игрушек. Какова вероятность, что он увидит твое гениальное, неслыханное, эпохальное, умопомрачительное приложение? Невелика? Ах, ты с кафедры мат. статистики? Да ладно?! А не переживай. Удача и реклама спасут тебя. Выпусти 100 приложений, размести в них современную рекламу и 50 долларов в день тебе обеспечены до самой смерти.

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