Pull to refresh
10
0
Send message

Как писать хорошие комментарии к коду: «зачем», а не «как»

Reading time4 min
Views13K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Writing good comments: the why, not the how» автора Jack Franklin.

image

Комментирование кода в программистской среде нередко считается пустой тратой времени или неким сигналом о том, что код можно и улучшить. Вот цитата из файла CONTRIBUTING.md, который я нашёл на Гитхабе (и таких примеров очень, очень много):
Комментариев следует избегать. Если ваш код нельзя понять без комментариев, перепишите его так, чтобы он сам себя объяснял.

Я считаю, что в большинстве случаев такой совет будет неудачным и неверным.
Читать дальше →
Total votes 28: ↑26 and ↓2+36
Comments11

Новости недели: корпоративный блокировщик рекламы в Chrome, ФСБ и ключи шифрования «Яндекса», связь дорожает

Reading time5 min
Views8.2K


В новом выпуске дайджеста читайте:

  • VPN-сервис HideMy.name смог добиться в суде отмены блокировки;
  • полноценный блокировщик рекламы в Chrome будет доступен только для корпоративных пользователей;
  • данные eSim будут хранить на территории РФ;
  • Яндекс не предоставил ФСБ ключи шифрования;
  • связь в России дорожает из-за отмены роуминга;
  • команда МФТИ выходит в финал конкурса Amazon;
  • Apple удаляет из сети неугодные ролики;
  • краснодарский провайдер отказывается устанавливать оборудование для «Закона Яровой».
Total votes 17: ↑15 and ↓2+13
Comments7

Операционные системы с нуля; уровень 3 (старшая половина)

Reading time28 min
Views16K

В этой части мы допишем обработку прерываний и возьмёмся за планировщик. Наконец-то у нас появятся элементы многозадачной операционной системы! Разумеется это только начало темы. Одно прерывание таймера, один системный вызов, базовая часть простого планировщика потоков. Ничего сложного. Однако этим мы подготовим плацдарм для создания полноценной системы, которая будет заниматься самыми настоящими процессами безо всяких "но". Прямо как в этих ваших линупсах и прочих. До конца этого курса осталось уже чуть менее половины.


Нулевая лаба


Первая лаба: младшая половина и старшая половина


Вторая лаба: младшая половина и старшая половина


Третья лаба: младшая половина

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

Заметки о восстановлении работы встраиваемых систем

Reading time4 min
Views8.4K
Попытался собрать свой опыт портирования OpenWRT на встраиваемое оборудование. В этой статье расскажу о том как работать с загрузчиком u-boot и основных проблемах возникающих при загрузке операционной системы.
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments2

Основы работы с Robotic Operating System

Reading time5 min
Views63K

Введение


    Доброго всем времени суток!
    Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о Robotic Operating System (далее просто ROS). Поспешу исправить эту оплошность и популяризовать замечательный продукт.
image
    Что же это такое? ROS представляет собой надстройку над ОС, которая позволяет легко и просто разрабатывать системы управления роботами. Что это означает и как с этим потом жить — и призвана рассказать серия топиков.
    По сути, ROS — это набор из различных широко (и неочень) известных библиотек, таких как:
  • OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и обработки изображений;
  • PCL- библиотека для работы с облаками 3D-точек;
  • Ogre — объектно-ориентированный графический движок с открытым исходным кодом;
  • Orocos — библиотека для управления роботами (например, расчет кинематики).

    Также в ROS входят драйвера для различных манипуляторов и сенсоров (включая MS Kinect).
Читать дальше →
Total votes 36: ↑34 and ↓2+32
Comments20

Парсер RSS на bash для LostFilm.TV: Transmission + SQLite + mkvtools

Reading time6 min
Views1.8K
Здравия желаю, Хабр!

В ответ на предыдущий топик про парсер RSS-ленты LostFilm.TV хочу выложить свой вариант работающий уже около 4х месяцев без каких-либо ошибок.
Суть идеи состоит в том, что сервер качает сериалы и раскладывает по папкам, оформляя при этом файлы с обложкой и нормальным заголовком.
Однако, в работе всей системы участвует не один скрипт, а целый набор скриптов. В такой системе скрипты разделены на pre-обработку и post-обработку.
И, конечно же, для эстетов: файлы каждой серии должны выглядеть красиво и быть разложены по папкам.
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments14

Диагностика неисправностей блока питания с помощью мультиметра

Reading time4 min
Views349K
Недавно понадобилось произвести диагностику питания, для того чтобы понять по какой причине не запускается машина. К сожалению, в интернете оказалось мало годных статей на эту тему, поэтому пришлось самому лезть в даташиты.
Эта статья является выжимкой из моих изысканий и надеюсь поможет кому-нибудь, когда им придется заниматься тем же самым.

Дисклеймер номер раз: Данная статья относится только к обычным блокам питания стандарта ATX, она не относится к проприетарным стандартам блоков (например как у старыx рабочиx станциях DELL или SUN), использующим другую распиновку ATX-коннектора. Внимательно сверьтесь со схемой и убедитесь в том, что ваш блок питания является стандартным прежде чем проводить диагностику, во избежании причинения вреда вашему компьютеру.

Дисклеймер номер два: Вы должны понимать что вы делаете и соблюдать технику безопасности, в том числе электростатической (в т.ч. работать в антистатическом браслете). Автор не несет ответственности за порчу оборудования или вред здоровью вследствие несоблюдения или незнания техники безопасности и принципов работы устройства.


Перейдем к теории:

Стандарт ATX имеет 2 версии — 1.X и 2.X, имеющие 20 и 24-пиновые коннекторы соответственною, вторая версия имеет 24-x 4 дополнительных пина, удлиняя тем самым стандартный коннектор на 2 секции таким образом:
image

Прежде чем мы начнем, расскажу про “правила большого пальца” по отношению к неисправностям:
1) Проблемную материнскую плату легче заменить чем починить, это крайне сложная и многослойная схема, в которой разве что можно заменить пару конденсаторов, а обычно это проблемы не решает.
2) Если вы не уверены в том что вы делаете, то не делайте этого.

Читать дальше →
Total votes 135: ↑130 and ↓5+125
Comments58

Интуиция, головоломки и вычислимость

Reading time5 min
Views4.8K
В этой статье я хочу рассказать об одном парадоксе, который был подмечен давно, но который до сих пор является таинственной загадкой — одной из тех, о которых рассказывают преподаватели, чтобы заинтересовать студентов своим предметом. Этот парадокс непосредственно связан с проблемой искусственного интеллекта, поэтому данная статься опубликована в соответствующем блоге.

Но об этом после, а для начала я расскажу, как уделал собственную программу в решении простой, на вид, головоломки из игры Still Life.

Читать дальше →
Total votes 63: ↑45 and ↓18+27
Comments54

Российские микропроцессоры

Reading time3 min
Views29K
Когда-то еще советские ЭВМ занимали лидирующую позицию среди своих конкурентов. В это мало верится, но знаменитая БЭСМ-6 (первая в СССР на основе транзисторов и ИС), разработанная под руководством легендарного Сергея Лебедева рассчитывала траекторию полета космического корабля «Союз-19» и американского «Аполлона»!
Но это было в 70-х, теперь Россия врядли может похвастаться своей компьютерной индустрией. Цель нижеследующего — выяснить, что на сегодняшний день творится с Российским компьютеростроением и ждет его в будущем…
Читать дальше →
Total votes 84: ↑71 and ↓13+58
Comments87

История одного байта

Reading time15 min
Views57K
Предисловие.
Этот рассказ имеет свою длинную историю. Для многих это, возможно, будет махровый баян, но мне кажется он стоит того, что бы его прочитали новые люди.
Во всех источниках, где я встречал его сведения об авторе были просты и незатейливы: Dmitry Galuscenko. Если кто-то может указать сайт или e-mail — напишите в комментариях, я с удовольствием добавлю.
Итак, начнем.


Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит состоит. Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была граница отделявшая меня от этого состояния.
Hо все по порядку
Total votes 140: ↑121 and ↓19+102
Comments120

Что нужно знать про арифметику с плавающей запятой

Reading time14 min
Views969K


В далекие времена, для IT-индустрии это 70-е годы прошлого века, ученые-математики (так раньше назывались программисты) сражались как Дон-Кихоты в неравном бою с компьютерами, которые тогда были размером с маленькие ветряные мельницы. Задачи ставились серьезные: поиск вражеских подлодок в океане по снимкам с орбиты, расчет баллистики ракет дальнего действия, и прочее. Для их решения компьютер должен оперировать действительными числами, которых, как известно, континуум, тогда как память конечна. Поэтому приходится отображать этот континуум на конечное множество нулей и единиц. В поисках компромисса между скоростью, размером и точностью представления ученые предложили числа с плавающей запятой (или плавающей точкой, если по-буржуйски).

Арифметика с плавающей запятой почему-то считается экзотической областью компьютерных наук, учитывая, что соответствующие типы данных присутствуют в каждом языке программирования. Я сам, если честно, никогда не придавал особого значения компьютерной арифметике, пока решая одну и ту же задачу на CPU и GPU получил разный результат. Оказалось, что в потайных углах этой области скрываются очень любопытные и странные явления: некоммутативность и неассоциативность арифметических операций, ноль со знаком, разность неравных чисел дает ноль, и прочее. Корни этого айсберга уходят глубоко в математику, а я под катом постараюсь обрисовать лишь то, что лежит на поверхности.
Читать дальше →
Total votes 245: ↑242 and ↓3+239
Comments75

Пополняем шпаргалки по C++: неявно-генерируемые перемещающий конструктор и оператор присваивания

Reading time2 min
Views25K
Когда не так часто, как хотелось бы, приходится работать с языком, некоторые аспекты забываются. А некоторые никогда и не откладываются в голове. Поэтому, когда возникают вопросы, приходится отвлекаться и лезть в документацию.

Чтобы сэкономить время в последующем, а также, чтобы лучше понять в ходе обучения, крайне помогает вести конспекты и делать наглядные шпаргалки. Шпаргалку можно повесить рядом на стену. Хороши шпаргалки в виде блок-схем, по которым можно легко, по шагам, получить нужный результат (например выбрать правильный контейнер).

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

Читать дальше →
Total votes 31: ↑28 and ↓3+25
Comments19

Как работает yield

Reading time6 min
Views698K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

SITH — техника CSS3 для плавной смены изображения

Reading time2 min
Views17K
Доброго времени суток, Хабр!

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

Не встретив на просторах Интернета чего-либо подобного, я взял на себя ответственность назвать этот метод SITH (Soft Image Transition on :Hover) — плавный переход изображения при наведении.

SITH - CSS3 Soft Image Transition on :Hover

Под хабракатом Вы найдёте полное описание техники, весь код, несколько скриншотов и ссылку на демонстрационную версию.
Читать дальше →
Total votes 140: ↑119 and ↓21+98
Comments48

Сделано у нас — опыт раскрутки

Reading time5 min
Views2.1K
Сделано у нас
После публикации о моем проекте "Сделано у нас", мне пришло несколько писем с просьбой рассказать о том, как я раскручивал и продвигал проект. Сначала я отписывался общими фразами типа «не виноватая я, он сам пришел», в смысле ресурс раскрутил себя сам, а я усилий к этому не прилагал.

По сути, это правда. Я не заказывал каких-то дорогостоящих пиар акций, у меня не было никакой четкой стратегии продвижения проекта. Но все же, подумав, я решил, что рассказать есть о чем.
Читать дальше →
Total votes 90: ↑78 and ↓12+66
Comments27

Cага о пакетном конвертировании pdf в text

Reading time7 min
Views21K
В прошлом году была заказана, как казалось на первый взгляд, простая работа: создать систему пакетной обработки файлов — содержащих 12-ти колоночную таблицу, данные из которой экспортировать в БД. Все бы ничего — да вот файлы оказались документами в pdf, а заказчик утверждал что другого формата для обработки предоставить никак не может.

image
Образец того самого pdf-а — в файле сохранена структура, но подчищены все данные.

Чтож, несмотря на предупреждения знающих людей, а предупреждали они ой как не зря — я за работу взялся и пережил вот такое приключение:

Читать дальше →
Total votes 73: ↑70 and ↓3+67
Comments23

Изменение часовых зон в России, Белоруссии и на Украине

Reading time44 min
Views39K
Как вы, наверняка, уже слышали, осенью 2011 сразу несколько государств приняли решение об изменении порядка исчисления времени на своей территории, а также об отмене сезонного перехода на летнее время.
В списке этих государств: Россия, Белоруссия, Украина, частично признанные государства: Абхазия и Южная Осетия, а также непризнанное государство Приднестровье. Т.е. во всех часовых поясах этих стран теперь круглый год будет фиксированный сдвиг относительно UTC, без дополнительных сезонных сдвигов.
(Примечание: Украина сначала приняла решение о переходе на время UTC+3 без летнего времени, но потом отменила принятое ранее решение и пока вернулась к прежнему порядку исчисления времени с сезонными переводами часов. Подробности ниже.)

Server clockВ этой статье я опишу суть принятых изменений часовых поясов и опишу техническую сторону вопроса касательно IT-систем (корпоративной инфраструктуры, серверов, рабочих станций, сервисов, приложений и т.п.). Постараюсь ответить на ряд основных вопросов, возникающих в связи с этими изменениями:
— Какие IT-системы может затронуть изменение часовых поясов?
— Какие проблемы это может вызвать?
— Как подготовиться к этому, чтобы по возможности избежать проблем?

Полагаю, многим системным/прикладным администраторам, а также некоторым разработчикам приложений/сервисов, полезно будет ознакомиться с этим материалом. А потом предлагаю всем заинтересованным обсудить и дополнить эту информацию в комментариях.
Для начала немного общей информации...
Total votes 263: ↑254 and ↓9+245
Comments101

ООП — Организация Освобождения Палестины

Reading time5 min
Views16K
Эта статья является изложением в письменном виде моего личного восприятия программирования и Объектно-ориентированного программирования в частности. Здесь собраны и душевные негодования, и переживания за программистов всего мира. Всё, конечно же, подкреплено исходным кодом.


Читать дальше →
Total votes 113: ↑76 and ↓37+39
Comments64

Почему в WiMax и LTE используют OFDM

Reading time18 min
Views121K


Аббревиатура OFDM расшифровывается как Orthogonal frequency-division multiplexing. В русскоязычной литературе встречается несколько различных переводов, несущих, в принципе, один смысл: OFDM — это механизм мультиплексирования (уплотнения) посредством ортогональных поднесущих.



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





Иллюстраций: 18, символов: 27 399, строк кода: 99.



Читать дальше →
Total votes 273: ↑269 and ↓4+265
Comments61

LXML — проблемы с кодировкой при парсинге HTML

Reading time2 min
Views15K
Данный пост посвящен извечной проблеме всех питонистов — кодировкам. Недавно я получил письмо, в котором мой знакомый жаловался на то, что у него в программе получаются строчки вида::

u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87'

Вы заметили что что-то не так? И я вот. Строчки как бы уникодные, но внутри них закодированные utf-8 байты. Что-то здесь не так. Разбираясь дальше и потребовав скрипт, которые такое генерирует, становится понятно, что данные берутся из веба. Вполне обычным способом через urllib и потом скармливаются в lxml.html для разбора. Поскольку urllib оперирует только байтовыми строками, то он не мог их так превратить в уникод, а значит во всем виноват lxml.
Читать дальше →
Total votes 41: ↑23 and ↓18+5
Comments9
1

Information

Rating
Does not participate
Date of birth
Registered
Activity