Все потоки
Поиск
Написать публикацию
Обновить
991.36

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Куда податься программисту за знаниями в этом году

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

image
Highload++ в Москве, ноябрь 2016


Мы сделали для вас подборку лучших (по нашему мнению) выступлений с IT-конференций, на которые собираемся поехать в первой половине 2017 года (как и обещали).


Всё это будет полезно web-программистам (PHP, Go, JS), QA и DevOps. Да, в списке довольно мало конференций, проводящихся на территории России и стран СНГ, но на сегодняшний день их, увы, в принципе не так много. Так что, если вдруг вы знаете о каком-нибудь стоящем мероприятии, дополняйте наш список в комментариях.

Как подружить Custom View и клавиатуру

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

Введение


«МойОфис» работает на большинстве современных платформ: это Web-клиент, настольные версии приложения для Windows, MacOS и Linux, а также мобильные приложения для iOS, Android, Tizen. И если в разработке компьютерных приложений уже давно есть основные правила подхода к дизайну интерфейсов, то при создании приложений для мобильных устройств требуется отдельная проработка многих особенностей.


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

Как я создал SaaS-сервис, который приносит мне 1000 долларов в месяц

Время на прочтение6 мин
Количество просмотров63K
Примечание: здесь рассказано о создании с нуля небольшого, прибыльного SaaS-сервиса и о доведении его до состояния, когда он стал приносить 1 000 долларов в месяц. Это не имеет никакого отношения к многомиллиардным стартапам единорогов; я просто описываю мой опыт такой работы. Речь идёт о простом, надёжном и прибыльном инструменте, который может сделать для себя любой человек. И последнее — этот веб-сервис был сделан для внутреннего рынка России, поэтому я перевёл всё на английский и в доллары для удобства. Но, с другой стороны, этот опыт является довольно универсальным и может быть применён везде (ссылка на сервис).

Всё началось с моего другого SaaS-сервиса с названием Postio, который я сделал, чтобы облегчить людям поиск и публикацию контента на их страницах и в их группах в социальных сетях. В рамках своей маркетинговой стратегии я приобрёл и опубликовал на своём блоге десяток статей по различным темам, ориентированных на аудиторию веб-сервиса, чтобы получить дополнительный трафик с поисковых систем.

Потом вдруг Postio начал получать относительно большой трафик от Google и Яндекс (русская поисковая система) с ключевыми словами, которые не имели ничего общего с самим Postio.

image

Аналитическая статистика Гугл по суточному трафику

Здесь-то и начинается фактическая история.
Читать дальше →

Теория игр и покер. Подсчитываем число возможных стратегий

Время на прочтение4 мин
Количество просмотров11K
Согласно теории игр, чистая стратегия предусматривает все ходы всех противников и на каждую комбинацию таких ходов однозначно задает наш ход. Можно ли победить покер полным анализом дерева игры и перебором всех чистых стратегий? Давайте для начала хотя бы подсчитаем число чистых стратегий каждого игрока.

Общая идея такова. Если у нас есть построенное дерево игры, то для подсчета числа чистых стратегий в «наших» узлах мы складываем результаты по поддеревьям Fold, Call, Bet/Raise, а в узлах противников умножаем. Если нужно подсчитать число стратегий для другого игрока, можно использовать то же самое дерево, изменится только операция (сложение/умножение) в каждом узле.
Конечно, если задача — только посчитать число стратегий, можно обойтись и без прямого построения дерева (как это и сделано в приведенном коде).

Рассматривается Fixed Limit Texas Hold'em, где ставки повышаются не более 4 раз. Вычисления ведем только для префлопа!

Код и результаты — под катом.
Читать дальше →

Intel Software Guard Extensions, учебное руководство. Часть 5, разработка анклава

Время на прочтение20 мин
Количество просмотров2.9K
В пятой части серии учебных материалов, посвященных расширениям Intel Software Guard Extensions (Intel SGX), мы завершим разработку анклава для приложения Tutorial Password Manager. В четвертой части этой серии мы создали DLL-библиотеку, используемую в качестве уровня интерфейса между функциями моста анклава и ядром программы C++/CLI, а также определили интерфейс анклава. Эти компоненты готовы, поэтому теперь можно перейти к самому анклаву.
Читать дальше →

«Работает — не трогай»: Старый код и компьютеры, которые до сих пор функционируют

Время на прочтение6 мин
Количество просмотров41K
В современном мире, в котором двухлетний смартфон кажется устаревшей технологией, удивительным остается факт, что многие бизнесы и государственные компании ежедневно используют программы, не обновлявшиеся на протяжении десятков лет.

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

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

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

Создание анаморфных искажений в Unity

Время на прочтение3 мин
Количество просмотров12K
Всем привет! Сейчас я работаю в VRTech, и в рамках работы я натолкнулся на интересную задачу о которой хочется рассказать. Задача заключалась в том, чтобы получить анаморфное отображение картинки. Я попытаюсь рассказать, что такое анаморфные искажения, как рассчитать простейший случай линейного отображения такого искажения на плоскость, а так же предложу своё решение реализованное с помощью Unity.

image

Логика сознания. Часть 10. Задача обобщения

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

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

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

«Байкал-T1»: знакомство с платой на первом в России 28-нм процессоре

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

В нашу инженерную лабораторию попала демоплата Baikal BFK Rev 1.6 на основе первого российского процессора для коммерческих разработок — SOM Baikal-T1 MIPS.


Двухъядерный процессор «Байкал-Т1» на архитектуре MIPS Warrior P-class P5600 MIPS 32 был анонсирован еще в 2015 году в рамках программы по импортозамещению, его разработчик — российская фаблес-компания «Байкал Электроникс». Эта система на кристалле была создана для проектирования промышленных и потребительских устройств: маршрутизаторов и сетевых накопителей, тонких клиентов, мультимедийных центров, систем ЧПУ и т.п.


Откроем коробку и посмотрим, как работает стандартный пакет поддержки платформы (BSP) на тестовой плате:


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

Google ReCAPTCHA Invisible или долой дорожные знаки и витрины магазинов

Время на прочтение2 мин
Количество просмотров82K
Привет! Хоть большинству читателей Хабра не нужно объяснять, что такое CAPTCHA, зачем она придумана и для чего используется, позволю себе небольшой исторический экскурс.

Итак, раньше, чтобы зарегистрироваться на сайте или оставить комментарий, люди ломали свои глаза, разгадывая капчу:
CAPTCHA
У кого были проблемы со зрением, нередко могли её прослушать:

Как-то так
Audio CAPTCHA

Для решения задачи «в промышленных масштабах» использовали индусов или китайцев :)
Но всё изменилось в 2007 году...

11 февраля: Techleads meetup. Как создать и сохранить динамичную разработку

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

enter image description here


Пришло время анонсировать наш второй по счету Techleads-митап для лидов, руководителей отделов и СТО, созданный, чтобы объединить на одной площадке технологии, разработку и управление. Он пройдет 11 февраля в офисе Badoo в Москве. Начало: в 12:00.


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


Тема настолько интересная, что мы не могли остановиться, пока выбирали спикеров на митап. Вам понравится: со своими историями выступят Макс Лапшин (Erlyvideo), Евгений Потапов (ITSumma), от Badoo — Алексей Рыбак, Илья Пятин (CarPrice) и Андрей Шелехин (Tinkoff.ru). Под катом – расписание выступлений.

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

Pygest #2. Релизы, статьи, интересные проекты из мира Python [15 января 2017 — 29 января 2017]

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

Всем привет!

Второй выпуск дайджеста на Хабрахабр о новостях из мира Python. Присылайте свои актуальные материалы, а также любые замечания и предложения, которые будут добавлены в ближайший дайджест.

А теперь к делу!
Перейти к дайджесту

Возрождение IT-вопросника или как следить за вопросами toster и stackoverflow v2

Время на прочтение2 мин
Количество просмотров5.9K
Прошел год с запуска IT-вопросника, однако проработал он не долго, примерно пару месяцев. Это был один из самых активных каналов PushAll, многие пользователи получали вопросы по 100+ в день и кликали на большие из них.

Отвечая на вопросы все были в плюсе:

  1. Те кто спрашивают – сразу получали ответ
  2. Владельцы сервисов получали большую посещаемость и больше решенных вопросов
  3. Тот кто отвечал первым – получал свои ачивки в сервисах

Я долго пытался связаться с создателем IT-вопросника, получилось достучаться только в этом месяце. В итоге спустя сутки после нашего общения, снова начали приходить пуши.

Но что изменилось за этот год при использовании IT-вопросника?

Кому лень читать статью: подписываемся на канал IT-вопросника в PushAll и настраиваем теги в панели управления IT-вопросником (после подписки на канал редиректнет на панель)
Читать дальше →

Ближайшие события

Новогодние обещания Go-разработчика

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

image
Фото Roman Pronskiy


Это перевод поста одного из главных разработчиков языка Go, Расса Кокса, где он в традиционном для новогоднего времени формате дает себе обещания и планирует выполнить их.


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


Каждый год я ставлю перед собой цель — помочь Go-разработчикам. Я хочу быть уверен, что то, что делают создатели Go, оказывает положительное влияние на всех Go-разработчиков. Потому что у них есть масса способов совершить ошибку: например, можно потратить слишком много времени на очистку или оптимизацию кода, которому это не требуется; откликаться только на самые распространенные или недавние жалобы и запросы; излишне сосредотачиваться на краткосрочных улучшениях. Поэтому так важно взглянуть на все со стороны и заняться тем, что принесет больше всего пользы для Go-сообщества.


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

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

Хитрости и трюки Netbeans на живых примерах

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

Очень часто я слышу фразы различных людей на тему того, что полноценные IDE — это не нужно, что Vim, Sublime Text и Atom позволяют всё делать, и так далее, и так далее. Только недавно у меня снова возникла беседа на эту тему, и я снова вспомнил о том, что хотел показать людям некоторые трюки современных IDE, которые сильно упрощают жизнь во время работы.


Я люблю эту качественную опенсорсную IDE Netbeans. У меня даже цветовая схема под неё есть своя собственная (не забудьте прочитать описание, если пожелаете её опробовать). На всех видеороликах как раз она и используется в работе, плюс тёмный интерфейс Darkula и свободный шрифт Hack.


Иногда я перехожу в PhpStorm, поработать там и сравнить возможности этих двух IDE. И время от времени прихожу к понимаю, что каждая из них по-своему хороша. PhpStorm имеет множество интересных интеллектуальных возможностей для быстрой разработки ООП кода. А на стороне Netbeans — бесплатность, а также мощный и не сильно перегруженный интерфейс. Это особенно чувствуется после возвращения на него с PhpStorm.


В этой статье я хотел бы показать некоторые прикольные трюки, которые присутствуют в Netbeans и прочих современных IDE, а некоторые из них — только в Netbeans. Очень часто они помогают мне сэкономить массу времени при работе над большими проектами.


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

Улучшения Chrome и Firefox ускорили перезагрузку страниц на 28-50%

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

Традиционная модель валидации ресурсов

Разработчики из Google вчера объявили о результатах совместного с Facebook и Mozilla проекта оптимизации браузера по образцу Firefox. После оптимизации значительно ускорилась повторная загрузка страниц в мобильной и десктопной версиях Chrome. По данным Google, в последней версии Chrome перезагрузка страниц ускоряется в среднем на 28%.

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

Пришло время улучшить браузеры и сайты.
Читать дальше →

33 способа ускорить ваш фронтенд в 2017 году

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

enter image description here


Вы уже используете прогрессивную загрузку? А как насчёт технологий Tree Shaking и разбиения кода в React и Angular? Вы настроили сжатие Brotli или Zopfli, OCSP stapling и HPACK-сжатие? А как у вас обстоят дела с оптимизацией ресурсов и клиентской части, со вложенностью CSS? Не говоря уже о IPv6, HTTP/2 и сервис-воркерах.

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

На 100% правильный способ проверки адресов электронной почты

Время на прочтение5 мин
Количество просмотров147K
Поздравляю. C сегодняшнего дня вы никогда не будете тратить время, подбирая самое оптимальное регулярное выражение для проверки адреса электронной почты. И вы никогда больше не отклоните адрес, который к вашему удивлению оказался действительным.

Хитрость в том, чтобы сразу определить значение слова «действительный».

Мы разработчики — технические ребята, так что наиболее логичным будет проверить на соответствие официальным критериям. Вот некоторые примеры валидных адресов email, которые соответствуют критериям.


en.wikipedia.org/wiki/Email_address#Valid_email_addresses

Но я отправлю к чёрту логичный способ, так что...

Искусство оборонительного программирования

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

Почему разработчики не могут написать безопасный код? Мы не говорим здесь очередной раз про «чистый код». Мы говорим о большем с чисто практической точки зрения — о надёжности и безопасности программного обеспечения. Да, потому что небезопасное программное обеспечение в значительной степени бесполезно. Посмотрим, что значит «небезопасное» программное обеспечение:

  • Полёт №501 ракеты «Ариан-5» Европейского космического агентства был прекращён через 40 секунд после старта (4 июня 1996 г.). Экспериментальная ракета-прототип стоимостью 1 млрд. долларов США самоликвидировалась из-за ошибки в бортовом ПО управления.
  • Ошибка в программе, управлявшей установкой лучевой терапии Therac-25, стала прямой причиной смерти, как минимум, пяти пациентов в 80-х годах, когда она задавала чрезмерные дозы рентгеновского облучения.
  • Программная ошибка в зенитном ракетном комплексе MIM-104 «Patriot», вызывавшая уход его системных часов на одну треть секунды за сто часов, привела к его неспособности обнаружить и перехватить летящую ракету. Иракская ракета попала в воинскую часть в г. Дахран, Саудовская Аравия (25 февраля 1991 г.), погибло 28 американцев.

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

Многопоточность (concurrency) в Swift 3. GCD и Dispatch Queues

Время на прочтение28 мин
Количество просмотров343K
Надо сказать, что многопоточность (сoncurrency) в iOS всегда входит в вопросы, задаваемые на интервью разработчикам iOS приложений, а также в число топ ошибок, которые делают программисты при разработке iOS приложений. Поэтому так важно владеть этим инструментом в совершенстве.
Итак, у вас есть приложение, оно работает на main thread (главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI). Как только вы начинаете добавлять к вашему приложению такие «затратные по времени» куски кода, как загрузка данных из сети или обработка изображений на main thread (главном потоке), то работа вашего UI начинает сильно замедляться и даже может привести к полному его «замораживанию».



Как можно изменить архитектуру приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит многопоточность (сoncurrency), которая позволяет одновременно выполнять две или более независимые задачи (tasks): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.
Читать дальше →

Вклад авторов