Про безумие

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

Тема статьи которую я прочел сегодня, вызывает у меня недоумение… хотя это мягко сказано. Я вообще не понимаю как это возможно придумать…. Речь о цепных квайнах. Так называются программы, которые при запуске производят исходники других программ, которые при запуске выдают исходники других программ …. и т.д. N раз, а в конце получаешь исходник самой первой программы!!!! Причем:

программы, использующие внешние данные, куайнами не считаются; то есть исключается прочтение текста программы из файла, ввод его с клавиатуры и так далее. Кроме того, не считается куайном «программа», не содержащая вообще никакого кода (вырожденный случай).

(отсюда)

Если честно, то я даже некоторых языков таких не знаю, которые используются в цепном квайне 50го порядка. А кто-то его придумал! Есть о чем подумать на досуге.

Системные вызовы Linux и Windows

Последние пару недель изучаю ассемблер, по ходу дела возникают разные мысли и вопросы, на которые успешно отвечает гугль. Нагуглил сейчас пост на stackoverflow о системных вызовах в linux и windows: http://stackoverflow.com/questions/2489889/system-calls-in-windows-native-api

Почитал, повеселился, настроение улучшилось. Что развеселило? Еще одно подтверждение того, что форточки – это нагромождение костылей и велосипедов размером с небоскреб. Linux конечно тоже не идеален, но с точки зрения программиста – архитектура этой системы гораздо логичнее и правильнее.

Microsoft Visual Studio Code, под Linux, Mac, Windows

2i8a9082

Почти первоапрельская новость обнаружилась 29.04.2015 на большинстве айтишных ресурсов, компания Microsoft на конференции Build 2015, объявила о разработке новой редакции, теперь уже кроссплатформенной среды разработки “Visual Studio Code”. С поддержкой Linux, Mac OS и Windows. Читать

Доклад Алексея Шепилева. JAVA Benchmarking

Было дело задумывался я померять производительность java приложения. Многие наверное задумывались, как бы замерить производительность какого-то кода, и многие (как и я) думали, что это достаточно просто. Вот вам крайне рекомендую посмотреть этот доклад. Рассматриваються очень интересные, и порой не очевидные ньюансы.



Java: распределенные вычисления

Просмотрел сейчас запись выступления Алексея Рагозина на встрече jug.ru от 12.12.13, интересные вещи рассказывает, не вольно поймал себя на мысли, что ищу варианты, чего бы распределенно посчитать. Кроме перебора забытого пароля на rar архив, ничего не придумалось.

В общем рекомендую к просмотру.

 

Кое что о SED

В жизни любого айтишника, бывают моменты, когда нужно сделать много однообразной работы, но инструментами, которые могли бы помочь автоматизировать процесс не владеешь. И тут возникает вопрос, что быстрее: потратить время, научиться пользоваться инструментом, и потом сделать все за 5 минут, или потратить время и сделать все в ручную.

Зачастую, сделать в ручную быстрее, если конечно не думать о том, что возможно придется еще не раз делать эту работу, а обычно так и бывает!

Так случилось, что сегодня мне нужно было в пяти мегабайтном CSV файле из почти 100 000 строк заменить сперва все запятые на точку с запятой, а затем все точки на запятые. Не буду вдаваться в подробности, но сперва, я попробовал как обычно открыть его в Libre  Office Calc. Точнее открыл то я его без проблем, а вот операция “поиск с заменой” подвесила редактор на долго. Прождав минут 10, я его прибил. Решил, что старый добрый nano сделает это быстрее. Хрен там было!

Любой смыслящий в линукс, скажет – в SED это сделать легко, но так уж вышло, что для меня SED это тот самый инструмент, который изучить все не доводилось. Но решил попробовать. Нашел довольно хороший мануал для новичков, и блин эта ацкая прога перемолола файл примерно за 2 СЕКУНДЫ!!!!

Сказать что я был удивлен – ничего не сказать. Я сперва подумал, что команду не правильно ввел…. Но все было верно. Ниже перепост того мануала. Автору ОГРОМНОЕ СПАСИБО. Ссылка на оригинал в конце.

Читать

Спорим в твоем приложении есть утечки памяти?

Посмотрел доклад… с интересом. Суть в том, что какой бы ты не был крутой программист, но почти гарантированно в твоем софте есть утечки памяти. В 99% случаев это баги сторонних библиотек. В общем начинающим Java разработчикам обязательно к просмотру.



OpenJDK

Посмотрел доклад Артема Ананьева о OpenJDK.

Рассказывал он о том, что такое OpenJDK, чем отличается от Oracle JDK, как разрабатывается, как присоедениться к процессу разработки, и т.д.

В результате снес на домашнем компе Oracle JDK (т.к. есть сложности с обновлением), и поставил OpenJDK. Как оказалось разницы почти никакой, хотя я был почему то уверен, что OpenJDK это полностью с нуля переписанная реализация JDK от Oracle. В общем, есть смысл посмотреть.



TARGET, HOST и BUILD в autoconf

Разбираюсь с кросскомпиляцией пакета, нашел интересное и понятное объяснение отличий опиций target, build и host в autoconf.
--build: это машина на которой вы компиляете.
--host: машина для которой компилируете.
--target: машина для которой GCC сгеренинует бинарник.

Как указано в GCC documentation (Host/Target specific installation notes):

Если build, host и target одинаковые, это называется “нативная компиляция”(native).

Если build, host одинаковые, а target отличается, это называется: кросс-компиляция(cross).

Если build, host, target все разные, это называется канадская компиляция (canadian), назвали так в честь политической партии канады, у которых видимо обещания с делами сильно расходятся ))

Если target и host одинаковые, а build отличается, то вы используете кросс-компиляцию для сборки нативного бинарника для другой системы. (иногда это называют host-x-host, crossed native, или cross-built native.)

Если build и target одинаковые, а host отличается, то вы используете кросс-компилятор, чтобы скомпилять кросс-компилятор, для машины на которой в данный момент компиляете. (Иногда и такое бывает.)

 

PS. Убил кучу времени пытаясь скомпилить i386 код на amd64 системе. После каждой компиляции проверял полученный бинарник с помощью file. В результате получил заветные:

root@host:/home/serp/sbin# file zabbix_agentd
zabbix_agentd: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x80351655fa042fd59e60f87c61433eaf9f713e4d, not stripped

Помогло конфигурирование с помощью:

CFLAGS=”-m32″ ./configure –enable-agent –with-mysql –with-net-snmp –enable-static  –prefix=/home/serp/zabbix_compiled –host=i386

Занимательная археоелогия

Прочитал на хабре статью, автор которой проанализировал исходники DOS 1.1 и WORD 1.1a.  Много интересного для себя открыл. Пересказывать не буду, оригинал можно почитать тут: http://habrahabr.ru/company/pvs-studio/blog/217921/

В книге “Хакеры: Герои компьютерной революции”, объясняется, что основное занятие хакеров – это написание инструментов для написания инструментов, для того чтобы делать “правильные вещи”. И тут я не опечатался. Прикол в том, что ни один смертный этой работы не ощущает. Далеко не каждый программист способен ощутить, как много эти люди делают для индустрии программного обеспечения. Почему я так подумал? Да элементарно! С какой легкостью СЕГОДНЯ с помощью современного ИНСТРУМЕНТА человек сумел оперативно найти кучу недоработок в немаленькой программе, которую писал не один человек, и не два…

А ведь и сейчас есть такие же хакеры (слово заезженное, поэтому, в современных реалиях имеет несколько искаженный смысл), которые делают инструменты, что бы делать инструменты… Двигающие ту самую Computer Scienсe, но результат работы которых мы сможем ощутить не скоро…

Для того, что бы понять это, почувствовать, нужно много лет. В общем занятие не для любителей славы и известности.