Pull to refresh
2
0
Send message

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

Reading time6 min
Views10K

Куча (heap) — это не что иное, как двоичное дерево с некоторыми дополнительными правилами, которым оно должно следовать: во-первых, оно всегда должно иметь структуру кучи, где все уровни двоичного дерева заполняются слева направо, и, во-вторых, оно должно быть упорядочено в виде max-кучи или min-кучи. В качестве примера я буду использовать min-кучу.

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

Читать далее

Ретрожелезо в фильме «Брат»

Reading time8 min
Views48K
«Брат» Алексея Балабанова не является моим любимым фильмом в смысле «часто пересматриваю с семьей». Безусловно талантливое кино настолько хорошо передает пасмурную эпоху середины девяностых, что смотреть его попросту больно. Дело даже не в сюжетной канве, не в героях и смысле их поступков, а в деталях. Когда понимаешь, что у тебя в комнате были похожие обои, а у дедушки стояла такая же радиола. Атмосфера «Брата» — она про приход новых времен, ценностей, вещей и людей. Даже если перемены безусловно к лучшему (а не как в фильме) — все равно немного жаль. Через 23 года после премьеры фильм сам по себе стал капсулой времени, зафиксировал какую-то условную реальность, которая местами очень хорошо резонирует с моими собственными воспоминаниями. Точно могу сказать, что мне повезло, и мои девяностые были лучше, чем в кино.


Но есть еще один момент: если отвлечься от кровавой драмы, замечаешь как плотно в сюжет «Брата» интегрированы актуальные на тот момент технические новинки. Анализировать такое — все равно, что идентифицировать марки машин и модели будильников в фильме «Назад в будущее». Занятие несколько странное, но вполне имеющее право на жизнь, а у таких людей, как я, вообще основное. Недавно я пересмотрел «Брата» на быстрой перемотке, по возможности постарался определить модели попадающих в кадр устройств, а на основе этого сделать выводы, абсолютно никак не влияющие на впечатление от фильма. Переиздание фильма в HD доступно на Ютюбе, скриншоты взяты оттуда. Началось все с простого вопроса: а какой у Данилы Багрова был CD-плеер?
Читать дальше →

Заклятые друзья навсегда: Google, Facebook, Amazon, Apple и Microsoft

Reading time7 min
Views10K

Когда деревья были большими, компания Amazon.com Inc. продавала только книги, Apple Inc. продавал компьютеры, а Google был просто поисковиком. Те времена давно прошли, и каждая из этих компаний, а ещё Microsoft и Facebook в придачу, стала технологическим гигантом.

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

Читать далее

Самый крупный и циничный побор в истории человечества оказался в цифровой отрасли, долгие годы маскируясь под безобидный

Reading time7 min
Views15K
Этот побор уже перевалил отметку в 150 млрд. $. причем на пустом месте. Но главная его фишку в том, что он потенциально безграничен к увеличению как во времени так и в объеме.
Все мы знаем о больших ограблениях, об очень больших ограблениях. Но какое из известных ограблений не взять в прошлом, там везде объемы грабежа конечны. Но вот пришла эпоха компьютеров и интернета, и произошло (началось) самое колоссальное ограбление, которое длится уже многие годы, и потенциально бесконечно. Многие знают об этом ограблении, которое бесконечно по масштабам, а по циничности на уровне преступления против человечности, но почти никто не придает ему никакого значения.
Читать дальше →

Предварительная оптимизация — корень всех зол?

Reading time6 min
Views15K


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


Оригинальная статья Кнута


Конечно, Кнут не нуждается в том, чтобы его кто-то защищал. В самом деле, кто такой Кнут, а кто такой я? Однако моя цель — не защита Кнута, а защита здравого смысла.


Оказывается, что контекст статьи очень важен. Поэтому приведу ссылку, чтобы читатель мог самостоятельно ознакомиться с оригиналом статьи: http://cowboyprogramming.com/files/p261-knuth.pdf


Итак, перед нами статья 1974 года Стенфордского Университета под названием “Структурное программирование с оператором GOTO” (здесь и далее перевод авторский). Меня еще не было, а статья уже была. Я подозреваю, как и многих из вас, читающих статью.

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

$mol_strict: Как же меня [object Object] этот ваш undefined NaN

Reading time5 min
Views6.9K

Здравствуйте, меня зовут Дмитрий Карловский и я… не прощаю ошибок. Как только вижу оную — тут же бросаю что-нибудь исключительно тяжёлое. И как же тяжела работа программиста на JS...


class Foo extends Object {
    get name(){ return 'Jin' }
}
const foo = new Foo

`Здравствуйте, ${ foo }!`
// "Здравствуйте [object Object]!"

`В этом месяце вы заработали ${ foo / 1000 } тысяч рублей.`
// "В этом месяце вы заработали NaN тысяч рублей."

`Ваша цель "${ 'foo'[4] }" наконец-то достигнута.`
// "Ваша цель "undefined" наконец-то достигнута."

`Осталось ещё ${ foo.length - 1 } целей и вы достигнете успеха.`
// "Осталось ещё NaN целей и вы достигнете успеха."

foo.__proto__= { name: 'придурок' };
`До скорых встреч, ${ foo.name }.`
// "До скорых встреч, придурок."

Облегчить его страдания можно разными путями..


  1. Прикрыться тайпскриптом. Но в рантайме ноги всё равно остаются босыми, и на них кто-нибудь вечно наступает.
  2. Обложиться проверками. Но чуть замешкаешься и рантайм грабли тут же бьют по голове.
  3. Исправить JS. Даже не надейтесь.
  4. Исправить JS рантайм. Ну, давайте подумаем..
Читать дальше →

Наука в мире животных: как и почему летают пчелы и шмели

Reading time4 min
Views63K

В 2007 году появился фильм «Bee Movie», посвященный насекомым. Фильм неплох, но в нем прозвучало мнение, что пчелы, согласно принципам авиации, не должны летать, но летают. Это мнение быстро распространилось, и его принялись повторять на все лады журналисты, популяризаторы науки и обычные люди. Справедливости ради стоит заметить, что заблуждение о невозможности полета пчел и шмелей существовало задолго до фильма — где-то с начала XX века.

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

Персональный интернет-архив без боли

Reading time4 min
Views17K


Каждый веб-разработчик, да и многие пользователи рано или поздно сталкиваются с Internet Archive и необходимостью сохранить или восстановить вид важного им сайта в определённое время. С каждым годом всё очевиднее, что поговорка «интернет помнит всё» ошибочна — форумы закрываются, старые сайты тихо исчезают, информация пропадает без следа (вот хорошая статья по теме). При этом пока не существует общепринятого способа на лету сохранять важный контент без лишних телодвижений (представьте, что будет с серверами archive.org, если, скажем, в следующем обновлении Chrome будет при загрузке страницы отправлять адрес на архивацию). Спасение утопающих — дело рук самих утопающих, поэтому в этой статье мы разберём инструмент, позволяющий не просто сохранять нужные сайты, но и встраивать этот процесс в повседневную работу.

Python & EEL. Делаем просто на Python’е и красиво на JS

Reading time5 min
Views61K

Тема красивых интерфейсов была и будет актуальна всегда, кто-то использует для создания графических приложений C#, кто-то использует Java, кто-то уходит в дебри C++, ну а кто-то извращается с Python, используя tkinter или PyQT. Существуют различные технологии, позволяющие совмещать красоту графических дизайнов, создаваемых на HTML, CSS и JS с гибкостью в реализации логики приложения, которую может дать другой язык. Так вот, для тех, кто пишет на самом лучшем языке программирования Python, есть возможность писать красивые интерфейсы на HTML, CSS и JS и прикручивать к ним логику на Python.

В этой статья я хочу показать на небольшом примере, как же все таки создать простое и красивое десктопное приложение на HTML, CSS, JS и Python. В качестве библиотеки для связи всех компонентов будем использовать EEL.

Читать далее

Фрактальный state-менеджер на генераторах*

Reading time14 min
Views6.4K


По некоторым источникам еще в IV до нашей эры Аристотель задался одним простым вопросом — Что было раньше? Курица или яйцо? Сам он в итоге пришел к выводу, что и то, и другое появилось одновременно — вот это поворот! Не правда ли?


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


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


Сегодня я не буду терзать ваш разум водопадом отборного бреда. Выпуск будет чуть суровее — ибо лирики меньше, а кода больше. Тем не менее местами он будет вкуснее — ибо вишенки я вам приготовил отменные. Поехали?

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

Почему стоит использовать exa вместо привычной консольной утилиты ls

Reading time3 min
Views24K

Изображение: Opensource.com

Цель автора статьи — показать, что exa может легко заменить стандартную утилиту ls. И более того, в сравнении с ls, exa — более гибкий и мощный инструмент.

Стараясь сэкономить время и силы, мы автоматизируем часто повторяющиеся и сложные операции. Например, для отслеживания изменений содержимого каталогов и информации о файлах в Linux-системах многие по-прежнему используют команду ls. Но вывод ls по умолчанию [по мнению автора] не совсем приятен для глаз, поэтому приходится выкручиваться. При работе с ls возникает ещё ряд неудобств, но в этой статье мы не будем про них говорить. И вообще, зачем тратить на это время, если есть exa?
Читать дальше →

Один бинарник, любое окружение. Магия чистого C

Reading time5 min
Views35K


Как мы представляем себе кроссплатформенность? Мы пишем программу на языке, который либо компилируется в исполняемый файл отдельно для каждой поддерживаемой платформы, либо использует разновидность виртуальной машины вместо бинарника (и тогда эта среда должна присутствовать в целевых системах). Есть также и низкоуровневые языки, на которых писать серьёзные программы менее удобно, чем на высокоуровневых монстрах со своими компиляторами или рантаймами, но зато такие программы менее требовательны к предустановленному софту или наличию ОС в принципе, как и менее разборчивы в архитектуре. И всё же, есть возможность писать один и тот же код и собирать один и тот же бинарь под все популярные архитектуры и ОС (и даже bare metal), и эта возможность появилась благодаря гениальной Justine Tunney. Она написала Cosmopolitan, библиотеку на C, позволяющую исполнять один и тот же код на любой машине, подобно Java… но без какого-либо предустановленного интерпретатора или виртуальной машины! Один и тот же скомпилированный файл может исполняться как минимум в любом дистрибутиве Linux, на Mac OS, Windows NT, FreeBSD, OpenBSD, и NetBSD и на bare-metal на x86 и ARM*. Это настоящая магия.

От кнопок к струнам: умная гитара для всех

Reading time6 min
Views15K

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

Читать историю

Еще один подход к построению архитектуры на фронте

Reading time11 min
Views9.5K

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

В рамках статьи я постараюсь просто рассмотреть и дать ответы на следующие темы:

что такое архитектура и почему она должна быть чистая;

как написать архитектуру, которая основана на сервисах;

пример построения архитектуры для приложения заметок;

интеграция архитектуры с реактом.

Читать далее

14 полезных инструментов, ускоряющих и упрощающих веб-разработку

Reading time4 min
Views35K
Я занимаюсь разработкой сайтов уже много лет и не верю в то, что если буду держать в секрете используемые мной инструменты, это даст мне серьёзное преимущество на рынке труда.

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



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

Wasp — DSL для разработки веб-приложений

Reading time4 min
Views4.6K


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

Очередной гайд по HTML-элементам, которые можно использовать в каждом проекте

Reading time6 min
Views22K
В сети существует множество гайдов, которые описывают назначение HTML-элементов. Но сколько я не проводил собеседований или не проверял код, я вижу одну картину. Разработчики используют ограниченный набор элементов.

Для исправления этой ситуации я взял следующие элементы: header, nav, main, section, article, aside, address, и покажу, как их использовать.
Читать дальше →

Смотрим любое кино мгновенно

Reading time2 min
Views161K

После ареста серверов Moonwalk жить стало в разы труднее. Лично я уже совсем отвык от торрентов. Нужно что-то качать, ждать, чем-то открывать, куда-то кликать, иногда еще и место на диске кончается. Как можно ждать час пока скачается фильм? За час можно жизнь прожить. Пришлось искать решение, которое позволит смотреть кино также просто, как и раньше. Норматив: от идеи посмотреть что-нибудь до начала просмотра - не более минуты.

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

Читать далее

Битсквоттинг сайта Windows.com

Reading time7 min
Views17K


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

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

01110111 01101001 01101110 01100100 01101111 01110111 01110011
w i n d o w s

Теперь представим, что компьютер перегрелся, произошла вспышка на Солнце или космический луч (вполне реальная штука) инвертировал в компьютере значение одного бита.

01110111 01101000 01101110 01100100 01101111 01110111 01110011
w h n d o w s

О нет! Теперь в памяти хранится значение whndows.com, а не windows.com! Что же произойдёт, когда придёт время создания подключения к этому домену?

nslookup whndows.com

*** can’t find whndows.com: Non-existent domain

Домен не резолвится в IP-адрес!
Оказалось, что из 32 возможных доменных имён, находящихся в одной замене бита от windows.com, 14 имён были доступны для покупки! Это довольно редкий случай — обычно такие имена покупаются компаниями, например, Microsoft, чтобы предотвратить их использование в целях фишинга. Итак, я их купил. Все. Примерно за 126 долларов.
Читать дальше →

Скринкаст терминала с помощью asciinema

Reading time4 min
Views5.6K


Вы наверняка знакомы с asciinema (github), это удобный опенсорсный инструмент для записи действий в терминале. Записи сохраняются в простом для чтения текстовом формате, поэтому весят совсем немного, а веб-плеер по сути воспроизводит текст из терминала вместо видео, так что любой кусок можно скопировать и использовать. Готовый материал можно загрузить в одно нажатие на asciinema.org или сначала отредактировать локально. Плеер можно встроить на сайт буквально в три строки, бонусом прилагаются всякие плюшки с оформлением и совместимостью, и вообще по совокупности всех фич (и отсутствия головной боли) asciinema давно перерос все аналоги. Вот только есть несостыковка: записи в проекте называют asciicasts, по аналогии со скринкастами — но возможности стримить сессию в реальном времени не было несколько лет, пока не вышел релиз 2.0, в котором с помощью нового формата файлов удалось реализовать на удивление стабильную и удобную раздачу на любой терминал в реал-тайме. О том, как это работает, о подводных камнях и перспективах — под катом.
Читать дальше →

Information

Rating
6,111-th
Registered
Activity