В данном посте я расскажу о наиболее интересных командах, которые могут быть очень полезны при работе в консоли. Однозначных критериев определения какая команда лучше другой — нет, каждый сам для своих условий выбирает лучшее. Я решил построить список команд на основе наиболее рейтинговых приемов работы с консолью от commandlinefu.com, кладовой консольных команд. Результат выполнения одной из таких команд под Linux приведен на картинке. Если заинтересовало, прошу под кат.
Андрей @apangin
Пользователь
Lock-free структуры данных. Основы: откуда пошли быть барьеры памяти
22 мин
97KПеревод
Как только я заинтересовался lock-free алгоритмами, меня стал мучить вопрос – а откуда взялась необходимость в барьерах памяти, в «наведении порядка» в коде?
Конечно, прочитав несколько тысяч страниц руководств по конкретной архитектуре, мы найдем ответ. Но этот ответ будет годен для этой конкретной архитектуры. Есть ли общий? В конце концов, мы же хотим, чтобы наш код был портабелен. Да и модель памяти C++11 не заточена под конкретный процессор.
Наиболее приемлемый общий ответ дал мне мистер Paul McKenney в своей статье 2010 года Memory Barriers: a Hardware View of Software Hackers. Ценность его статьи – в общности: он построил некоторую упрощенную абстрактную архитектуру, на примере которой и разбирает, что такое барьер памяти и зачем он был введен.
Вообще, Paul McKenney – известная личность. Он является разработчиком и активным пропагандистом технологии RCU, которая активно используется в ядре Linux, а также реализована в последней версии libcds в качестве ещё одного подхода к безопасному освобождению памяти (вообще, о RCU я хотел бы рассказать отдельно). Также принимал участие в работе над моделью памяти C++11.
Статья большая, я даю перевод только первой половины. Я позволил себе добавить некоторые комментарии, [которые выделены в тексте так].
+111
Почему SNMP это не очень просто?
17 мин
160KТуториал
Давным давно, на Хабре была опубликована статья, рассказывающая о том, как использовать популярную библиотеку, для работы с SNMP из Java-приложения. Поддерживая, в целом, начинание автора, я хочу остановиться на тех сложностях, которые могут возникнуть в реальном проекте, использующем SNMP.
+25
Lock-free структуры данных. 1 — Начало
12 мин
148KЯ надеюсь, что эта статья станет началом цикла заметок о lock-free структурах данных. Я хочу поделиться с хабрасообществом своим опытом, наблюдениям и размышлениями о том, что такое lock-free структуры данных, как их реализовывать, подходят ли концепции контейнеров стандартной библиотеки STL к lock-free контейнерам, и когда стоит (и стоит ли вообще) применять lock-free структуры данных.
+157
Алгоритм Х или что общего между деревянной головоломкой и танцующим Линком?
5 мин
67KПредисловие
Как-то в гостях мне в руки попалась головоломка, в которой из 25 одинаковых фигурок требовалось собрать куб. Я провозился с ней почти весь вечер, и как можно догадаться, абсолютно безрезультатно. Тем не менее, я не мог сдаться просто так.
Не можешь сам — заставь компьютер. Сказано — сделано. В результате написанному по наитию алгоритму пришлось работать всю ночь, чтобы найти все 4 уникальных решения. В процессе гугления решений для сравнения, я нашёл программу Burr Tools, которая справилась с этой задачей за 3 минуты на моём ноутбуке.
Такая разница в скорости заставила меня разобраться, как решается эта задача и ещё целый класс подобных.
+137
Trove 4.0? Примитивы в стандартном каркасе коллекций из Java 8
5 мин
9.7KПеревод
Около месяца назад на Хабре была статья про Trove — самую часто упоминаемую библиотеку, когда спрашивают про структуры данных с примитивами на Java. Примерно за пару дней до этого я сел эту библиотеку переписывать. Время решительно кончилось, поэтому делюсь поиском с вами, хотя не очень-то надеюсь, что кто-то продолжит это дело.
На данный момент сделаны хеш-таблицы 6 типов: множества примитивов, объектов и все 4 варианта мапов: примитив — примитив, примитив — объект, объект — примитив и объект — объект, над которыми нависает туча обобщающих интерфейсов.
Меня всегда удивляло, почему все подобные библиотеки создают еще одну иерархию типов, а не встраиваются в давно уже зарекомендовавший себя стандартный каркас коллекций Явы. Никаких принципиальных проблем с этим я не видел и не вижу. Поэтому над моей тучей интерфейсов, как на пантеоне, возвышаются
На данный момент сделаны хеш-таблицы 6 типов: множества примитивов, объектов и все 4 варианта мапов: примитив — примитив, примитив — объект, объект — примитив и объект — объект, над которыми нависает туча обобщающих интерфейсов.
Меня всегда удивляло, почему все подобные библиотеки создают еще одну иерархию типов, а не встраиваются в давно уже зарекомендовавший себя стандартный каркас коллекций Явы. Никаких принципиальных проблем с этим я не видел и не вижу. Поэтому над моей тучей интерфейсов, как на пантеоне, возвышаются
java.lang.Iterable
, java.util.Collection
и java.util.Map
. Я не зря дал ссылки на документацию по Java 8. Реализованы почти все методы из будущих интерфейсов, кроме spliterator()
. Можно начинать привыкать.+15
Разбор адресов «нечёткими регулярными выражениями»
7 мин
31KКраткое содержание: о библиотеке написанной мною для сопоставления с заданным словарём выражений на естественном языке — в частности, городских адресов.
Сколько существует способов написать адрес — в смысле, географический?
Даже если упростить задачу и отбросить всякие мелочи вроде номера дома, строения, участка, квартиры и т.п. — и работать в пределах одного города — сколько вариантов можно придумать для написания названий улиц, площадей, проездов, проулков и т.п.?
Возьмём простой пример:
улица Цветочная — может быть обозначена с сокращением, как «ул. Цветочная» и «Цветочная ул.» — кроме того «ул.» можно пропустить (если Цветочной площади в городе нет), а «Цветочная» можно написать с ошибками «Цвяточная» или «Цвиточная», равно как и «Цветошная» — всё это будет выглядеть недурно!
Пример посложнее:
2-я Конно-армейская улица — здесь душе поэта есть где разгуляться. Номер можно выразить как «2-ая» или просто «2», а можно даже прописью «Вторая» или с сокращением «Втор.» — дефис же между «конной» и «армейской» будет встречаться примерно у 50% опрошенных. До кучи выяснится что «конно-армейская» кому-то показалась длинной и сократилась до «2 Конноарм. ул.»
Другие интересные примеры связаны с именами «ул. Матроса Железняка» (или просто «Железняка»?), «пр. Мориса Тореза» (или «Мариса Тереза»?) а также совсем эпические случаи «ул. 3-я линия второй половины», «дорога на деревню Рыбацкое», «ул. Левый берег реки Ижоры» — прошу простить если и сам я их не осилил написать правильно по памяти.
На деревню дедушке
Сколько существует способов написать адрес — в смысле, географический?
Даже если упростить задачу и отбросить всякие мелочи вроде номера дома, строения, участка, квартиры и т.п. — и работать в пределах одного города — сколько вариантов можно придумать для написания названий улиц, площадей, проездов, проулков и т.п.?
Возьмём простой пример:
улица Цветочная — может быть обозначена с сокращением, как «ул. Цветочная» и «Цветочная ул.» — кроме того «ул.» можно пропустить (если Цветочной площади в городе нет), а «Цветочная» можно написать с ошибками «Цвяточная» или «Цвиточная», равно как и «Цветошная» — всё это будет выглядеть недурно!
Пример посложнее:
2-я Конно-армейская улица — здесь душе поэта есть где разгуляться. Номер можно выразить как «2-ая» или просто «2», а можно даже прописью «Вторая» или с сокращением «Втор.» — дефис же между «конной» и «армейской» будет встречаться примерно у 50% опрошенных. До кучи выяснится что «конно-армейская» кому-то показалась длинной и сократилась до «2 Конноарм. ул.»
Другие интересные примеры связаны с именами «ул. Матроса Железняка» (или просто «Железняка»?), «пр. Мориса Тореза» (или «Мариса Тереза»?) а также совсем эпические случаи «ул. 3-я линия второй половины», «дорога на деревню Рыбацкое», «ул. Левый берег реки Ижоры» — прошу простить если и сам я их не осилил написать правильно по памяти.
+65
ARM ассемблер (продолжение)
7 мин
47KДоброго времени суток, хабражители. Вдохновившись статьёй ARM аccемблер, решил для интересующихся и таких же начинающих, как я, продолжить эту статью. Исходя из названия становится понятно, что перед тем, как читать эту статью, желательно прочесть вышеуказанную. Итак, «продолжим».
Мой случай будет отличаться от предыдущего следующим:
В принципе, никаких критических изменений относительно случая в статье-«родителе» нет.
Мой случай будет отличаться от предыдущего следующим:
- у меня на машине ubuntu 12.04
- arm toolchain я брал от сюда(выбрать ARM Processors — Download the GNU/Linux Release). На момент написания статьи появились более свежие версии, но я использовал arm-2012.09(arm-none-linux-gnueabi toolchain)
- устанавливал так:
$ mkdir ~/toolchains
$ cd ~/toolchains
$ tar -jxf ~/arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 - добавлял для упрощения дальнейших действий наш тулчейн в PATH
$ PATH=$HOME/toolchains/arm-2012.09/bin:$PATH - установка qemu в ubuntu
$ sudo apt-get install qemu
$ sudo apt-get install qemu-system
В принципе, никаких критических изменений относительно случая в статье-«родителе» нет.
+35
Интерфейс поисковика недвижимости
6 мин
10KДумаю, многим из вас, уважаемые хабрачитатели, хотя бы раз приходилось решать вопрос аренды или покупки жилья. Тогда, вероятно, вы шли в гугл, набирали что-то наподобие “аренда квартиры <город>”, после чего в многочисленных вкладочках начинали загружаться вот такие “замечательные” интерфейсы:
Не буду рассказывать о проблемах этих интерфейсов. Во всяком случае, я считаю, что миллионы людей, которые каждый день пытаются найти себе жилье, определенно достойны лучшего.
В этой статье я расскажу, как можно быстро и дешево создать прототип вполне достойного сайта для поиска недвижимости. Любителей почитать про юзабилити прошу под кат.
Не буду рассказывать о проблемах этих интерфейсов. Во всяком случае, я считаю, что миллионы людей, которые каждый день пытаются найти себе жилье, определенно достойны лучшего.
В этой статье я расскажу, как можно быстро и дешево создать прототип вполне достойного сайта для поиска недвижимости. Любителей почитать про юзабилити прошу под кат.
+2
Большое обновление Google Maps
1 мин
60KНо конференции Google I/O состоялась презентацию полностью обновлённого сервиса Google Maps. Пока что его можно посмотреть только по инвайтам, но в будущем эта красота станет общедоступной.
Что нового:
1. Google Earth наконец-то интегрировали с Google Maps, так что теперь не требуется установка отдельной программы для просмотра Земли 3D или поверхности Марса. Авиасимуляторы и другие игры по Google Earth API, наверное, будут работать без установки плагина Google Earth, как сейчас.
+52
Как я покупал 42-дюймовый ЖК-телевизор: опыт выбора и эксплуатации
8 мин
200KПоклонником телевидения я никогда не был, поэтому без какого-либо дискомфорта около 6 лет пользовался стареньким кинескопным Samsung примерно такого же возраста. Играл и фильмы смотрел на ноутбуке, а сам же ТВ включался лишь изредка, для «фона».
С приобретением игровой консоли xBox 360 я всерьез задумался о покупке современного телевизора, так как играть на старом кинескопном было практически нереально. Во-первых, в нем попросту нет HDMI-порта, и приходилось довольствоваться обычными «тюльпанами» и переходником SCART. Во-вторых, в силу низкого разрешения экрана нельзя было насладиться всей полнотой графики современных игр, а мелкие надписи (например, пояснения в играх) и вовсе были нечитабельны. Выход виделся один – приобретение современного телевизора.
С приобретением игровой консоли xBox 360 я всерьез задумался о покупке современного телевизора, так как играть на старом кинескопном было практически нереально. Во-первых, в нем попросту нет HDMI-порта, и приходилось довольствоваться обычными «тюльпанами» и переходником SCART. Во-вторых, в силу низкого разрешения экрана нельзя было насладиться всей полнотой графики современных игр, а мелкие надписи (например, пояснения в играх) и вовсе были нечитабельны. Выход виделся один – приобретение современного телевизора.
+29
Обработка и классификация запросов. Часть первая: парсер запросов
7 мин
24KЧем занят отдел обработки запросов в Поиске Mail.Ru? Если одним предложением, мы пытаемся «понять» запрос, то есть осуществляем подготовку запроса к поиску, приводим его в вид, пригодный для взаимодействия с нашим индексом, ранжированием, подмесами и прочими компонентами. Если же вы хотите узнать о нашей работе подробнее — добро пожаловать под кат. В этом посте я расскажу об одной из областей нашей работы — парсере запросов.
+61
Использование драйверов из Android приложения
7 мин
46KТуториал
Рут даёт практически абсолютную власть над Android устройством. Сегодня я расскажу вам как получить еще больше имея склонность к программированию и желание исследовать систему на своём устройстве. Кто заинтересовался — прошу под кат.
+43
Проблемы MySQL оптимизатора
3 мин
29KЧто я успел понять про MySQL за несколько лет его разработки:
Я опишу две серьёзные проблемы ДНК MySQL, с которыми косвенно сталкивается любой пользователь MySQL 5.1 и 5.5 (насчёт 5.6 не проверял, но не думаю, что этот момент поменялся).
Как вообще MySQL работает?
- развивать не ломая обратной совместимости его нельзя
- MySQL со сломанной обратной совместимостью никому не нужен.
Я опишу две серьёзные проблемы ДНК MySQL, с которыми косвенно сталкивается любой пользователь MySQL 5.1 и 5.5 (насчёт 5.6 не проверял, но не думаю, что этот момент поменялся).
Как вообще MySQL работает?
+82
Игры для программистов
3 мин
134KДолжен признаться, что я плохой программист. Я не люблю настраивать Maven и писать конфигурации для Spring Framework. Я не знаю в деталях, как работает JVM (да и в общих чертах представляю это себе довольно смутно). Я плохо понимаю паттерны проектирования, а любая новая технология вводит меня в уныние. И тем не менее, я люблю программировать.
Специально для таких как я (а может, и для каких-то других) существует небольшой класс игр, представляющих собой квинтэссенцию программирования. В них не нужно скрещивать ежа с ужом и беспокоиться о версиях библиотек. Лишь кристально чистое алгоритмическое программирование, обёрнутое в симпатичный интерфейс — вот моё маленькое счастье.
Специально для таких как я (а может, и для каких-то других) существует небольшой класс игр, представляющих собой квинтэссенцию программирования. В них не нужно скрещивать ежа с ужом и беспокоиться о версиях библиотек. Лишь кристально чистое алгоритмическое программирование, обёрнутое в симпатичный интерфейс — вот моё маленькое счастье.
Минуточку внимания.
Я не стану говорить о Robot Battle и тому подобных вещах. Вот не стану и всё. Возможно, я странный человек, но мне не нравится иметь дело с чем-то, хоть отдалённо напоминающим реальную физику. Интересующиеся могут почитать об этой игре здесь, а статья немного о другом.
+84
Исследование игры-головоломки «Сапёр» (продолжение)
4 мин
16KПродолжаем наше исследование игры «Сапёр» от Microsoft.
Данная статья является продолжением первой статьи.
О чем будет идти речь:
1) Взлом, основанный на переполнении буфера
2) Взлом игровых мин
3) Исследование архитектуры игры.
I
Откроем игру, следом за ней CE( Cheat Engine ). Присоединяемся к процессу игры:
Данная статья является продолжением первой статьи.
О чем будет идти речь:
1) Взлом, основанный на переполнении буфера
2) Взлом игровых мин
3) Исследование архитектуры игры.
I
Откроем игру, следом за ней CE( Cheat Engine ). Присоединяемся к процессу игры:
+19
Об одном методе распределения памяти
17 мин
29KТуториал
Не секрет, что иногда выделение памяти требует отдельных решений. Например — когда память выделяется и освобождается стремительным
В результате стандартный консервативный аллокатор выстраивает все запросы в очередь на pthread_mutex / critical section. И наш многоядерный процессор медленно и печально едет на первой передаче.
И что с этим делать? Познакомимся поближе с деталями реализации метода Scalable Lock-Free Dynamic Memory Allocation. Maged M. Michael. IBM Thomas J. Watson Research Center.
Самый простой код что я сумел найти — написан под LGPL камрадами Scott Schneider и Christos Antonopoulos. Его и рассмотрим.
+99
Оптимальные опции для x86 GCC
4 мин
56K Распространено мнение, что GCC отстает по производительности от других компиляторов. В этой статье мы постараемся разобраться, какие базовые оптимизации GCC компилятора стоит применить для достижения приемлемой производительности.
+81
Барьеры доступа к памяти в Linux
15 мин
49KЭта статья — частичный перевод исчерпывающего руководства Дэвида Хоуэлса (David Howells) и Пола Маккени (Paul E. McKenney) распространяемого в составе документации Linux (Documentation/memory-barriers.txt онлайн версия).
Must read для разработчиков ядра/драйверов и очень познавательно для прикладных программистов.
Must read для разработчиков ядра/драйверов и очень познавательно для прикладных программистов.
+104
Ошейник для собаки-сияки
7 мин
110KВведение
Итак, у меня есть собака.
Краткое резюме:
Кличка: Белка
Окрас: Белый с рыжим
Порода: Западносибирская лайка с кем-то еще
Происхождение: Дворянское
Стоимость: 0р 0к
Собака была приобретена в собственном подъезде за еду и кров. Была выброшена какими-то негодяями без еды и воды в картонной коробке без фирменных логотипов породы и адреса завода-изготовителя. Ну да не важно, мы и с менее качественным товаром имели дело, а тут такая рыжая морда, и совсем бесплатно. Берем!
Пришлось принимать товар как есть, NO-NAME. Скорее всего, сделано в Китае. Гарантийные претензии тоже непонятно, кому предъявлять, а они были — в собаке водились глисты длиннее ее самой. К счастью, все это в прошлом. Зверюга подросла. Доказала свою преданность и послушность, за что получила возможность гулять без веревки на шее. Поскольку это не просто собака, а настоящая собака-гуляка, которая привыкла к полноценной четырёхразовой прогулке без поводка (она у меня совсем не агрессивная, но очень любознательная и послушная), ей потребовался своеобразный маячок, чтобы наблюдать ее похождения даже в темноте, и не нервничать, куда ж она подевалась. А подеваться ей есть куда — ее любимое занятие — приносить палки хозяину, и требовать, чтобы он ее кинул. Ну а найти-уж ее дело. Но это ж не простая собака, а собака, у которой папка — программист и немножко электронщик. Впрочем, даже простой ошейник с DealExtreme приковывает взгляды окружающих, особенно радуются дети. Разве это не стоит того? Но начнем с начала. Под катом много текста!
Итак, у меня есть собака.
Краткое резюме:
Кличка: Белка
Окрас: Белый с рыжим
Порода: Западносибирская лайка с кем-то еще
Происхождение: Дворянское
Стоимость: 0р 0к
Собака была приобретена в собственном подъезде за еду и кров. Была выброшена какими-то негодяями без еды и воды в картонной коробке без фирменных логотипов породы и адреса завода-изготовителя. Ну да не важно, мы и с менее качественным товаром имели дело, а тут такая рыжая морда, и совсем бесплатно. Берем!
Пришлось принимать товар как есть, NO-NAME. Скорее всего, сделано в Китае. Гарантийные претензии тоже непонятно, кому предъявлять, а они были — в собаке водились глисты длиннее ее самой. К счастью, все это в прошлом. Зверюга подросла. Доказала свою преданность и послушность, за что получила возможность гулять без веревки на шее. Поскольку это не просто собака, а настоящая собака-гуляка, которая привыкла к полноценной четырёхразовой прогулке без поводка (она у меня совсем не агрессивная, но очень любознательная и послушная), ей потребовался своеобразный маячок, чтобы наблюдать ее похождения даже в темноте, и не нервничать, куда ж она подевалась. А подеваться ей есть куда — ее любимое занятие — приносить палки хозяину, и требовать, чтобы он ее кинул. Ну а найти-уж ее дело. Но это ж не простая собака, а собака, у которой папка — программист и немножко электронщик. Впрочем, даже простой ошейник с DealExtreme приковывает взгляды окружающих, особенно радуются дети. Разве это не стоит того? Но начнем с начала. Под катом много текста!
+107
Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Работает в
- Зарегистрирован
- Активность