Pull to refresh
71
0
Макс Ахмедов @Zlobober

Разработчик распределённых систем

Send message

Подводные камни Bash

Reading time 32 min
Views 94K


В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете использовать кавычки и никогда не будете использовать разбиение на слова (wordsplitting)! Разбиение на слова — это ущербная легаси-практика, унаследованная из оболочки Bourne. Она применяется по умолчанию, если вы не заключаете подстановки (expansions) в кавычки. В общем, подавляющее большинство подводных камней так или иначе связаны с подстановкой без кавычек, что приводит к разбиению на слова и глоббингу (globbing) получившегося результата.


Читать дальше →
Total votes 143: ↑141 and ↓2 +139
Comments 63

Игра, которая не игра

Reading time 4 min
Views 69K


Привет!

Когда я рассказывал про сюжетно-ориентированные игры, я думал, что пример прибитых к голове героя рельсов сюжета – это Mass Effect. Но нет, в полку интерактивных фильмов прибыло, и прибыло так, что прямо хочется сказать о новом направлении игр.

Короче, у вас есть игра. Только в неё нельзя выиграть или проиграть. И в ней нельзя ничего поменять. И вы ни на что не влияете. Но при этом она интересная. Как игра, а не как фильм. Называется Firewatch.

Пошли, покажу этот оксюморон.
Читать дальше →
Total votes 67: ↑57 and ↓10 +47
Comments 105

[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

Reading time 9 min
Views 85K
Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Читать дальше →
Total votes 158: ↑149 and ↓9 +140
Comments 15

Что такого особенного в Nim?

Reading time 7 min
Views 80K


Язык программирования Nim (ранее именовался Nimrod) — захватывающий! В то время как официальная документация с примерами плавно знакомит с языком, я хочу быстро показать вам что можно сделать с Nim, что было бы труднее или невозможно сделать на других языках.

Я открыл для себя Nim, когда искал правильный инструмент для написания игры, HoorRace, преемник моей текущей DDNet игры/мода Teeworlds.

(прим. пер. На синтаксис Nim имели влияние Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.)

Запускаем!


Да, эта часть всё ещё не захватывает, но просто следите за продолжением поста:

for i in 0..10:
  echo "Hello World"[0..i]

Читать дальше →
Total votes 63: ↑57 and ↓6 +51
Comments 93

Психологическая деформация программистов. Взгляд с обеих сторон баррикад

Reading time 6 min
Views 136K
Само наличие психологической деформации у какой-либо профессии, как правило, достаточно спорный момент ввиду того, что у разных людей она проявляется по-разному. Однако общую тенденцию можно выделить и, пожалуй, настало то время когда можно достаточно смело говорить, что программисты всё же имеют свой особенный психологический портрет который обусловлен их профессиональной деятельностью.

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

И что же них такого деформированного?
Total votes 461: ↑436 and ↓25 +411
Comments 558

15 малоизвестных команд Linux

Reading time 3 min
Views 315K
Каждому разработчику в определенной степени следует овладеть навыками работы в терминале. Физически находиться у компьютера не всегда возможно, поэтому приходится подключаться удаленно. И действительно, GUI-программы вполне могут с этим с правиться, но зачастую они работают медленнее, чем получение доступа через тот же терминал (в конце концов, это лишь обмен текстом).
Читать дальше →
Total votes 333: ↑274 and ↓59 +215
Comments 224

Один крутой Gist: whiteboardCleaner

Reading time 1 min
Views 30K
Доброго времени суток уважаемые хабравчане. На просторах интернета мне повстречался один миниатюрный и очень интересный Bash скрипт. С помощью ImageMagick он потрясающим образом обрабатывает фотографии белой учебной доски, очищая «содержимое» от всего лишнего:

#!/bin/bash
convert $1 -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2


До:


image

После:


image
Читать дальше →
Total votes 137: ↑122 and ↓15 +107
Comments 42

Shed Skin — экспериментальный транслятор из Python в C++

Reading time 13 min
Views 43K

Введение



Shed Skin — это экспериментальный транслятор из Python в C++, разработанный для повышения скорости выполнения программ на Python с интенсивными вычислениями. Он преобразует программы, написанные на ограниченном подмножестве языка Python, в C++. Код C++ можно скомпилировать в исполняемый код, который может быть как отдельной программой, так и модулем расширения, легко импортируемым и используемым в обычной программе на Python.

Читать дальше →
Total votes 43: ↑38 and ↓5 +33
Comments 11

Уведомления о завершении консольных команд

Reading time 1 min
Views 24K
Undistract-Me — простая, но чрезвычайно полезная в хозяйстве утилита, которая делает одну вещь — выводит уведомление, когда длинная команда (по умолчанию 10 секунд, но можно настроить) завершила свое исполнение.



Также показывает название этой команды и время, которое она заняла. Должно работать со всеми окружениями рабочего стола.
Особенно хороша, когда вы, например, решили чего-нибудь скомпилировать, и не хотите все время пялиться в черный экран или проверять каждую минуту работает ли оно еще. Теперь во время пересборки ядра вы сможете наслаждаться своими любимыми видео с кошечками!
Читать дальше →
Total votes 54: ↑50 and ↓4 +46
Comments 48

Через тернии к Haskell. 1/2

Reading time 25 min
Views 223K


Первая часть короткого и жесткого введения в Haskell. Вторую часть можно найти здесь

tl;dr: Очень краткое и сжатое введение в Haskell.


UPD. Если туториал вам понравился, черкните пару строк автору оригинальной статьи. Человеку будет приятно ;)
Классные картинки, много текста и вынос мозга
Total votes 137: ↑133 and ↓4 +129
Comments 52

Как определить язык по виду иероглифов/закорючек?

Reading time 1 min
Views 188K
Вот, задался таким вопросом… С помощью гугл транслейта и такой-то матери, родилась такая блок-схемка:



картинка кликабельна

Кому нужен сорец (в .docx): тут
Total votes 341: ↑329 and ↓12 +317
Comments 185

Argparse — парсим аргументы и параметры командной строки с легкостью

Reading time 6 min
Views 145K
Начиная с версии Python 2.7, в набор стандартных библиотек была включена библиотека argparse для обработки аргументов (параметров, ключей) командной строки. Хотелось бы остановить на ней Ваше внимание.
Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Comments 11

Функциональное программирование для всех

Reading time 33 min
Views 351K

Доброго времени суток. Это статья — перевод заинтересовавшего меня поста в блоге аспиранта Университета штата Нью-Йорк в Стоуни-Брук. Статья в доступной форме описывает основные концепции функционального программирования, их преимущества и недостатки. Думаю она будет полезна широкому кругу читателей, которые сомневаются, нужно ли им углубляться в мир функционального программирования или нет. Пожелания, предложения и замечания по переводу и терминологии принимаются по личной почте.

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

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Total votes 188: ↑181 and ↓7 +174
Comments 151

Уязвимы по определению

Reading time 4 min
Views 39K
У многих людей, как-либо связанных с безопасностью, периодически возникает желание заняться pentest'ом, то есть тестом на проникновение. И чаще всего начинают все с pentest'а веб-приложений. Порог вхождения довольно мал (простейшая sqli определяется добавлением кавычки в параметр и эксплуатируется не особо сложнее), но при этом встречаются и довольно сложные задания, которые заставляют потратить пару-тройку дней на ковыряние.
Но возникает вопрос — где применять теоретические знания, без страха внезапного появления маски-шоу? Под катом проведу небольшой обзор полигонов для экспериментов по pentest'у.
Читать дальше →
Total votes 89: ↑87 and ↓2 +85
Comments 29

Лайфхаки в веб-разработке

Reading time 3 min
Views 4.1K
Upgrade your Life

Ссылки открытия файлов в IDE


Это облегчит вам поиск нужного файла.
Вы сможете создавать ссылки на код прямо на странице ошибки. Или в журнале ошибок.
Сделайте ссылки в dev панели на класс контроллера и файл шаблона (или что там у вас?)
Клик на такую ссылку будет переносить вас в соответствующий файл открытой IDE.

Читать дальше →
Total votes 78: ↑50 and ↓28 +22
Comments 32

Несколько находок

Reading time 2 min
Views 7.2K

Кроссдоменные запросы с помощью YQL


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

Позавчера, один уважаемый человек с форума javascript.ru с ником melky вскользь упомянул о каком-то странном, на первый взгляд, jQuery плагине, который называется jquery.xdomainajax.js
Пытливому уму программиста не нравятся всякие плагины, без понимания сути, поэтому я выковырял самую нужную часть:
var query = 'select * from html where url="http://javascript.ru/" and xpath="*"'
var url = 'http://query.yahooapis.com/v1/public/yql?q='+encodeURI(query)+'&format=xml&callback=callback';
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
function callback(data) {
    console.log(data); //сам текст ответа находится в data.result[0]
}


Откройте консоль и зупустите код. Как видно, в запрос пихается урл сайта и XML запрос в виде xpath, ответ приходит в виде jsonp. Если в урле написать format=json, то ответ придет в виде объекта с тегами.
Дальше этого применения я не пошел, поэтому лучше сами изучите матчасть здесь: developer.yahoo.com/yql

В комментариях настаивают указать на ограничения по количеству запросов с одного IP и запросов, использующих accesskey, которого у нас нет (так что, скорее всего, можно забить :) ).

Еще немного
Total votes 51: ↑43 and ↓8 +35
Comments 28

Круговая прокрутка а-ля iPod на тачпаде

Reading time 2 min
Views 4.2K
Всем известно, что мультитач и прочие удобные трюки тачпадов от фирмы Synaptics, которые стоят практически на всех ноутбуках, зачастую реализуются драйвером тачпада и от аппаратной составляющей мало что зависит. Вот только поддержка их на разных системах разная.
Около полугода назад я, покопавшись в сети, настроил себе нажатие двумя пальцами на правую кнопку мыши, а тремя — на левую, после чего стал переносить руку на мышь гораздо реже. Но хотелось несколько большего.
Порывшись в man synaptics, нашел там интересную вещь под названием CircularScrolling, что в переводе означает «круговая прокрутка». Многим она знакома по плеерам iPod — весьма и весьма удобна при прокрутке длинных документов. Естественно, мне захотелось себе такую же, ибо прокрутка по правому краю не лучший выбор.
Итак, приступим к настройке. Попутно покажу, как реализуется обработка нажатий двумя и тремя пальцами.
Читать дальше →
Total votes 77: ↑76 and ↓1 +75
Comments 88

Задача RMQ — 1. Static RMQ

Reading time 4 min
Views 63K

Введение



Задача RMQ весьма часто встречается в спортивном и прикладном программировании. Удивительно, что на Хабре ещё никто не упомянул эту интересную тему. Попробую восполнить пробел.

Аббревиатура RMQ расшифровывается как Range Minimum (Maximum) Query – запрос минимума (максимума) на отрезке в массиве. Для определённости мы будем рассматривать операцию взятия минимума.

Пусть дан массив A[1..n]. Нам необходимо уметь отвечать на запрос вида «найти минимум на отрезке с i-ого элемента по j-ый».



Рассмотрим в качестве примера массив A = {3, 8, 6, 4, 2, 5, 9, 0, 7, 1}.
Например, минимум на отрезке со второго элемента по седьмой равен двум, то есть RMQ(2, 7) = 2.

В голову приходит очевидное решение: ответ на каждый запрос будем находить, просто пробегаясь по всем элементам массива, лежащим на нужном нам отрезке. Такое решение, однако, не является самым эффективным. Ведь в худшем случае нам придётся пробежаться по O(n) элементам, т.е. временная сложность этого алгоритма – O(n) на один запрос. Однако, задачу можно решить эффективнее.

Читать дальше →
Total votes 67: ↑62 and ↓5 +57
Comments 29

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity