Pull to refresh
135
0
Александр Борзунов @hx0

User

Send message

Хабрасливки: золотые посты «Хабрахабра» и Geektimes

Reading time15 min
Views43K
Прошлый топ статей Хабра/ГТ было интересно почитать, но не всех он обрадовал: кому-то показалось удивительным, что рейтинг по количеству просмотров состоит в основном из попсовых материалов. Но идея сделать более хардкорный топ меня всё-таки захватила достаточно, чтобы попытаться отсортировать все посты Хабра и ГТ по качеству. Я по-прежнему считаю, что лучше всего с этой задачей справится нейросеть, и наверное это можно сделать уже сейчас, если потратить достаточно много времени, показывая ей разные статьи с пометкой «торт/не торт», но пока я выбрал подход чуть попроще и с использованием имеющихся данных.

У рейтинга по просмотрам есть очевидные недостатки: публичный счётчик на Хабре появился только в 2012 году, да и большая чать просмотров приходит из поиска, и это абсолютно случайные люди. Очевидно, что качество статей Хабра должны оценивать сами хабрапользователи, поэтому подборка должна быть основана на оценках постов. Для выбора «золотых постов Хабра» я использовал хорошо зарекомендовавшую себя знакомую по Dirty.ru и ещё одному ресурсу систему определения золотых постов как публикаций, не менее 98% голосов за которые положительны.

  1. «Делаем приватный монитор из старого LCD монитора», kfedorov — 1484 проголосовало, 18 отрицательно (2011)
  2. «История игрушки. Поле Чудес», PapaBubaDiop — 933 проголосовало, 10 отрицательно (2011)
  3. «Как мы искали Марс-3», Zelenyikot — 677 проголосовало, 8 отрицательно (2013)
  4. «Читаем QR код», tgx — 621 проголосовало, 9 отрицательно (2011)
  5. «Бейджи для Хабра, версия», idenisenko — 562 проголосовало, 10 отрицательно (2011)
  6. «Загадка выпадающего списка «Амазона»», atomlib — 558 проголосовало, 10 отрицательно (2013)
  7. «Как я наказал Firaxis или история о том, как перебрать бинарный движок через глушитель», Harkonnen — 551 проголосовало, 4 отрицательно (2010)
  8. «Банкомат. Некоторые особенности», UserSide — 548 проголосовало, 6 отрицательно (2014)
  9. «Взгляд изнутри: светодиодные лампочки», Tiberius — 542 проголосовало, 5 отрицательно (2011)
  10. «Самодельный трекинг посылок, или Туда и Обратно», legrus — 533 проголосовало, 1 отрицательно (2013)

Читать дальше →
Total votes 48: ↑39 and ↓9+30
Comments29

Первые слова крупных проектов

Reading time5 min
Views40K


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

Спустя много лет интересно взглянуть, как начинались некоторые популярные ИТ-проекты.
Читать дальше →
Total votes 58: ↑46 and ↓12+34
Comments42

Наблюдение об интернационализованных доменных именах и букве K

Reading time2 min
Views30K
Наверняка многие используют или слышали про про интернационализованные доменные имена (IDN) — доменные имена, состоящие из символов национального алфавита, например тест.рф. Так же многие знают что латиница и кириллица имеют визуальные схожие символы, например латинская “a” и кириллистическая “а” выглядят одинаково, однако имеют разные коды, т.e. !“a”.equals(“а”). В этой статье речь пойдет о доменных именах которые выглядят очень схоже благодаря одной букве К. В будущем этой схожестью могут воспользоваться злоумышленники, поэтому чтобы избежать этого я хочу рассказать об одном своем наблюдении из области интернационализованных доменных имен.
Читать дальше →
Total votes 85: ↑82 and ↓3+79
Comments25

Квантовые коммуникации: от НИР до технологического бизнеса

Reading time7 min
Views24K

Ссылка на изображение

Проблема, связанная с защитой персональной информации, передаваемой по публичным телекоммуникационным каналам, на сегодняшний день представляет большой интерес. Возможности высокоскоростных компьютеров и квантовых компьютеров, интенсивно развивающихся последнее время, значительно упростили процесс расшифровки информации. К примеру, с взломом 1024-битного шифрования RSA процессор Pentium 4 управился чуть более чем за 104 часа.

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

А теперь представьте себе такую линию связи, которую невозможно прослушать никакими способами, поскольку это противоречит законам физики. Что бы ни пытался предпринять злоумышленник, у него не получится перехватить передаваемую информацию. Такие устройства для передачи данных, использующие принципы квантовой криптографии, создаются в ООО «Квантовые коммуникации» – малом инновационном предприятии при Университете ИТМО.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments6

Непересекающиеся множества и загадочная функция Аккермана

Reading time14 min
Views38K
Речь пойдёт о простой структуре данных — системе непересекающихся множеств. Вкратце: даны непересекающиеся множества (например, компоненты связности графа) и по двум элементам x и y можно: 1) узнать, находятся ли x и y в одном множестве; 2) объединить множества, содержащие x и y. Сама структура очень проста в реализации и описывалась много раз в различных местах (например, есть хорошая статья на хабре и ещё кое-где). Но это один из тех удивительных алгоритмов, написать который ничего не стоит, а вот разобраться, почему он работает эффективно совсем нелегко. Я постараюсь изложить относительно простое доказательство точной оценки на время работы этой структуры данных, придуманное Зейделем и Шариром в 2005 (оно отличается от того ужаса, который многие могли видеть в других местах). Конечно, сама структура тоже будет описана, а попутно разберёмся причём здесь обратная функция Аккермана, о которой многие знают только, что она оооочень медленно растёт.
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments3

Kotlin ❤ FP

Reading time11 min
Views32K
Предлагаю читателям «Хабрахабра» вольный перевод статьи «Functional programming in Kotlin». Автор публикации — Mike Hearn.

image

Те, кто используют .NET, наверняка слышали про F#, универсальный функциональный язык программирования для CLR. Программисты же вне .NET сообщества скорее всего знают про функциональное программирование в связи с языком Haskell.

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

Язык Kotlin (kotlinlang.org) от JetBrains может показаться всего лишь подслащенной Java: синтаксические конвенции, автовывод типов (type inference) и тому подобные мелочи. Но под незамысловатой оболочкой в нем можно найти все самые популярные и прогрессивные конструкции функциональных языков.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments36

Мифы и рецепты Docker

Reading time5 min
Views90K
Вокруг постоянно говорят про Docker. Я знаю что вы отвечаете: «Это что-то про контейнеры, виртуализацию, облака», «У нас все и так работает», «Это все баловство», «Он не запустится на нашем старом ядре линукса», «Точно так же можно подготовить образ для облака и запустить его», «Можно просто настроить LXC, chroot или AppArmor». Вы знаете, что он вам не нужен. Очередная модная штука. В конце концов, просто лень разбираться. Но любопытно! Тогда, читайте. Это серия из шести заметок.

Если вы не слышали о контейнерах в Линуксе, вот список страниц, которые надо прочитать, чтобы понимать о чем речь:


Поставьте Docker, он небольшой. Для Windows и Mac можно просто поставить Toolbox: www.docker.com/toolbox. Создавать виртуальную машину и настраивать лучше из командной строки, а не через графическую обертку. Прочитайте несколько уроков из мануала. Здесь я пишу о том, чего в документации нет.

Docker — это не виртуализация.


Вот какой у меня линукс:

Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)

Last login: Tue Aug 18 00:43:50 2015 from 192.168.48.1
gri@ubuntu:~$ uname -a
Linux ubuntu 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/                                       Linux
gri@ubuntu:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          976M       866M       109M        11M       110M       514M
-/+ buffers/cache:       241M       735M
Swap:         1.0G       1.0M       1.0G

Запускаю CentOS:

gri@ubuntu:~$ docker run -ti centos
[root@301fc721eeb9 /]# uname -a
Linux 301fc721eeb9 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@301fc721eeb9 /]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
[root@301fc721eeb9 /]# free -h
              total        used        free      shared  buff/cache   available
Mem:           976M         85M        100M         12M        790M        677M
Swap:          1.0G        1.0M        1.0G

Docker — это не chroot, их функционал частично совпадает. Это не система безопасности вроде AppArmor. Docker использует те же контейнеры, что и LXC, но интересен он не контейнерами. Docker — это ничего из того, что я думал о нем до того, как прочитал документацию.

То же ядро, память, файловая система, а дистрибутивы, библиотеки и пользователи — разные.

Docker — это инструмент объекто-ориентированного проектирования


Регулярно возникает вопрос, является ли конфигурация nginx частью веб-приложения. Системные администраторы спорят с разработчиками. Но недавно в мире появились devops и захотели вместо последовательно-процедурного вызова команд из bash думать привычным OOP. Docker дает инкапсуляцию, наследование и полиморфизм компонентам системы, таким как база данных и данные. Это значит, что можно провести декомпозицию всей информационной системы, выделить приложение, web-сервер, базу данных, системные библиотеки, рабочие данные в независимые компоненты, внедрять зависимости из конфигов, и заставить все это работать одной группой, одинаково на разных компьютерах.

Такой подход можно использовать, чтобы снизить потери рабочего времени дорогих front-end разработчиков на настройку базы данных и Nginx. Чтобы уйти от vendor lock-in. Не обломаться когда openssl на сервере не поддерживает cipher, используемый в API госучреждения. Чтобы приложение работало независимо от версии PHP или Python на сервере заказчика. Создавать open source не только в виде кода, но и настройкой пакетов из нескольких приложений, написанных на разных языках, работающих на разных слоях OSI.
Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments99

Лауреаты Шнобелевской премии 2015 года

Reading time4 min
Views41K


17 сентября самые весёлые учёные со всего мира собрались в Гарвардском университете, где прошла церемония вручения 25-й Шнобелевской премии (Ig Nobel или Игнобелевская, Антинобелевская премия).

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

По традиции, на церемонию приехали настоящие нобелевские лауреаты. В этом году их было шестеро, в том числе Дадли Хершбах (Нобелевская премия по химии 1986 года) и Фрэнк Вильчек (Нобелевская премия по физике 2004 года).
Читать дальше →
Total votes 48: ↑44 and ↓4+40
Comments33

Python 3.5; async/await

Reading time5 min
Views276K
Тихо и незаметно (с), вышел Python версии 3.5! И, безусловно, одно из самых интересных нововведений релиза является новый синтаксис определения сопрограмм с помощью ключевых слов async/await, далее в статье об этом.

Поверхностный просмотр «PEP 0492 — Coroutines with async and await syntax» поначалу оставил у меня вопрос «Зачем это надо». Сопрограммы удовлетворительно реализуются на расширенных генераторах и на первый взгляд может показаться, что все свелось к замене yield from на await, а декоратора, создающего сопрограмму на async. Сюда можно добавить и возникающее ощущение, что все это сделано исключительно для использования с модулем asyncio.

Но это, конечно же, не так, тема глубже и интереснее.
Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments26

Почему мы занимаемся переводом книги с английского на площадке GitHub

Reading time3 min
Views19K
Всем привет!

Недавно команда rust_book_ru закончила перевод книги «The Rust Programming Language» на русский язык.



Когда я только присоединился к проекту перевода, начатого kgv, нам несколько раз говорили: «Вы делаете перевод на GitHub? Странные вы, для краудсорсинг-перевода есть другой сервис — вот ссылка». Мы не стали переходить на другие сервисы и в итоге это решение полностью оправдалось.

Я хочу рассказать о том, почему мы всё же разместили книгу на GitHub и почему даже переводчику полезно быть немного программистом.
Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments8

Как компьютер сам свой код улучшал, или программируем процесс программирования

Reading time9 min
Views34K
На носу было придумывание темы для диплома, на кафедре популярностью пользовались различные варианты идей связанных с генетическими алгоритмами, а мне самому хотелось сделать что-нибудь этакое. Так и родилась идея, давшая начало данному проекту, а именно генетическому оптимизатору программного кода.



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

Например вот такая забавная оптимизация набора арифметических инструкций (взятых из какой-то подвернувшейся под руку математической библиотеки), соответствующих формулам: , которая на 6 джаве с выключенным JIT у меня давала около 10% ускорения, при этом на первый взгляд даже не очевидно что эти формулы эквивалентны (ОТКУДА ТУТ OR? ЭТО ВООБЩЕ ЗАКОННО?!), хотя это так. Под катом я расскажу, как именно получались такие результаты и каким образом компьютер придумывал лучший код чем тот, который мог написать я сам.
Читать дальше →
Total votes 45: ↑43 and ↓2+41
Comments39

OpenSource проект может развиваться и приносить прибыль?

Reading time3 min
Views17K
Уже довольно долгое время я задаюсь вопросом: «Может ли в наших суровых реалиях жить и развиваться Open Source проект?». Этот вопрос меня периодически тревожит, так как я сам являюсь автором одного такого проекта — WysiBB. Я задавал подобный вопрос на различных ресурсах, были вопросы и на Тостере. Но по сути все сводилось к тому, что в русскоязычном сегменте интернета не работают кнопки «Поддержать проект», «Пожертвовать» и т.д. и развиваться могут только проекты с огромной аудиторией и/или платными функциями.

image

В чем суть?

Но вот наконец в один прекрасный день, я наткнулся на интересную идею, как можно получать некоторые финансовые вливания в развитие и видеть, какие фичи наиболее востребованы пользователями. Эту идею я увидел на сайте Robomongo(кто не знает, это GUI для MongoDB). И ее суть заключается в следующем: пользователю предоставляется возможность выбрать из списка issues(с джитхаба) наиболее его тревожащую и пожертвовать средства на ее доработку. Когда пользователь делает пожертвование, рейтинг приоритетности этой фичи повышается. Так автор проекта получает средства на свой кошелек и видит какие фичи имеют наивысший приоритет(больше всего пожертвований) и соответственно являются наиболее востребованными. Автор приступает к их разработке в первую очередь, проект развивается, а пользователь получает долгожданную фичу. Мне эта идея понравилась и я решил реализовать подобный механизм на своем проекте, а когда начал работу над этим сервисом, понял что такой сервис может быть полезен не только для меня. Так появился на свет GitFund.
Читать дальше →
Total votes 45: ↑34 and ↓11+23
Comments54

Определяем пользователей VPN (и их настройки!) и прокси со стороны сайта

Reading time6 min
Views169K
W.I.T.C.H.
We can save the day from dark, from bad
There's no one we need


Многие из вас используют VPN или прокси в повседневной жизни. Кто-то использует его постоянно, получая доступ к заблокированным на государственном или корпоративном уровне ресурсам, многие используют его изредка, для обхода ограничений по географическому положению. Как вы можете знать, крупные интернет-игроки в сфере стриминга видео, музыки и продажи игр никогда не любили пользователей, которые легко обходят географические ограничения, разблокируя недоступный в их стране контент, или совершая покупки заметно дешевле. За примерами не нужно далеко ходить: Netflix изменил свое соглашение об использовании, добавив пункт о блокировке VPN, всего 2 месяца назад; Hulu тоже грешил блокировкой пользователей, а Steam вообще подозрительно смотрит на не-русскоязычных пользователей из России. В последнее время, компании пытаются блокировать уже не конкретных пользователей, а сами IP-адреса VPN-сервисов, создавая определенные неудобства уже самому VPN-сервису и его пользователям. Похоже, они не используют никаких спецсредств, а блокируют выборочно и вручную. Хоть я и не поддерживаю какие-либо блокировки вообще, меня заинтересовала техническая часть вопроса: можно ли как-то определить использование прокси-серверов и VPN со стороны сервера, не прикладывая особых усилий?
Можно, при определенных условиях. И достаточно точно.
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments84

В погоне за самим собой, или отличный способ начать свой день

Reading time3 min
Views20K

Перевод поста Mariusz Jankowski "A Rat Race, or a Great Way to Start the Day".
Код, приведенный в статье, можно скачать здесь.
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе.

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

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

Вот изображение с Google Earth, показывающее мой утренний велосипедный маршрут, имеющий расстояние чуть меньше 18 км, пролегающий с востока на запад.


Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments13

Релиз Visual Studio 2015 и .NET 4.6

Reading time6 min
Views96K
Мы рады вам сообщить что Visual Studio 2015 и .NET 4.6 доступны для загрузки. Эти два релиза являются большим шагом вперед и предоставляют разработчикам новые инструменты, которые повышают их производительность и дают возможность создавать различные приложения для множества платформ. Уже сейчас вы можете загрузить Visual Studio 2015 и узнать возможности этого инструментария с помощью 60+ видео.



Читать дальше →
Total votes 54: ↑50 and ↓4+46
Comments71

12 малоизвестных фактов о CSS

Reading time9 min
Views60K
Предлагаю читателям «Хабрахабра» перевод статьи «12 Little-Known CSS Facts (The Sequel)». Она совсем недавно была упомянута в дайджесте интересных материалов из мира веб-разработки и IT.

Update: немного «шлифанул» перевод напильником. Выражаю благодарность всем неравнодушным читателям.
Внимание! Под катом почти 1.5 Мб картинок и много интересных ссылок.

Итак, начнём-с…

1. В свойстве border-radius можно использовать slash-синтаксис.


Об этом уже писалось 4 года назад, но многие новички и даже некоторые опытные разработчики не знают о существовании этой «фишки».

Верите или нет, но следующий код валиден:

.box {
  border-radius: 35px 25px 30px 20px / 35px 25px 15px 30px;
}

Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments21

Про Бурали-Форти, Пуанкаре и то самое определение единицы

Reading time11 min
Views80K
Если вы, уважаемый мой читатель, имеете обыкновение проводить много времени в интернете, вы наверняка уже видели эту картинку с цитатой:

image

Наверняка также вы задавались вопросом: что, чёрт подери, здесь написано? Формула из этой цитаты интересна тем, что у человека, имеющего высшее математическое образование, этот вопрос возникает столь же неумолимо, как и у любознательного семиклассника. У нелюбознательных семиклассников несколько иной круг интересов, выходящий за рамки данной статьи; однако даже они не откажут себе в удовольствии похихикать над «этими чокнутыми ботаниками», или как оно там формулируется на современном молодёжном сленге.

В нижеследующем тексте я раскрою перед вами тайну этого загадочного сочетания символов. Пожалуйте под кат, однако помните поучительную историю о любопытной Варваре, которой на базаре рассказали про парадокс Банаха-Тарского, отчего она сошла с ума, разрезала себе нос на конечное количество частей и склеила из них рогатую сферу Александера.
N.B. Я предупреждал.
Total votes 145: ↑141 and ↓4+137
Comments146

Мужчина с 90-минутной памятью думает, что каждый день — это 14 марта 2005 года

Reading time3 min
Views47K
Думаете, что такое бывает только в кино? Но реальность иногда преподносит такие истории, какие не придумает ни один сценарист.

Десять лет назад 38-летний британец Уильям (в истории болезни он записан как WO, имя вымышленное) служил в армейском подразделении на территории Германии. 14 марта 2005 года он пошёл к стоматологу для выполнения простой операции по пломбированию корневого канала.

В 13:40 ему ввели анестетик. Операцию успешно завершили в течение часа. Казалось бы, всё шло нормально.

Однако следующим утром Уильям проснулся в полной уверенности, что ему нужно к стоматологу. Он не помнил, что уже залечил зуб, и вообще не помнил ничего после 13:40.

Несмотря на многочисленные обследования и разнообразные курсы лечения, состояние Уильяма сохраняется стабильным в течение десяти лет. Каждое утро он просыпается в уверенности, что сегодня — 14 марта 2005 года и ему нужно лечить зуб.
Читать дальше →
Total votes 56: ↑49 and ↓7+42
Comments101

Сравниваем Nim и Rust

Reading time10 min
Views34K
Предлагаю читателям «Хабрахабра» перевод статьи «A Quick Comparison of Nim vs. Rust». Мои замечания будут выделены курсивом.

Rust и Nim — два новых языка программирования за развитием которых я слежу. Вскоре, после моего первого поста о Rust, вышел в свет Nim 0.10.2. Это побудило меня поближе познакомиться с Nim и, естественно, сравнить его с Rust.

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

Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments50

node.js для Java-разработчиков: первые шаги

Reading time9 min
Views94K


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

Ответы на эти вопросы можно при желании легко найти в сети, но придётся перечитать дюжину статей, и на каждый вопрос ответов будет, скорее всего, несколько. Некоторое время назад мне понадобилось написать небольшой туториал по node.js, который бы позволил быстро запустить разработку и познакомить новых программистов в проекте с этой технологией. Рассчитан он на опытных Java-разработчиков, которые и язык JavaScript хорошо знают, но node.js как платформа для бэкэнда для них в новинку.

Думаю, что данная статья будет полезна не только разработчикам из мира Java, но и всем, кто начинает работу с платформой node.js.


Читать дальше →
Total votes 39: ↑26 and ↓13+13
Comments107
1
23 ...

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity