Search
Write a publication
Pull to refresh
-4
@v3y7read⁠-⁠only

User

Send message

Строки кода, которые изменили мир

Reading time13 min
Views52K
image

{"__typename":"PageLikeAction","action_type":"LIKE","label":{"text":"Like"}


В 2009 году Facebook добавила в интерфейс своей социальной сети код, изменивший мир — кнопку «Like». «Лайк» был детищем нескольких программистов и дизайнеров — Лии Перлман и Джастина Розенштейна. Они предположили, что пользователи Facebook часто бывают слишком заняты, чтобы оставлять комментарии к постам своих друзей, и что поэтому им нужна простая кнопка, нажав которую можно было бы дать понять друзьям, что их пост вам понравился. Так оценивать и поощрять друг друга пользователям стало бы легче, а значит и делали бы они это чаще.

Это сработало — и даже слишком хорошо. К 2012 году пользователи прожали «лайк» триллион раз. У этого оказались и побочные эффекты. Многие стали публиковать фото/видео, чтобы потом сидеть и с тревогой обновлять страницу, ожидая, когда же число лайков возрастёт. Все стали гадать, почему кто-то другой получает больше лайков. Люди подсели на иглу одобрения (вместо того, чтобы сесть на чьё-то лицо), что отразилось на их повседневной онлайн-активности: старались публиковать как можно больше постов, чтобы казаться смешнее, умнее, красивее, спортивнее.

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

Распределённая трассировка с помощью Jaeger

Reading time5 min
Views5.1K

Частая проблема при разработке распределённых систем состоит в следующем. Предположим, вы отправили системе запрос, и этот запрос обрабатывается очень долго. При этом внутри системы он распадается на запросы к нескольким внутренним микросервисам, которые могут превратиться в несколько подзапросов и выполняться параллельно. Как в этом случае определить, что тормозит систему? На помощь приходит Jaeger — сервис для сбора и отображения трейсов в распределённых системах. 

Читать далее

Петропавловск-Камчатский: агломерация стратегического значения

Reading time18 min
Views15K

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

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

Анатомия игры: строение файловой системы на примере Elden ring и не только

Reading time17 min
Views15K


Добрый день, уважаемые хабражители. С вами снова Людмила Хигерович. Но сегодня мы не будем говорить непосредственно о 3D-модельках и тонкостях моделирования. Вместо этого немного отвлечемся и познакомимся с устройством архивов одной из самых популярных игр этого года и номинанте на премию Game of the year — Elden Ring, а также сравним её строение с другими играми.

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

Добавим динамическую среду в C: мой проект компоновщика

Reading time8 min
Views2.2K

Я пишу компоновщик (linker). Не совсем обычный. Он ориентирован не на создание исполняемых файлов, а на облегчение быстрой итерации программы без необходимости в перекомпоновке (re-link) и повторном открытии после внесения изменений. Это «горячая загрузка» кода с детализацией. Подробности — к старту курса по разработке на С++.

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

React: работа с 3D-графикой

Reading time8 min
Views17K


Привет, друзья!


В данном туториале я покажу вам самый простой и быстрый, хотя и не очень оптимальный с точки зрения размера сборки, способ рендеринга 3D-объектов и моделей в React.


Мы решим 3 интересные задачи:


  • рендеринг самописного 3D-объекта;
  • рендеринг готовой 3D-модели;
  • совместный рендеринг объекта и модели.

Знание вами основ работы с трехмерной графикой в браузере является опциональным.


Источником вдохновения для меня послужила эта замечательная статья.


Если вам это интересно, прошу под кат.

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

Терабайты в кармане, или Apple Silicon Air для Big Data

Reading time11 min
Views3.4K

Думаете, Apple Silicon Air и iMac выглядят совсем уж "не серьезно" для задач обработки многотерабайтных данных? Я сам так и думал, к счастью, реальность оказалась намного интереснее. Давайте посмотрим на топовые Apple Silicon M1 iMac и M2 Air на примерах работы с данными спутниковой интерферометрии (мое хобби и, порой, работа).


PyGMTSAR Jupyter notebooks

Ниже есть ссылки на образы Docker, так что все результаты легко воспроизвести на разных операционных системах и устройствах.


Попробуйте сверхбыстрый хостинг в России от AdminVPS

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

Вся правда о кубах данных OLAP: развенчиваем мифы

Reading time4 min
Views65K


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

Как самому за один вечер собрать минимальную ОС Linux из исходного кода

Level of difficultyMedium
Reading time11 min
Views107K
image

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

Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.

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

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

Меняем CoffeeScript на ES6

Reading time3 min
Views32K
Спешу предположить, что вы наслышаны о ES6 и, возможно, успели попробовать её. Тогда вам наверняка покажется интересной заметка о некоторых фичах спецификации, опубликованная Блейком Уильямсом в блоге Thoughtbots. Я же, с позволения автора, публикую перевод.

Последнее время я смотрел в сторону спецификации ES6, это следующая версия JavaScript, и наконец мне представилась возможность использовать её в проекте. За недолгое время использования я понял, что она решает множество проблем, которые пытается решить CoffeeScript, но без радикальных изменений синтаксиса.

ES6 сегодня


Вы можете начать писать на ES6 прямо сейчас, используя транслятор в ES5 6to5. 6to5 поддерживает достаточно много инструментов сборки, в их числе: Broccoli, Grunt, Gulp и Sprockets. У меня всё прекрасно работало со sprockets-es6, а 4.x Sprockets будут поддерживать 6to5 из коробки. Также вы можете попробовать ES6 прямо в браузере в 6to5 REPL.
Читать дальше →

Как Unicorn и Puma взаимодействуют с nginx. Введение в UNIX сокеты с помощью Ruby

Reading time5 min
Views4.2K

Ruby приложения обычно используются вместе с веб сервером типа nginx. Когда пользователь запрашивает страницу вашего Rails приложения, nginx делегирует запрос серверу приложения. Но как именно это работает? Как nginx общается с Unicorn?

Одним из наиболее эффективных способов будут Unix сокеты. Давайте посмотрим как они работают! В этом посте мы начнём с основ Unix сокетов и закончим созданием своего простого Ruby приложения, которое может быть проксировано nginx.

Читать далее

Игровой программный рендеринг в 2022-м году

Reading time28 min
Views28K


Программный рендеринг был широко распространён в играх на ПК до повсеместного распространения т. н. 3d-ускорителей (видеокарт). Каждая игра содержала свой собственный код рендеринга, каждая игра имела свои уникальные особенности в нём. Но с распространением видеокарт программный рендеринг в играх умер.


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

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

Node.js for ruby developers

Reading time12 min
Views1.5K

Можно ли, зная Ruby, писать код на Node.js? А можно ли с командой Ruby-разработчиков успешно поддерживать и развивать большой легаси монолит на ноде? Можно! А как, расскажет Дмитрий Матвеев, СТО «Поток.Диджитал» и спикер Ruby Russia 2022.

Интересно, а что там дальше?

Взлёт и падение «Живого Журнала». Часть 1: как ЖЖ родился и стал русскоязычным

Reading time9 min
Views33K

Мёртвый ЖЖ стал мемом ещё десять лет тому назад. Платформа технически продолжает жить и здравствовать, там по сей день есть читаемые и популярные блоги, но эпоха «Живого Журнала» как главной дискуссионной площадки рунета безвозвратно ушла в прошлое. А ведь было, было время!

Именно там кипели бурные страсти и жуткие ср*чи, рождались мемы и дискурсы, вспыхивали звёзды знаменитых блогеров и афедроны комментаторов. Кащениты тгавили пейсателя, падонки учили олбанскей, аффтарами писались тонны лытдыбров, а с многострадальным головным убором Антона Носика чего только ни происходило.

ЖЖызнь кипела во всех формах и расцветках — и казалось, не будет этому конца и края. Конец таки пришёл куда быстрее, чем можно было предположить, но ЖЖ остался в сердцах ветеранов рунета и в истории его развития.

Смахнув скупую слезу ностальгии, попробуем вспомнить некоторые из славных и не очень страниц истории русскоязычного LiveJournal.
Читать дальше →

Релиз InvokeAI 2.2: универсальный холст, удобные установщики, автозагрузка моделей и DPM++

Reading time3 min
Views7.4K

Привет! InvokeAI 2.2 теперь доступен для всех. В этом обновлении добавлены UI Outpainting, Embedding Management и другие функции. Ознакомьтесь с выделенными обновлениями ниже, а также с полным описанием всех функций, включенных в релиз.

Что нового?

Бесполезный и красиво ужасный язык программирования ALLang

Reading time12 min
Views5.9K

Примерно год назад я писал язык программирования под названием ALLang. Расшифровка его звучит так: Another LISP Language, что незамысловато даёт понимание его второсортности. Тем не менее, таковой язык всё же предлагает интересные особенности в своей реализации со стороны эзотерических языков.

Читать далее

Rust: параметризуем мутабельность через маркеры и ассоциированные типы

Reading time7 min
Views5.1K

КПДВ: borrow checker не даёт стрелять в ногу при работе с FFI


Borrow-checker — отличный секюрити, который очень эффективен, если мы находимся в безопасном Rust. Его поведение отлично описано в RustBook, и, по крайней мере, я почти никогда не сталкиваюсь с придирками, которым я бы не был благодарен.


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


На английском, с примерами — на GitHub pages.


Исходник тестов — на GitHub.

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

SAST для самых маленьких. Обзор open-source инструментов поиска уязвимостей для C/C++

Reading time33 min
Views26K


Привет, Хабр!


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

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

Пишем собственную тему для Visual Studio Code

Reading time7 min
Views16K

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

В этой статье пройдемся по полному циклу создания собственной темы для VS Code, познакомимся с полезными инструментами, которые упростят работу, и опубликуем готовую тему в Visual Studio Code.

Читать далее

Проектируем интерфейс оформления заказа: выбор адреса и времени доставки. 162 гайдлайна

Reading time18 min
Views7.1K

Оформление заказа – один из последних шагов на пути клиента к покупке в интернет-магазине, и на этом шаге лучше не ставить ему палки в колеса.

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

Разберем в этой статье. Как всегда, детально и с примерами.

Читать далее
1
23 ...

Information

Rating
Does not participate
Registered
Activity