Как стать автором
Обновить
17
Карма
0
Рейтинг
Андрей Щеглов @unix_junkie

Пользователь

SMR (черепичные) жесткие диски без указания наличия SMR пошли в каналы продаж

Хранение данныхХранилища данныхКомпьютерное железоНакопители
Recovery mode

Все три производителя начали продажи относительно небольших, от 2ТБ HDD SMR дисков (черепичных), не указывая это в спеках: WD, Seagate, Toshiba

Читать дальше →
Всего голосов 90: ↑82 и ↓8 +74
Просмотры60.2K
Комментарии 270

Eclipse + QT: установка и настройка

Разработка веб-сайтов
Достаточно давно стал присматриваться к кроссплатформенному С++ программированию. Не то, чтобы это было мне необходимо, но так для общего развития. И вот что я могу отметить: самая большая вещь, которая доставляет проблемы на этом пути — достаточно высокий порог вхождения в эту область именно по причине инструментария.

Если не рассматривать случай программирования в Emacs, что лично мне кажется пока неким толи анахронизмом, толи экстримом, постоянно сравнивая различные IDE с Visual Studio зачастую приходилось просто ужасаться. И главная проблема этих систем была в том, что за редким исключением они не работали из коробки без напильника.

Вторая проблема — юзабилити. Зачастую ниже среднего. Ранние версии KDevelop оставляли достаточно неоднозначное впечатление.

Третье, чего бы хотелось — интегрированного дизайнера интерфейсов. Его не было практически нигде, если не считать NetBeans (но только для Java), да MonoDevelop (GTK#). И хотя эти IDE весьма достойны, хотелось найти легкий способ программировать именно на C++ с минимальным количеством граблей.

В этой статье я хочу привести пошаговое руководство, что называется «для чайников», по установке на платформу Windows работоспособной конфигурации хорошей IDE Eclipse и хорошей библиотеки QT. Стартовую площадку, так сказать.

UPD: Что касается именно программирования в QT, то могу порекомендовать просто шикарную книжку на эту тему:
Jasmin Blanchette, Mark Summerfield: Разработка графического интерфейса с помощью QT3 (перевод Андрей Киселёв)

UDP2: Ещё литература:
Русский перевод документации из QAssistant
Qt4. Профессиональное программирование на C++
Jasmin Blanchette, Mark Summerfield: Qt 4. Программирование GUI на C++
Foundations of QT Development

Читать дальше →
Всего голосов 46: ↑42 и ↓4 +38
Просмотры51K
Комментарии 97

Конец халяве: I Know What You Download

Социальные сети и сообщества
Recovery mode
Продолжение (часть 2).
Не понимаю, почему никто не кричит «полундра» (поискал здесь и на Хабре по слову «iknowwhatyoudownload», но ничего).

Итак, некий сайтик iknowwhatyoudownload.com по IP-адресу показывает список торрентов, скаченных и розданных с этого адреса.
Судя по всему, запустились недавно. Домен зарегистрирован 14 сентября 2016. Отображается статистика примерно за месяц. Но как долго она собиралась, неизвестно.
Читать дальше →
Всего голосов 88: ↑72 и ↓16 +56
Просмотры257.8K
Комментарии 575

Посмотри, что ты скачал в торрентах

Децентрализованные сети
«Здравствуй, пират! Твой IP-адрес есть в нашей базе данных. Любишь скачивать торренты, правда? По крайней мере, кто-то в твоём доме точно любит. Судя по нашим записям, ты скачал несколько файлов в последнее время. Внизу ты видишь табличку с некоторыми примерами», — такими словами приветствует посетителей новый веб-сервис YouHaveDownloaded.com, созданный нашими соотечественниками. Ведущие разработчики Руслан К. и Илья Р. (на фото) на всякий случай скрывают свои фамилии, мало ли что.

Сервис позволяет посмотреть список скачанных файлов по заданному IP-адресу. Чтобы избежать наложений из-за динамических IP, якобы учитываются временные метки и уникальные метки компьютеров из DHT, но сидящие за NAT могут чувствовать себя в безопасности.
Читать дальше →
Всего голосов 92: ↑72 и ↓20 +52
Просмотры40K
Комментарии 160

Компилируем, как будто на дворе 1992 год

Разработка игрКомпиляторы
Перевод
image

Я изучал ванильный исходный код игры Wolfenstein 3D 1992 года. Несмотря на то, что ей уже 25 лет, и она совершенно устарела для современных платформ, её всё равно можно скомпилировать, если воссоздать окружение.

Для этого требуется всего лишь:

  • Исходный код Wolfenstein 3D.
  • DosBox.
  • Компилятор Borland C++ 3.1.
  • Wolfenstein 3D shareware (чтобы позаимствовать ресурсы).
Читать дальше →
Всего голосов 104: ↑103 и ↓1 +102
Просмотры36.8K
Комментарии 38

Ненормальное реактивное программирование

Высокая производительностьНенормальное программированиеПрограммированиеJavaФункциональное программирование

Еще одна статья про реактивное программирование. И только не надо на этой строчке закатывать глаза и томным голосом говорить вслух — "Ну что еще ты можешь мне рассказать про реактивное программирование… а?". Она немного отличается от кучи других, написаных словно под копирку, поэтому некоторые вещи в ней могут показаться… странными или даже совершенно неуместными, как сортирный юмор.


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


Будет интересно.

Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Просмотры7.3K
Комментарии 20

Первый русский программист

Ненормальное программирование
Recovery mode
13 декабря — день памяти русского ученого и изобретателя, чьим желанием было подарить человечеству программирование и сделать это бескорыстно, без прибыли и славы. Его желание сбылось — мир получил программирование, а его имя оказалось в тени. Однако негоже держать светильник под кроватью, и нет ничего тайного, что не стало бы явным.
Читать дальше →
Всего голосов 18: ↑12 и ↓6 +6
Просмотры5.9K
Комментарии 5

CreateRemoteThread для Linux

Ненормальное программированиеСистемное программированиеCРазработка под Linux
Tutorial

Мицуха несёт новые потокиВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.


В целом эта функция обладает сомнительной прикладной полезностью, поэтому не удивительно, что в Linux готового аналога CreateRemoteThread нет. Однако, мне было интересно, как он может быть реализован. Изучение темы вылилось в неплохое приключение.


Я подробно расскажу о том, как с помощью спецификации ELF, некоторого знания архитектуры x86_64 и системных вызовов Linux написать свой маленький кусочек отладчика, способный загрузить и исполнить произвольный код в уже запущенном и работающем процессе.


Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.

Читать дальше →
Всего голосов 76: ↑75 и ↓1 +74
Просмотры10.8K
Комментарии 27

Как я на спор развернул двусвязный список за O(1)

PixonicНенормальное программированиеЗанимательные задачкиПрограммирование

Как-то раз я случайно увидел, как мой коллега решает джуниорскую задачку разворачивания двусвязного списка на C++. И в тот момент странным мне показалось не то, что он лид и давно перерос подобное, а само решение.

Вернее, не так.

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

  • Почему по умолчанию все решают задачу именно так?
  • Можно ли сделать лучше?
Читать дальше →
Всего голосов 192: ↑154 и ↓38 +116
Просмотры58.3K
Комментарии 124

Что такое grep и с чем его едят

Настройка LinuxСистемное администрирование*nix
Эта заметка навеяна мелькавшими последнее время на хабре постами двух тематик — «интересные команды unix» и «как я подбирал программиста». И описываемые там команды, конечно, местами интересные, но редко практически полезные, а выясняется, что реально полезным инструментарием мы пользоваться и не умеем.
Небольшое лирическое отступление:
Года три назад меня попросили провести собеседование с претендентами на должность unix-сисадмина. На двух крупнейших на тот момент фриланс-биржах на вакансию откликнулись восемь претендентов, двое из которых входили в ТОП-5 рейтинга этих бирж. Я никогда не требую от админов знания наизусть конфигов и считаю, что нужный софт всегда освоится, если есть желание читать, логика в действиях и умение правильно пользоваться инструментарием системы. Посему для начала претендентам были даны две задачки, примерно такого плана:
— поместить задание в крон, которое будет выполняться в каждый чётный час и в 3 часа;
— распечатать из файла /var/run/dmesg.boot информацию о процессоре.

К моему удивлению никто из претендентов с обоими вопросами не справился. Двое, в принципе, не знали о существовании grep.

image

Поэтому… Лето… Пятница… Перед шашлыками немного поговорим о grep.
Читать дальше →
Всего голосов 188: ↑174 и ↓14 +160
Просмотры484.2K
Комментарии 144

Bash Co-Processes

Системное администрирование*nix
Перевод
Одной из новых функций в Bash 4.0 является coproc. Оператор coproc позволяет создавать со-процесс, который связан с командной оболочкой с помощью двух каналов: один для отправки данных в со-процесс, второй для получения из со-процесса.

Впервые я нашёл применение этому пытаясь писать лог используя перенаправление exec. Цель состояла в том, чтобы опционально разрешить запись вывода скрипта в лог-файл после запуска сценария (например, вследствие опции --log командной строки).

Основная проблема с логированием вывода после того как скрипт стартовал связана с тем, что его вывод уже мог быть перенаправлен (в файл или канал). Если мы перенаправим уже перенаправленный вывод, то не сможем выполнить команду так, как это было задумано пользователем.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры8.8K
Комментарии 3

Дёргаем цепочку сертификатов

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

На 4-м сертификате дёргать их вручную стало лень (а я ленив по натуре), поэтому набросал «самокат» выцепляющий издателя и формирующий chain-файл для скармливания nginx'у.
Наверняка он не идеален и проверен лишь на полуторадесятках сертификатов, но чем богаты.

Об устройстве x.509 много сказано (в том числе на хабре), поэтому повторяться не буду.

Ниже просто пошаговая инструкция получения цепочки вперемешку с небольшой выжимкой из теории и не более того.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры21K
Комментарии 3

Сопроцессы: -что, -как, -зачем?

Системное администрирование*nixОболочки
Многие пользователи Bash знают о существании со-процессов, появившихся в 4-й версии Bash'a. Несколько меньшее количество знает о том, что сопроцессы в Bash не какая-то новая фича, а древний функционал KornShell'a появившийся ещё в реализации ksh88 в 1988 году. Ещё меньшее количество пользователей shell'ов умеющих сопроцессить знают синтаксис и помнят как это делать. Вероятно, я отношусь к четвёртой группе — знающих о сопроцессах, периодически умеющих ими пользоваться но так и не понимающих «зачем?». Я говорю «периодически», так как иногда я освежаю в голове их синтаксис, но к тому моменту, когда мне кажется что «вот тот случай когда можно применить co-proc» я уже напрочь забываю о том как это делать.

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

В заголовке статьи у нас 3 вопроса. Пойдём по порядку.

Что?


Что же такое co-process? Со-процессинг — это одновременное выполнение двух процедур, одна из которых считывает вывод другой. Для его реализации необходимо предварительно запустить фоновый процесс выполняющий функционал канала. При запуске фонового процесса его stdin и stdout присваиваются каналам связанными с пользовательскими процессами. Соответственно, один канал для записи, второй для чтения. Пояснять это проще на примерах, поэтому сразу перейдём ко второму вопросу.
Читать дальше →
Всего голосов 58: ↑57 и ↓1 +56
Просмотры19.3K
Комментарии 36

Когда 'a' не равно 'а'. По следам одного взлома

Настройка LinuxИнформационная безопасностьСистемное администрированиеNginx*nix
Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.

Надо сказать, что приятель мой вполне себе UNIX-пользователь: может сам поставить систему, установить mysql, php и сделать простейшие настройки nginx.
И есть у него десяток-полтора сайтов посвященных строительным инструментам.

Один из таких сайтов, посвященный бензопилам, плотненько сидит в ТОПe поисковиков. Сайт этот — некоммерческий обзорник, но кому-то поперек горла и повадились его атаковать. То DDoS, то брутфорс, то комменты напишут непотребные и шлют абузы на хостинг и в РКН.
Неожиданно всё стихло и это затишье оказалось не к добру, а сайт начал постепенно покидать верхние строчки выдачи.

image

То была присказка, дальше сама админская байка.

Время близилось ко сну когда раздался звонок телефона: «Сань, ты не глянешь мой сервер? Мне кажется меня хакнули, доказать не могу, но ощущение не покидает уже третью неделю. Может мне просто пора лечиться от паранойи?»
Читать дальше →
Всего голосов 399: ↑393 и ↓6 +387
Просмотры107.6K
Комментарии 73

А был ли who на сервере?

Настройка LinuxСистемное администрирование*nix
Тяпница… тринадцатое… всё важное решили оставить на понедельник, а потому сделаю какую-нибудь гадость…
В связи с появивишимся на хабре пересказом статьи решил немного отбалансировать данное руководство. Скрыть своё посещение, конечно, не совсем тривиально, но особых сложностей это не составляет.
Итак, задача:
Войти на сервер, выполнить некие действия и «подмести» за собой.

Здесь и далее считаем, что никаких дополнительных инструментов слежения( за исключением «по умолчанию») в системе не используется и мы знаем пароль root'a.

С чем работаем:

# uname -ori
FreeBSD 10.0-RELEASE GENERIC

# `echo $SHELL` --version
tcsh 6.18.01 (Astron)

Описываемое ниже несколько диссонирует с упоминаемой выше статьей, т.к. оная в первую очередь ориентирована на Linux-пользователей, но общие принципы теже и после перехода во FreeBSD(c 9.0) на хранение данных в utmpx родство стало ближе.

Поехали…
Читать дальше →
Всего голосов 19: ↑18 и ↓1 +17
Просмотры24.3K
Комментарии 15

В поисках LD_PRELOAD

Информационная безопасностьНенормальное программированиеСистемное администрирование*nixC
Эта заметка была написана в 2014-м году, но я как раз попал под репрессии на хабре и она не увидела свет. За время бана я про неё забыл, а сейчас нашёл в черновиках. Думал было удалить, но авось кому пригодится.



В общем, небольшое пятничное админское чтиво на тему поиска «включенного» LD_PRELOAD.
Читать дальше →
Всего голосов 67: ↑67 и ↓0 +67
Просмотры12.5K
Комментарии 9

JetBrains CLion для микроконтроллеров

C++CРазработка робототехникиПрограммирование микроконтроллеровРазработка для интернета вещей
Перевод
Tutorial

Предыстория



CLion — это среда для разработки на С/С++, близкий родственник IntelliJ IDEA и, соответственно, Android Studio.


Я представляю вниманию сообщества перевод моего блог поста, в котором по шагам описано, как использовать эту IDE для написания прошивок микроконтроллеров.

Читать дальше →
Всего голосов 44: ↑43 и ↓1 +42
Просмотры29.9K
Комментарии 67

Как доказать свое авторство на ПО

Зарцын и партнерыЗаконодательство в ITПатентование
Tutorial


В начале года мы публиковали «Кейс года по версии юристов», который прочитали многие. Но мы не сказали главного: что же делать, если заказчик хочет оставить вас без штанов?

Кто предупрежден, тот вооружен. И не надо думать, что с вами такого не случится. Разве что вы стоите по ту сторону баррикад и кидаете своих разрабов направо и налево. Тогда пролистайте эту статью в своей ленте. Сейчас мы будем учить разработчиков ПО тому, как подготовиться к атакам мерзавцев разных пород и размеров.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры11.3K
Комментарии 4

Как линейное время превращается в Windows в O(n²)

Клиентская оптимизацияРеверс-инжинирингРазработка под Windows
Перевод
image

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

Для меня очень важно подбирать хорошие заголовки для своих постов, но я сразу же вспомнил, что подходящее название «48 ядер заблокированы девятью инструкциями» уже занято [перевод на Хабре] постом, написанным меньше месяца назад. Количество заблокированных процессоров отличается, а цикл немного длиннее, но на самом деле всё это заставляет испытывать дежавю. Поэтому пока я объясняю новую найденную проблему, мне был хотелось поразмыслить над тем, почему это случается постоянно.

Почему это происходит?


Грубо говоря, такие проблемы возникают вследствие наблюдения, которое я назову Первым законом Доусона о вычислениях: O(n2) — это магнит для алгоритмов, которые плохо масштабируются: они достаточно быстры, чтобы попасть в продакшен, но достаточно медленны, чтобы всё портить, когда туда попадут.


O(n2) в действии — данные взяты из моего случая
Читать дальше →
Всего голосов 88: ↑87 и ↓1 +86
Просмотры34.9K
Комментарии 54

Портирование ОС на Aarch64

EmboxПрограммированиеAssemblerСистемное программирование

Aarch64 — это 64-битная архитектура от ARM (иногда её называют arm64). В этой статье я расскажу, чем она отличается от "обычных" (32-битных) ARM и насколько сложно портировать на него свою систему.


Эта статья — не детальный гайд, скорее обзор тех модулей системы, которые придётся переделать, и насколько сильно архитектура в целом отличается от обычных 32-битных ARM-ов; всё это по моему личному опыту портирования Embox на эту архитектуру. Для непосредственного портирования конкретной системы так или иначе придётся разбираться с документацией, в конце статьи я оставил ссылки на некоторые документы, которые могут оказаться полезны.

Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Просмотры10.6K
Комментарии 4

Информация

В рейтинге
5,812-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность