Pull to refresh
226
0
Илья Струков @iley

Программист

Send message

Да, я всё ещё хочу заниматься этим, когда мне исполнится 56 лет

Reading time3 min
Views52K
Ты правда хочешь продолжать заниматься этим, когда тебе исполнится 50 лет?
Больше ли стресса в больших масштабах разработки? Должен признать, что да. Все-таки, это удел молодых.
Нет, это удел глупых. Мне 55 и я занимаюсь профессиональным программированием с 1981, а начал ещё когда был в школе, в 1973 или около того. И что я выяснил за это время, так это то, что сам по себе кодинг до полусмерти не имеет смысла.

Мой недавний пост «Почему я не занимаюсь сверхурочной работой бесплатно и вам не советую» остаётся самым популярным из моих постов каждую неделю с момента его написания. Так что, похоже, не я один считаю, что кодинг до полусмерти — это пустая трата времени. Но не буду повторяться.
Читать дальше →
Total votes 157: ↑147 and ↓10+137
Comments85

Цитаты о языках программирования

Reading time3 min
Views40K
Что учёные, писатели и программисты думают о популярных языках программирования.

Все языки


«Есть два подхода к программированию. Первый — сделать программу настолько простой, чтобы в ней очевидно не было ошибок. А второй — сделать её настолько сложной, чтобы в ней не было очевидных ошибок.»
Tony Hoare. Профессор, занимался реализацией Алгол 60, сейчас исследователь в Microsoft Research.


Algol 60 (позже повлиявший на C)


«Я не мог устоять перед искушением добавить в язык нулевой указатель (null), просто потому, что его так легко было реализовать. Это привело к бессчётному множеству ошибок, уязвимостей и сбоев, которые нанесли ущерб, наверное, в миллиард долларов за последние сорок лет.»
Tony Hoare.
Читать дальше →
Total votes 256: ↑235 and ↓21+214
Comments103

Копирайт на команду /bin/true

Reading time3 min
Views20K
Среди всей этой шумихи по поводу авторских прав есть один забавный пример — это крайний случай использования копирайта, который породила AT&T где-то в 1980-х. Речь идёт о программе /bin/true. Это пустая программа, которую обычно используют только для того, чтобы писать бесконечные циклы (while true do ...) в шелл-скриптах. Программа «true» не делает ничего, а только завершается с нулевым кодом. Такого поведения легко добиться — достаточно просто создать пустой файл и сделать его исполняемым, что и делали создатели первых Unix-систем. Пустой файл интерпретируется как шелл-скрипт, который не делает ровным счётом ничего. А, поскольку у него это вполне успешно получается, шелл возвращает нулевой код завершения. Но юристы AT&T решили, что это не помешает защитить копирайтом.
Читать дальше →
Total votes 246: ↑229 and ↓17+212
Comments62

Разница между bin, sbin, usr/bin, usr/sbin

Reading time3 min
Views56K
30 ноября 2010 года Дэвид Коллиер (David Collier) писал:
Я заметил, что в busybox ссылки разложены по этим четырём директориям.
Есть ли какое-то простое правило, чтобы определить, в какой директории какая из ссылок должна лежать…
К примеру, kill лежит в /bin, а killall — в /usr/bin… Я не вижу никакой логики в таком разделении.

Вы, наверное, знаете, что Кен Томпсон и Дэннис Ритчи создали Unix на PDP-7 в 1969-ом. Так вот, примерно в 1971 они проапгрейдились до PDP-11 с парой дисков RK05 (по 1,5 мегабайта каждый).

Когда операционная система разрослась и перестала помещаться на первом диске (на котором была расположена корневая ФС), они перенесли часть на второй, где располагались домашние директории (поэтому точка монтирования называлась /usr — от слова user). Они продублировали там все необходимые директории ОС (/bin, /sbin, /lib, /tmp ...) и складывали файлы на новый диск, потому что на старом кончилось место. Потом у них появился третий диск, они примонтировали его в директории /home и перенесли туда домашние директории пользователей, чтобы ОС могла занять всё оставшееся место на двух дисках, а это были целых три мегабайта (огого!).
Читать дальше →
Total votes 243: ↑233 and ↓10+223
Comments149

Преимущества Common Lisp

Reading time15 min
Views34K
Лисп часто рекламируют как язык, имеющий преимущества перед остальными из-за того, что он обладает некоторыми уникальными, хорошо интегрированными и полезными фичами.

Далее следует попытка выделить набор особенностей стандартного Common Lisp, кратко и с примерами.

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

Текст по большому счёту основан на списке особенностей CL и обзоре CL Роберта Стренда (Robert Strandh).
Читать дальше →
Total votes 83: ↑78 and ↓5+73
Comments120

Решая не ту проблему

Reading time2 min
Views1.2K
Время от времени я вступаю в обсуждения о том, что я писал, чтобы узнать, каковы общие настроения и не сделал ли я какую-нибудь ужасную ошибку, о которой мне просто никто не сказал. Самые неожиданные комментарии, которые я встретил, касались того, насколько быстро этот сайт загружается, ведь для большинства страниц нужно всего два запроса — один на HTML-файл и один на CSS, — в сумме меньше десяти килобайт, и что это впечатляет.

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

Но у меня есть чёткое представление о том, как люди взаимодействуют с блогом: они его читают. Все кроме меня делают с сайтом prog21 одно и то же — они открывают страницы и читают их. Нет никакой магии в том, чтобы раздавать простые статические страницы. Что удивительно — так это то, что большинство разработчиков движков блогов решают не те проблемы.
Читать дальше →
Total votes 121: ↑97 and ↓24+73
Comments75

Самые важные решения — не технические

Reading time2 min
Views1.2K
Меня время от времени озадачивают вопросами в связи с мимолётной заметкой, которую я сделал в 2010, по поводу того, что я больше не программирую ради заработка. Это правда. Я не работал в качестве full-time программиста с 2003-го. Короткая версия этих вопросов — «Почему?». Более длинная версия — «Слушай, ты ведёшь супер-технический блог о программировании и, похоже, ты знаешь все эти штучки, но неужели ты не хочешь работать программистом?».
Читать дальше →
Total votes 61: ↑46 and ↓15+31
Comments29

Пишем свою ОС: Выпуск 1

Reading time6 min
Views265K
Данный цикл статей посвящён низкоуровневому программированию, то есть архитектуре компьютера, устройству операционных систем, программированию на языке ассемблера и смежным областям. Пока что написанием занимаются два хабраюзера — iley и pehat. Для многих старшеклассников, студентов, да и профессиональных программистов эти темы оказываются весьма сложными при обучении. Существует много литературы и курсов, посвящённых низкоуровневому программированию, но по ним сложно составить полную и всеохватывающую картину. Сложно, прочитав одну-две книги по ассемблеру и операционным системам, хотя бы в общих чертах представить, как же на самом деле работает эта сложная система из железа, кремния и множества программ — компьютер.

Каждый решает проблему обучения по-своему. Кто-то читает много литературы, кто-то старается поскорее перейти к практике и разбираться по ходу дела, кто-то пытается объяснять друзьям всё, что сам изучает. А мы решили совместить эти подходы. Итак, в этом курсе статей мы будем шаг за шагом демонстрировать, как пишется простая операционная система. Статьи будут носить обзорный характер, то есть в них не будет исчерпывающих теоретических сведений, однако мы будем всегда стараться предоставить ссылки на хорошие теоретические материалы и ответить на все возникающие вопросы. Чёткого плана у нас нет, так что многие важные решения будут приниматься по ходу дела, с учётом ваших отзывов.
Читать дальше →
Total votes 293: ↑282 and ↓11+271
Comments223

Вышел GDB 7.1

Reading time1 min
Views1.9K
Вышла новая версия замечательного консольного отладчика GDB. Изменения:
  • Добавлена поддержка мультипрограммной отладки (т.е. теперь можно работать с несколькими программами в рамках одной сессии отладки)
  • Добавлена поддержка Position Independent Executable (PIE)
  • Поддержка платформ Xilinx MicroBlaze и Renesas RX
  • Улучшения в поддержке Python (напомню, что для GDB можно писать скрипты на Python)
  • Расширена поддержка C++
  • Новые возможности при работе с tracepoint'ами
  • Улучшения в записи процессов (Process Record)
  • Улучшения в протоколе удалённой отладки
Сам я новую версию пока что не «щупал», так что за всеми подробностями, пожалуйста, обращайтесь к документации.

К своему удивлению я не нашёл на хабре топиков, посвящённых этой программе. Поэтому хочу спросить: Интересно ли будет вам прочитать топик по основам отладки в GDB?
Total votes 61: ↑56 and ↓5+51
Comments21

Katahdin: метапрограммирование на грани фантастики

Reading time2 min
Views2.3K
Katahdin — это интерпретируемый язык программирования, в котором синтаксис и семантика могут изменяться во время исполнения. Чтобы идея стала ясна, сразу приведу пример с официального сайта. В примере определяется операция получения остатка от деления ("%" в C, «mod» в Pascal).
class ModExpression : Expression {
  pattern {
    option leftRecursive;
    a:Expression "%" b:Expression
  }
 
  method Get() {
    a = this.a.Get...();
    b = this.a.Get...();
    return a - (b * (a / b));
  }
}

Читать дальше →
Total votes 62: ↑54 and ↓8+46
Comments93

Vim и Visual Studio

Reading time3 min
Views16K
Долгое время я использовал только один текстовый редактор — Vim. Но вот я пришёл на новую работу и ситуация изменилась. Мне было предложено работать над относительно большим (> 300000 строк) коллективным проектом. Проект написан в Visual Studio, в качестве системы контроля версий используется MS Source Safe. Мысль писать в VS мне сразу не понравилось, но, поскольку все остальные условия меня более чем устраивали, я согласился.

Несколько дней я поработал в «пустой» VS и понял, что долго так продолжаться не может. Слишком уж неудобным показался редактор студии после нескольких лет регулярного использования Vim. И я начал искать способ продолжать работу над проектом и при этом использовать свой любимый редактор.

Непродолжительный поиск дал следующие варианты частичного решения проблемы.
Читать дальше →
Total votes 58: ↑40 and ↓18+22
Comments199

Юмор: У системы выходной

Reading time1 min
Views909
Пришёл я сегодня на работу — сроки горят, приходится работать сверхурочно. Запускаю систему, которую мы разрабатываем — и вижу Exception.

Начали разбираться. Выяснилось, что в системе для статистики вычисляется такое выражение
X = (число дней когда система использовалась) / (число рабочих дней с начала месяца).

Так вот если начало месяца приходится на выходной — система в этот день не работает! И этой ошибке, похоже, уже несколько лет.
Total votes 31: ↑24 and ↓7+17
Comments7

Идея для блога: Linux не для всех

Reading time1 min
Views788
В последнее время на Хабре популярностью пользуется блог «Linux для всех». И среди постов в этом блоге встречаются вещи, интересные как для новичков, так и для искушённых пользователей. Однако такая широкая направленность блога в отдельных ситуациях бывает неудобна. Например, иногда хочется рассказать о какой-нибудь тонкости, понятной и доступной лишь небольшому кругу специалистов, не мешая при этом большинству не столь хорошо осведомлённых людей. Или напротив, хочется почитать только сообщения людей с большим опытом работы с системой, глубоко понимающих обсуждаемые проблемы.

Именно для таких целей я предлагаю создать отдельный блог. Название «Linux не для всех» по сути отражает его идею. Не хочу чтобы меня поняли неправильно, поэтому подчеркну, что создание такого блога — это ни в коем случае не попытка выделить среди Хабраюзеров какую-то элиту, цель его — просто отделить узкоспециализированные статьи от статей общей тематики и при этом собрать вместе.

Как вы считаете, найдёт ли подобный блог свою аудиторию и нужен ли он вообще сообществу?
Total votes 32: ↑23 and ↓9+14
Comments16

C++ и дружба

Reading time1 min
Views1.7K
Открыл для себя забавный факт: оказывается, у классов в C++ могут быть воображаемые друзья. Пример:

class Fred { <br>
    friend class Joe; <br>
public: <br>
    void dance() { <br>
        //какой-то код <br>
    } <br>
}; <br>
<br>
int main() { <br>
    Fred guy; <br>
    guy.dance(); <br>
    return 0; <br>
} <br>
//конец программы <br>


Заметьте, что в программе нет объявления класса Joe, однако программа компилируется без ошибок (и без предупреждений). То есть Джо не существует, его можно назвать воображаемым другом Фреда. Такое возможно, поскольку отношение дружбы влияет только на компиляцию класса, который объявлен другом. А класс, объявивший кого-то своим другом, будет скомпилирован одинаково независимо от того, что представляют собой его друзья и существуют ли они.
Total votes 29: ↑19 and ↓10+9
Comments10

Как обойтись без MS Office Automation

Reading time1 min
Views1.4K
Передо мной встала задача: надо импортировать данные из программы на .Net в XLS-файл (формат MS Excel). Нужно также уметь задавать для данных в файле шрифты, цвета, параметры печати и прочие бесполезные свойства.

Microsoft предлагает для этого запускать Excel и обращаться к нему. И это — единственный способ работы с форматом, официально поддерживаемый компанией. Само собой разумеется, что на каждом компьютере, на котором будут запускать мою программу должен быть установлен MS Office. И никого не смущает, что даже для записи банальнейшей таблицы из 10 ячеек в файл приходится запускать многомегабайтного монстра — Excel.

В общем, я решил найти другой путь. Как оказалось, существует множество библиотек, работающих с XLS-файлами напрямую, без запуска Excel. Но подавляющее большинство из них — платные.

Из бесплатных библиотек я выделил две:
  • MyXLs — написана на C#, лицензия MIT, поддерживает базовое чтение и запись, форматирование. Проект развивается.
  • JExcelAPI — написана на Java, LGPL, очень мощная библиотека — поддерживает практически всё, что может понадобиться (включая картинки и формулы)

Полнофункциональной бесплатной библиотеки для .Net я, к сожалению, не нашёл. Однако, JExcelAPI без труда запускается с помощью IKVM. Это, конечно, не самое изящное решение, но оно работает. А в тех случаях, когда нужны только базовый функционал можно использовать MyXLs.
Total votes 10: ↑8 and ↓2+6
Comments10

Операционная система — браузер

Reading time4 min
Views19K
Прочитал топик про HabraOS и вспомнил про идею, которая родилась у меня несколько месяцев назад. Погуглив немного, я нашел целых два проекта, реализующих аналогичную систему, но всё равно решил написать подробное изложение идеи. Может наведёт кого-нибудь на мысли.
Далее много текста
Total votes 117: ↑77 and ↓40+37
Comments142

Information

Rating
Does not participate
Location
Dublin, Dublin, Ирландия
Date of birth
Registered
Activity