Category: it

Category was added automatically. Read all entries about "it".

Ларикко Дайнин

30 лет изъясняюсь на языках неестественных

Вспомнил тут вдруг, что первые свои программы я написал 30 лет назад. Осенью 1988 года, не помню уж точно, когда, одноклассник Борис заманил меня на кружок программирования. А потом ещё матушка снабдила книгами, описаниями языков с работы -- она ж тоже программист.

Так что, профессиональный юбилей. И почти 2/3 от прожитого.

Не могу сказать, что я прям супер доволен тем, чего достиг на этом поприще. Хотя на хлеб и бензин вроде пока хватает. ;)

Что б такое устроить в честь юбилея? Может, новую работу найти? Или освоить что-нибудь новое? ;)
Ну и, да, можно бы и отметить как-нибудь.

This entry was originally posted at https://arilou.dreamwidth.org/1833404.html. Please comment there using OpenID.
Ларикко Дайнин

О коварности ежей в костюмах ужей

Ранее я уже высказывал такую концептуальную претензию к языку Java, и на днях снова сплясал по этим граблям.

Синтаксис Java слишком много взял от C++. Якобы для того, чтобы программисты на С++ (точнее, те, кто ничего, кроме С++ не признаёт и не понимает) переходили на Java легко и непринуждённо. Однако при этом в те же одежды синтаксиса порой рядится существенно иная тушка семантики.

На днях я порадовался об обобщённые (универсальные, генерики) методы и классы. Синтаксис мимикрирует под шаблоны C++, однако принципиальное отличие (если я всё верно понял) в том, что генерик-то компилируется ровно один раз и полностью обходится только тем, что ему на тот момент известно, в то время как шаблон на момент инстанцирования знает всё о типах параметров шаблона. Например, может вызвать конструктор объекта типа T (где T — параметр шаблона), обратиться к его статическим полям и методам и т.д.. В случае же джавы этого ничего нет.

И потом, имея, например несколько строк кода, однотипного для двух десятков мелких классов, и использующего в одном месте выражение вида MyClass.class, я, если хочу заменить их обобщённым методом, должен этот самый MyClass.class передавать ещё одним параметром в обобщённый метод. Хотя, казалось бы, из типа использованных параметров ясно, какой там класс в каждом конкретном вызове. (И подумалось, что вообще-то потребность в этом параметре известна на момент компиляции генерика, и он может потребовать, чтобы ему этот параметр при вызове неявно передавали, избавляя человека от лишней писанины.)

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

В общем, моя претензия к джаве в неоправданной мимикрии под C++ лишь окрепла.

This entry was originally posted at https://arilou.dreamwidth.org/1001535.html. Please comment there using OpenID.
Ларикко Дайнин

Доступность DW в России

Довольно давно уже наблюдается ситуация, что, хотя www.dreamwidth.org открывается (в браузере) без проблем, домены пользователей (arilou.dreamwidth.org, например) -- нет. А альтернативного механизма, когда домен используется основной, а пользователь указывается параметром, как то есть (или было) в ЖЖ, тут нет.

Решение нашлось простое, но требует настройки на каждом устройстве: прописать в hosts всем пользовательским доменам один из IP-адресов основного. Http-заголовок Host они, хавала богам, анализируют и понимают верно.

This entry was originally posted at http://arilou.dreamwidth.org/1000342.html. Please comment there using OpenID.
Ларикко Дайнин

Как поставить qmake без иксов?

Потребовался qmake на удалённом серваке, где иксы мне нафиг не упёрлись.
Поставил пакет qt5-qmake. Он притащил с собой ещё один маленький пакетик. Но при попытке запустить qmake получаю:
qmake: could not find a Qt installation of ''
Поиски ответа пока не дали ничего лучшего, чем ставить qt5-default, который притащит с собой ещё 131 пакет, многие из которых - x11*, libx11*, libx*...
А можно ли как-нибудь без иксов?

Система - Debian 8.3

This entry was originally posted at http://arilou.dreamwidth.org/984405.html. Please comment there using OpenID.
Ларикко Дайнин

Vim

С самого начала, как узнал и освоил редактор vim (лет 15 назад, кажется), воспринимал его название только как сокращение от "Vi IMproved" (или "Vi Improved More").
Сегодня вдруг узнал, что слово 'vim' есть в нормальном человеческом английском. И нельзя сказать, чтобы его значение было совсем уж неподходящим для программы. ;)

This entry was originally posted at http://arilou.dreamwidth.org/983371.html. Please comment there using OpenID.
Ларикко Дайнин

(n)dbm под Python

Нужно мне иметь небольшой файлик данных, вполне достаточно формата ключ-значение.
Ставить ради этого какую-то "серьёзную" базу данных лениво и вряд ли нужно. И sqlite не хочется, потому что лишний слой sql-запросов мне тут нафиг не нужен.
Дикого быстродействия не требуется.
Но и просто вариант текстового файла, перезаписываемого каждый раз целиком, думаю, уже не годится.
Смотрю, что есть в питоне... dbm, gdbm, bsddb (и dbhash поверх него).
В простейшем случае, наверное, можно брать что угодно.
Но всё же, есть ли какие соображения за/против?

This entry was originally posted at http://arilou.dreamwidth.org/981693.html. Please comment there using OpenID.
Ларикко Дайнин

ви́дение vs. реальность

На работе в соседней комнате идёт техническая дискуссия про особенности работы с сетью.
В какой-то момент долетают две фразы:
«
– ...Хорошо, расскажи нам своё ви́дение.
– У меня не ви́дение, я только что перечитал документацию.
»

This entry was originally posted at http://arilou.dreamwidth.org/980606.html. Please comment there using OpenID.
Ларикко Дайнин

[Python] лево-право в итераторе

Вот что меня удивляет в синтаксисе питона, так это почему внутри конструкци итератора (оно же list comprehension) в случае "многоэтажного" цикла самым внешним оказывается самый левый, а не самый правый цикл.
При том, что в случае одиночного цикла этот цикл заключает в себе стоящее слева выражение, было бы логично, чтобы при двух циклках правый заключал в себе левый (а тот, в свою очередь, так же заключал в себе стоящее слева выражение).

This entry was originally posted at http://arilou.dreamwidth.org/979356.html. Please comment there using OpenID.
Ларикко Дайнин

Перезапуск скрипта

Вот такая задачка:
Есть некий скрипт, писанный на питоне, крутится более-менее постоянно (под screen).
Обощённо цикл работы состоит из проверки, не пришли ли "данные" для обработки, и если пришли -- происходит довольно долгая (десятки минут) обработка.
Захотелось его перезапускать для обновления, не ловя момент окончания обработки.

Простейшие варианты:

1) Функции семейства os.exec* -- успешно подменят старый процесс новым, всё замечательно, но если новый почему-либо не стартует, то это надо заметить, потом исправить -- только тогда работа продолжится.

2) Вызвать новый скрипт через subprocess.Popen, убедиться, что он нормально взлетел, после чего завершить старый. Исправляет недостаток первого пункта, но новый скрипт, используя ту же "консоль" (те же stdin/stdiut, stderr), при этом выпадает из jobcontrol'а, т.е. крутится в фоне по отношению к шеллу, из которого был запущен старый скрипт, а из старого мы попадаем обратно в шелл. И при том отт фоновый новый скрипт не может подхватить команда fg.

Есть ли способ избавиться от недостатков обоих методов, не выделяе контроль за перезапуском в отдельный процесс?
Кроссплатформенности от данного механизма (пока?) не требуется.

(На крайняк мне пока годится первый вариант, поскольку перезапуски пока что как правило контролируются вручную, да и короткий даунтайм в общем-то не страшен. Но всё же интересно, может, есть простое решение?)

This entry was originally posted at http://arilou.dreamwidth.org/975307.html. Please comment there using OpenID.
Ларикко Дайнин

Старое доброе ограничение

Вроде бы с нынешними широкими экранами старое правило "строки кода должны быть не длиннее N символов", где N колебалось от 72 до 80, кажется неактуальным. Строка на 160 символов на экране помещается...
Но стоит начать пользоваться двустраничными диффами (когда слева старый вариант, а справа новый), как удобство ограничения в 80-100 или типа того символов тут же актуализируется. ;)

This entry was originally posted at http://arilou.dreamwidth.org/952795.html. Please comment there using OpenID.