«Рассуждать о коде» значит понимать порядок исполнения инструкций («исполнять программу в голове»), зная, каково предназначение кода.
Симптомы
Наличие «волшебного», «вуду» кода или кода, который не имеет никакого отношения к целям программы, но всё равно тщательно поддерживается (например, инициализация переменных, которые никогда не используются, вызов функций, не имеющих отношения к цели, создание выходных данных, которые не используются, и т.д.).
Многократные вызовы идемпотентных функций (например, вызов save() по нескольку раз, «чтобы уж точно»).
Исправление ошибок написанием избыточного кода, который замещает данные, полученные при исполнении неисправного кода.
«Йо-йо код», который конвертирует значения в различные представления, а потом конвертирует их обратно ровно в то же представление, с которого начинали (например, преобразование десятичного числа в строку, а потом обратно в десятичное число, или padding строчки с последующим trim'ом).
«Бульдозерный код», который создает впечатление рефакторинга посредством разбития кусков кода на процедуры, которые, правда, затем невозможно использовать где-либо еще (высокая когезия).
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.
Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.
Представьте, что сейчас 1995 год и вы собираетесь совершить первую покупку в онлайне. Вы открываете браузер Netscape и прихлёбываете из чашечки кофе, пока главная страница медленно загружается. Ваш путь лежит на Amazon.com — новый онлайн-магазинчик, о которой рассказал вам друг. Когда наступает этап оформить покупку и ввести персональные данные, адрес в браузере меняется с «http» на «https». Это сигнализирует о том, что компьютер установил зашифрованное соединение с сервером Amazon. Теперь можно передавать серверу данные кредитной карты, не опасаясь мошенников, которые хотят перехватить информацию.
К сожалению, ваша первая покупка в интернете была скомпрометирована с самого начала: вскоре обнаружится, что якобы безопасный протокол, по которому браузер установил соединение, на самом деле не очень защищён.
Так уж сложилось, что моя работа тесно связана с математическим моделированием физических процессов. Математическое моделирование — это совершенно особенная область программирования. Расчет даже относительно простого физического процесса может занимать несколько дней и даже недель. Поэтому на первый план выходит производительность программы, пускай даже в ущерб удобству написания и чтения кода. Однако до недавнего времени быстродействие моих программ меня мало заботило: вполне хватало грубых сеток, для которых расчеты занимали что-то около суток. Но постепенно сетки становились все подробнее, и время работы программ неуклонно росло. Тогда я стал искать узкие места в своей программе. Сначала в алгоритмах. Потом дело дошло до структур данных. И тут меня очень заинтересовал вопрос «а что же лучше использовать для хранения векторов: массивы или контейнеры?»
Один из довольно частых вопросов на различных околониксовых ресурсах — вопрос о том, какую схему разбивки дисков использовать. С виду простой вопрос на самом деле таит в себе множество подводных камней. Если, конечно же, дело касается серверов. На десктопах все гораздо скучнее и серее.
Универсального решения в данном вопросе нету, просто есть некоторые аспекты, которыми следует руководствоваться при выборе схемы разбивки.
Я ошибался дважды, выбирая работу. Совсем не от того, что неверно выбрал карьеру специалиста в сфере информационных технологий. Это очень, очень, очень интересная работа. Почти как работа капитана космического корабля… ;)
Я выбирал компании, но не выбирал боссов. И в этом состояла моя ошибка. Думаю, что не только моя…
На видео показан угон сессии вконтакте.ру, который почему-то до сих пор не использует авторизацию с https и передает пароли открытым текстом.
Дамп трафика собирается программой kismac в формате libpcap и параллельно парсится grep-ом с использованием регулярных выражений, что позволяет в реальном времени выводить на экран все интересующие куки и пароли. При этом не используется никаких анализаторов пакетов.
Хочу поделиться собственным опытом переноса системы на другой компьютер, целиком и полностью отличающийся аппаратной конфигурацией.
На самом деле, вариантов перенести систему много. Каждый имеет свой подход. Я же опишу способ, который больше всего подходит для новичков.
Техника, известная как «Чтение по спирали/по часовой стрелке» (“Clockwise/Spiral Rule”) позволяет любому программисту разобрать любое объявление языка Си.
Здравствуйте, дорогие хабравчане. Так вышло, что около полугода назад у меня получилось устроиться на работу в Швейцарии, в швейцарскую федеральную политехническую школу (EPFL) в Лозанне. К текущему моменту накопилось множество различных впечатлений, о которых я и хочу рассказать.
На этот раз собирать будем практически полностью нативными средствами, не используя Nokia remote compiler
Данный метод проверялся на Gentoo-amd64, в результате чего были получены вполне рабочие sis файлы. Огромным преимуществом при сборке из под Linux'а является то, что используется родной make, а не мутная утилита под названием abld. В результате мы получаем такие преимущества, как:
Многопоточность
Отсутствие лишних шагов в виде обсчета всех зависимостей
Отсутствие зависимости от тормозного active perl'а
Слово замок пришло к нам из польского языка zamek. Zamek через чешский zámek ведёт к немецкому slōʒ «замок, запор». slōʒ же пошло от латинского clūsa «укрепление». Это я только что прочитал в вики и о происхождении слова «замок» пусть беседуют лингвисты или как их там.
Мы посмотрим на взлом открытие замка, если забыли/потеряли ключи. Существует несколько принципиально разных схем вскрытия замков — отмычкой и бампинг. Бампинг.
Бампинг — это метод вскрытия, который не повреждает механизм. Метод базируется на заготовке или «бампинг-ключе» и ударном инструменте. В видео в качестве ударника использован молоток, но есть и механические. К примеру, электропикер (ударный пистолет), который может выполнить серию ударов за очень короткое время, что увеличивает вероятность нужного подскока штифтов:
Недавно впервые в истории автором была осуществлена разборка и слесарная доработка пера графического планшета Wacom Volito2 с целью корректировки порога чувствительности к нажиму. После обратной сборки изделие чувствует себя хорошо. Подробности письмом под катом.
Тут речь идти будет не просто про компиляцию ядра Linux, а про компиляцию ядра и его сборку в deb-пакет. Потом этим deb'ом можно будет поделиться с знакомыми, похвастаться перед любимой девушкой/парнем или просто, при необходимости, использовать повторно.
Возможно, кто-то сразу вспомнит другие способы снять это «напряжение старта», когда вместо того, чтобы начать то самое, Большое и Важное, берешься за другие, тоже полезные, но не такие срочные и важные дела, или просто дробишь большую задачу на несколько мелких и не страшных. Отлично! Теперь в вашем арсенале ещё на одно средство больше. Расскажите о своих впечатлениях в комментариях.
* * *
Я собирался написать эту статью несколько месяцев. Почему наконец собрался? Может, нашлось свободное время? Нет. Мне ещё надо просмотреть работы студентов и поставить оценки, заполнить бланки заказов на учебники, ответить на предложение Государственного научного фонда, почитать черновики диссертаций. И, чтобы не делать ничего из вышеперечисленного, я пишу эту статью.
В этом заключается суть того, что я называю «организованным отлыниванием». Удивительная стратегия, которую я недавно открыл. Она превращает злостных отлынивателей в эффективных людей, которых уважают и которыми восхищаются за то, что они способны сделать, за пользу, которую они умеют приносить.
Наверняка, многие, работающие с друпалом, знакомы с модулем Views. Как гласит Drupaler.ru, модуль Views — это Настройка и контроль за отображением любого типа контента в любом месте сайта, т.е. он позволяет создавать страницы, блоки, подменять содержимое нод, страниц пользователей и многое другое, формируя контент из любых доступных полей на сайте. Но что делать, когда необходимо вывести информацию, предоставляемую сторонним модулем, и к которой доступа из Views у нас нет?
Задача: собрать малогабаритный домашний сервер с четырьмя 3,5-дюймовыми HDD, по возможности тихий. Служить будет в качестве NAS, backup-сервера и торрентокачалки.
Читал несколько постов в рубрике «Мой бизнес», возможно и мой опыт будет кому-то интересен.
Я практически год потратил на создание и организацию работы интернет-магазина оружия. Сейчас, когда я передал этот проект другому человеку, я могу рассказать, как все было, возможно это подтолкнет кого-либо к открытию своего дела.