Search
Write a publication
Pull to refresh
0
0
Send message

Uber — причины перехода с Postgres на MySQL

Reading time19 min
Views106K


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


Наверное, не будет преувеличением сказать, что за последние несколько лет это стало одним из самых громких и резонансных событий, связанных с СУБД PostgreSQL, которую мы, к слову сказать, очень любим и широко используем. Эта ситуация наверняка пошла на пользу не только упомянутым системам, но и движению Free and Open Source в целом. При этом, к сожалению, русского перевода статьи так и не появилось. Ввиду значимости события, а также подробного и интересного с технической точки зрения изложения материала, в котором в стиле «Postgres vs MySQL» идет сравнение физической структуры данных на диске, организации первичных и вторичных индексов, репликации, MVCC, обновлений и поддержки большого количества соединений, мы решили восполнить этот пробел и сделать перевод оригинальной статьи. Результат вы можете найти под катом.

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

Анализ исходного кода движка Doom: рендеринг

Reading time8 min
Views40K
image

От экрана дизайнера к экрану игрока


Карты разрабатывались дизайнером уровней в 2D с помощью редактора Doom Editor (DoomED). LINEDEFS описывали замкнутые секторы (SECTORS в исходном коде), а третье измерение (высота) указывалась посекторно. Первый уровень Doom E1M1 выглядит так:

image

После завершения работы над картой она нарезается методом двоичного разбиения пространства (Binary Space Partitioning, BSP). LINEDEF рекурсивно выбирались и их плоскости превращались в секущие плоскости. То есть LINEDEF разрезались на сегменты (SEGS) до тех пор, пока не оставались только выпуклые подсектора (SSECTOR в коде).

Интересный факт: И DoomED, и iBSP писались на… Objective-C на рабочих станциях NextStep. Пятнадцать лет спустя тот же язык почти в той же операционной системе выполняет игру на мобильном устройстве! [прим. пер.: в 2010 году Doom вышел на iPhone] Я немного поработал веб-археологом и мне удалось найти исходный код idbsp. На него стоит посмотреть.

Google выпустила TensorFlow 1.0

Reading time4 min
Views27K

TensorFlow 1.0 с моделью нейросети нового поколения Inception поддерживает аппаратное ускорение на DSP Hexagon в мобильных процессорах Qualcomm Snapdradon 820. Скорость работы приложений вроде Prism и программ машинного зрения увеличится в 8 и более раз, а энергопотребление снизится в 4 раза. Фильтры от нейросетей можно будет накладывать на видео почти в реальном времени

На первой конференции для разработчиков TensorFlow Dev Summit компания Google объявила о выходе мажорного релиза библиотеки TensorFlow 1.0, обратно несовместимого с предыдущими версиями. Это значит, что программы, работавшие на версиях TensorFlow 0.n, могут не работать на версии TensorFlow 1.0. Разработчики из Google говорят, что изменения в API были необходимы «для обеспечения внутренне согласованных программных интерфейсов», и больше такого не повторится: ломающих обратную совместимость изменений в будущих версиях 1.x не планируется. Сейчас разработчикам рекомендуется изучить руководство по миграции и использовать скрипт для преобразования.

TensorFlow — свободная программная библиотека для машинного обучения в применении к различным видам задач на восприятие и понимание языка. В данный момент она используется в научно-исследовательской работе и в десятках коммерческих продуктов Google, в том числе в Google Search, Gmail, Photos, Youtube, Translate, Assistant, а так же всевозможных системах распознавания, в том числе распознавания речи.
Читать дальше →

Крэш-курс по UI-дизайну

Reading time7 min
Views43K


Мы всегда в поисках хороших статей о дизайне, чтобы потом использовать их в работе над сайтом «Я люблю ИП». Сегодня мы перевели ещё одну статью, которая рассказывает, чем отличается UI-дизайн от UX-дизайна и на каких основных принципах строится дизайн интерфейсов.


UI vs. UX


Если вы хоть немного интересовались дизайном приложений, то наверняка слышали термины «UI» и «UX». Но чем же они отличаются?


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


Согласно книги Дж. Гарретта «Элементы опыта взаимодействия», UX-дизайн можно определить через пять основных уровней. Давайте начнём с самого абстрактного.


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

Мошенничество при покупке б/у MacBook: «А номер то, говорят, не настоящий!»

Reading time6 min
Views116K
image

Все компьютеры Apple имеют похожий дизайн. Многие модели одной серии невозможно отличить по внешним признакам. Этим пользуются мошенники, которые завышают год выпуска или технические характеристики, с целью продать дороже Мак. Я много лет работаю мастером по ремонту компьютеров Apple, встречал и случаи такого мошенничества. Всех кому интересно, как не дать себя обмануть при покупке б/у Мака, приглашаю под кат.
Читать дальше →

Трансляция WebRTC-видеопотока из браузера на YouTube Live в 65 строк JavaScript/HTML-кода

Reading time11 min
Views35K


В данной статье мы расскажем как работают трансляции Youtube Live и покажем как человек с базовыми знаниями JavaScript может закодить трансляцию на Youtube Live с HTML страницы с использованием технологии WebRTC.

Для работы категорически потребуются следующие знания и умения:

1) Базовые знания JavaScript / HTML
2) Умение работать в командной строке Linux.
3) Прямые руки.
Читать дальше →

Про организацию Телефонии в Отделе Продаж и интеграцию с CRM

Reading time14 min
Views14K
Телефон — один из важных каналов коммуникаций с клиентами. Хотя и развитие новых технологий ставит под сомнение необходимость его использования (некоторые компании практически полностью исключают такой вид связи со своими клиентами, так как это относительно дорогой вид взаимодействия), большинство людей все еще предпочитают использовать этот традиционный вид связи. Звонок по телефону является одним из существенных каналов получения лидов в компанию.

Не секрет, что появление виртуальных АТС привело к широкому распространению так называемых Облачных сервисов IP-телефонии, которые могут предложить гибкие условия, дешевые тарифы и широкие функциональные возможности, включая интеграцию с CRM. Давайте посмотрим на это глазами предпринимателя малого бизнеса и сформулируем (не в даваясь в технические детали) бизнес требования, которым должна отвечать Телефония для обеспечения эффективного Отдела Продаж.
Читать дальше →

Хакинтош: разворачиваем macOS Sierra на Intel-PC подробно и понятно

Reading time13 min
Views1.1M
ПРОЧТИ МЕНЯ ПОЖАЛУСТО

Если вы НЕ МОЖЕТЕ распаковать файлы на флешку, пожалуйста, отойдите от кливиатуры и срочно прочитайте книгу «Компьютер для чайников: подробное пособие как пользоваться ПК»!!!



1. Все файлы залиты на МЕГУ. Кто испытывает с ней проблемы — в комментариях перезалили на торрент.
2. Пожалуйста, не спрашивайте меня про установку Мака на ноутбуки. Прошу вас. Пожалуйста. Это очень геморройный процесс. Поставьте себе убунту и подключите тему Мака. Тот же экспириенс получите
3. Я на хабре редко отвечаю, пишите в вк по всем вопросам.


Данный мануал/гайд/etc написан для тех, кому лень собирать по кускам ту или иную информацию об установке «мака» на PC, все понятно и по полочкам.
Читать дальше →

Русские придумали гениальный способ обманывать игровые автоматы, от которого казино не могут защититься

Reading time7 min
Views329K
image

В начале июля 2014 года бухгалтера из казино Люмьер Плейс [Lumiere Place] в Сент-Луисе обнаружили, что несколько их игровых автоматов сошли с ума на пару дней. Программное обеспечение, одобренное правительством, даёт автоматам фиксированную фору математическими методами, так, чтобы казино были уверены в том, сколько они заработают в долгосрочной перспективе – допустим, 7,129 центов на каждом долларе. Но 2 и 3 июля несколько автоматов из казино Люмьер выдали гораздо больше денег, чем приняли, несмотря на отсутствие каких-то особенных джекпотов. Такое отклонение на жаргоне индустрии называется отрицательным удержанием. И поскольку ПО не подвержено приступам безумия, единственным объяснением было то, что кто-то жульничает.

Охрана казино подняла архивы видеонаблюдения и обнаружила виновника, тёмноволосого мужчину 30 с чем-то лет в рубашке-поло на молнии с коричневой прямоугольной сумкой. В отличие от большинства мошенников, он вроде бы никак не воздействовал на выбранные им автоматы. Он выбирал только старые модели, изготовленные австралийской компанией Aristocrat Leisure. Он просто играл, нажимая на кнопки игр типа Star Drifter или Pelican Pete, украдкой держа при этом свой iPhone ближе к экрану.
Читать дальше →

Краткий обзор нововведений в Laravel 5.4

Reading time6 min
Views24K

image


Сегодня состоялся вход новой версии PHP фреймворка Laravel — 5.4! В новой версии были добавлены такие возможности, как поддержка Markdown-разметки для формирования электронных писем и уведомлений, улучшена поддержка Redis, добавлены новые возможности шаблонизатора Blade и множество других. Но обо всём по порядку.


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

WebSocket Akka HTTP на практике

Reading time6 min
Views20K
Довольно продолжительное время существовала только одна достойная реализация работы с HTTP поверх Akka — spray. К этой библиотеке пару умельцев написали расширения для WebSocket,
которое было вполне понятно в использовании и проблем не возникало. Но годы шли и spray, в том или ином виде, перекочевал в Akka HTTP с реализованной поддержкой WebSocket из коробки.
Для работы с WebSocket ребята из Akka предлагают нам использовать Akka Stream, тем самым упрощая нам жизнь с потоковыми данными и, одновременно, усложняя ее. Akka Stream не так прост в понимании. Далее я попытаюсь показать базовые практические примеры использования.
Читать дальше →

Пьеса «Технический долг»

Reading time6 min
Views76K

Пьеса «Технический долг» в 9 частях. Ставится и показывается впервые.


Часть 0: В пустой комнате стоят Разработчик (Р) и Менеджер (М).

М: Я собрал нас тут, чтобы рассказать пренепреятнейшее известие: система КРОТОПОН, которая работает на продакшане заглючила и мы потеряли кучу денег. Кроме того нет никого, кто знает как она работает. Поэтому (с придыханием) наш СЕО дал мне священную миссию — написать новую систему. Как ты думаешь, за два месяца справишься?

Р: А что делать-то нужно?

М: Да там немного, всего лишь пару десятков систем связать и рюшечки навесить.

Р: Эй, да это же на год работы! И вообще требования будут?

М: (В телефон) Да, конечно, за пол года справимся. (Разработчику) Ну ты тут пока начинай, а я тебе требования потом донесу.

Менеджер уходит.

Р: Но тут же…

Разработчик тяжело вздыхает, затаскивает в комнату инструменты и начинает что-то сооружать.
Читать дальше →

Серьезное проектирование серьезных сайтов. Часть 2. Визуализация

Reading time15 min
Views29K
Это вторая часть статьи про проектирование больших сайтов. В ней мы расскажем про визуальную часть проектирования, про интерфейсы. Если вы не читали первую часть, то рекомендую это сделать тут.

Динамический прототип



Рис. 9. Демонстрация динамического прототипа для проекта «Маркетплейс».

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

Серьезное проектирование серьезных сайтов. Часть 1. Аналитика

Reading time25 min
Views41K
Почти 4 года назад мы написали одну из самых популярных статей в рунете про проектирование больших проектов с таким же названием, как и эта: часть 1 и часть 2. Только на Хабре её прочитало более 170 тыс. человек, а вообще она публиковалась в самых разных изданиях мира. Более 1000 стартапов использовали наработки из этой статьи для проектирования, и это только те, о которых я слышал и которые нам писали. Но время не стоит на месте, а мы постоянно развиваемся. С тех пор наша технология проектирования значительно эволюционировала и стала еще лучше. В этой статье мы опишем нашу обновленную технологию проектирования и покажем много живых примеров для каждой стадии.

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


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

Конец халяве: I Know What You Download

Reading time6 min
Views303K
Продолжение (часть 2).
Не понимаю, почему никто не кричит «полундра» (поискал здесь и на Хабре по слову «iknowwhatyoudownload», но ничего).

Итак, некий сайтик iknowwhatyoudownload.com по IP-адресу показывает список торрентов, скаченных и розданных с этого адреса.
Судя по всему, запустились недавно. Домен зарегистрирован 14 сентября 2016. Отображается статистика примерно за месяц. Но как долго она собиралась, неизвестно.
Читать дальше →

Экзотичные заголовки HTTP

Reading time12 min
Views113K

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

Покрываем проект smoke-тестами, пока он не сгорел

Reading time9 min
Views49K

Привет, Хабр! Как-то раз на нашем внутреннем семинаре мой руководитель – глава отдела тестирования – начал свою речь со слов «тестирование не нужно». В зале все притихли, некоторые даже пытались упасть со стульев. Он продолжил свою мысль: без тестирования вполне возможно создать сложный и дорогостоящий проект. И, скорее всего, он будет работать. Но представьте, насколько увереннее вы будете себя ощущать, зная, что продукт работает как надо.

В Badoo релизы происходят довольно часто. Например, серверная часть наравне с desktop web релизится дважды в день. Так что мы не понаслышке знаем, что сложное и медленное тестирование – камень преткновения разработки. Быстрое же тестирование – это счастье. Итак, сегодня я расскажу о том, как в компании Badoo устроено smoke-тестирование.
Читать дальше →

Как научить веб-приложение говорить на 100 языках: особенности локализации

Reading time11 min
Views20K


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

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

Миллион строк в секунду из Postgres с помощью Python

Reading time4 min
Views56K
image

asyncpg — новая Python open-source библиотека для работы с PostgreSQL. Она была написана с использованием asyncio и Python 3.5. asyncpg — самый быстрый драйвер для работы с PostgreSQL среди похожих реализаций на Python, NodeJS и Go.

Почему asyncpg?


Мы создаем EdgeDB — базу данных нового поколения, с PostgreSQL на бэкенде. Нам необходима высокая производительность, низкая задержка доступа и дополнительные возможности самого PostgreSQL.

Самый очевидный вариант – использовать psycopg2 — популярнейший драйвер Python для работы с PostgreSQL. У него отличное комьюнити, он стабильный и проверенный временем. Также есть aiopg, который реализует асинхронный интерфейс, поверх psycopg2. Тогда очевиден вопрос — зачем писать свой велосипед? Короткий ответ: производительность и поддержка возможностей PostgreSQL. Ниже мы рассмотрим это более детально.
Читать дальше →

Как стать Oracle Certified Professional Java SE 8 Programmer

Reading time7 min
Views95K
В этой статье речь снова пойдет о сертификации. Не так давно я рассказывал о процессе получения сертификата от компании Google для Android разработчиков. Почитать об этом можно вот здесь. В статье я периодически приводил сравнение с процессом получения сертификатов от Oracle. Немного подумав, я решил раскрыть эту тему подробнее, благо сертификат от Oracle я получил полгода назад и еще не все забыл. Естественно, на хабре уже не раз описывали этот процесс. Например, достаточно подробные описания можно найти тут и тут. Однако, указанные статьи были написаны несколько лет назад, и затрагивают Java SE 7. Я же постараюсь сосредоточиться на особенностях экзамена по Java SE 8 и в принципе обновить информацию по процессу получения сертификата. Тех, кому все еще интерсено, прошу под кат.
Поехали

Information

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