LINUX.ORG.RU

Сообщения satanic-mechanic

 

Рабочее место релоканта

Галерея — Рабочие места

Несколько месяцев назад переехал из Минска в Лиссабон, осваиваюсь на новом месте.

  • Стол из Ikea с регулировкой высоты (меняю положение сидя/стоя по нескольку раз в день).
  • Мониторы – довольно старые P2719H, если не изменяет память, но обновляться смысла особого не вижу.
  • Слева macbook pro 16-ка, последняя модель на Intel, i9, 32гб оперативки, модель 2019-го, но все еще торт. Это мой основной рабочий ноут плюс на нем же осуществляется все связанное с музыкой (так как количество вещей, которые можно было взять с собой при переезде весьма ограниченно, почти вся аппаратура осталась в Беларуси, играю в «плагины»). На мониторе открыт Reaper с проектом, над которым работаю.
  • Справа thinkpad 480s, на котором программирую в удовольствие. Насколько знаю, последняя модель из компактных, где память не распаяна полностью, благодаря чему поставил планку в 32гб и имею в итоге на борту 40гб оперативной памяти). На этом ноутбуке стоит Arch Linux, в качестве WM использую тайловый Awesome. На мониторе открыт Emacs, в котором пишется raytracer на OCaml (когда-то очень нравился этот язык, недавно глянул, в последнее время прям бурно развивается, вот решил тряхнуть стариной).
  • Еще правее планшет Galaxy Tab 8 plus, наверное лучший, что у меня был. На самом деле он редко стоит именно так, обычно используется для чтения книг с заметками, а также вместо тетрадки: рукописный ввод в нем великолепен, без заметной задержки.
  • Между ноутбуками Arturia Minilab 3, куплена уже здесь в качестве небольшой midi-клавиатуры. Неожиданно приятное устройство для такого компактного размера.
  • Справа мой Warwick Thumb NT 6, лучший бас, который я когда-либо держал в руках. Один из двух инструментов, которые взял с собой, чему несказанно рад.

>>> Просмотр (1280x960, 169 Kb)

 , , , ,

satanic-mechanic
()

Редирект в RSS

Форум — Linux-org-ru

Есть проблема с некоторыми онлайн-RSS-ридерами, которые не различают URL'ы с www и без оных, которая является следствием несколько некорректной реализации редиректа.

Вот есть, например, такой URL: www.linux.org.ru/section-rss.jsp?section=2&filter=tech

Если запросить такой же, но без www (http://linux.org.ru/section-rss.jsp?section=2&filter=tech), произойдет редирект на RSS с главными новостями: http://feeds.feedburner.com/org/LOR

Хотелось бы, чтоб редиректило на этот же RSS с www.

Спасибо.

satanic-mechanic
()

[lisp] История успеха

Форум — Development

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

Когда-то я участвовал в переводе замечательной книги «Practical Common Lisp», в частности главы «Макросы: Создание собственных макросов». И вот сейчас вот осознал, что она содержит одну из лучших историй успеха Lisp из виденных мною, тем более успех сей был обеспечен самой важной, как знает каждый завсегдатай ЛОР, возможностью языка: макросами. Надеюсь она направит юных программистов на правильный путь и вдохновит их на свершения, а сомневающиеся смогут отбросить последние сомнения!

А вот и непосредственно сама история:

~~~~~

Когда-то, давным-давно, жила-была компания Lisp программистов. Это было так давно, что в Lisp даже не существовало макросов. Каждый раз все то, что не могло быть определено с помощью функций или сделано с помощью специализированных операторов, должно было быть написано в полном объеме, что было довольно трудоемким делом. К сожалению, программисты в этой компании были хоть и блестящи, но очень ленивы. Нередко в своих программах, когда процесс написания больших объемов кода становился слишком утомителен, они вместо кода писали комментарии, описывающие требуемый в этом месте программы код. К еще большему сожалению, из-за своей лени программисты также ненавидели возвращаться назад и действительно писать код, описанный в комментариях. Вскоре компания получила большую кучу кода, которую никто не мог запустить, потому что он был полон комментариев с описанием того, что еще предстоит написать.

В отчаянии большой босс нанял младшего (junior) программиста, Мака, чьей работой стал поиск комментариев, написание требуемого кода и вставка его в программу на место комментариев. Мак никогда не запускал программы, ведь они не были завершены и поэтому он попросту не мог этого сделать. Но даже если бы они были завершены, Мак не знал, какие данные необходимо подать на их вход. Поэтому он просто писал свой код, основываясь на содержимом комментариев, и посылал его назад создавшему комментарий программисту.

С помощью Мака все программы вскоре были доделаны, и компания заработала уйму денег продавая их: так много денег, что смогла удвоить количество программистов. Но по какой-то причине никто не думал нанимать кого-то в помощь Маку; вскоре он один помогал нескольким дюжинам программистов. Чтобы не тратить все свое время на поиск комментариев в исходном коде, Мак внес небольшие изменения в используемый программистами компилятор. Теперь, если компилятор встречал комментарий, то отсылал его электронной почтой Маку, а затем ждал ответа с замещающим комментарий кодом. К сожалению, даже с этими изменениями Маку было тяжело удовлетворять запросам программистов. Он работал так тщательно, как только мог, но иногда, особенно когда записи не были ясны, он допускал ошибки.

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

Следующее новшество появилось, когда программист вставил в самый верх одной из своих программ комментарий, содержащий определение функции и пояснение, гласившее: «Мак, не пиши здесь никакого кода, но сохрани эту функцию на будущее; я собираюсь использовать ее в некоторых своих комментариях.» Другие комментарии в этой программе гласили следующее: «Мак, замени этот комментарий на результат выполнения той функции с символами x и y как аргументами.»

Этот метод распространился так быстро, что в течение нескольких дней большинство программ стало содержать дюжины комментариев с описанием функций, которые использовались только кодом в других комментариях. Чтобы облегчить Маку различение комментариев, содержащих только определения и не требующих немедленного ответа, программисты отмечали их стандартным предисловием: «Definition for Mac, Read Only» (Определение для Мака, только для чтения). Это (как мы помним, программисты были очень ленивы) быстро сократилось до «DEF. MAC. R/O», а потом до «DEFMACRO».

Очень скоро в комментариях для Мака вообще не осталось английского. Целыми днями он читал и отвечал на электронные письма от компилятора, содержащие DEFMACRO комментарии и вызывал функции, описанные в DEFMACRO. Так как Lisp программы в комментариях осуществляли всю реальную работу, то работа с электронными письмами перестала быть проблемой. У Мака внезапно стало много свободного времени, и он сидел в своем кабинете и грезил о белых песчаных пляжах, чистой голубой океанской воде и напитках с маленькими бумажными зонтиками.

Несколько месяцев спустя программисты осознали что Мака уже довольно давно никто не видел. Придя в его кабинет, они обнаружили, что все покрыто тонким слоем пыли, стол усыпан брошюрами о различных тропических местах, а компьютер выключен. Но компилятор продолжал работать! Как ему это удавалось? Выяснилось, что Мак сделал заключительное изменение в компиляторе: вместо отправки электронного письма с комментарием Маку компилятор теперь сохранял функции, описанные с помощью DEFMACRO комментариев, и запускал при вызове их из других комментариев. Программисты решили, что нет оснований говорить большим боссам, что Мак больше не приходит на работу. Так происходит и по сей день: Мак получает зарплату и время от времени шлет программистам открытки то из одной тропической страны, то из другой.

 

satanic-mechanic
()

2 tailgunner и интересующиеся: The Functional Approach to Programming

Форум — Development

В данном обсуждении http://www.linux.org.ru/view-message.jsp?msgid=3642408 был высказан тезис об отсутствии книги "Guy Cousineau and Michel Mauny. The Functional Approach to Programming" в электронном виде. Отныне это не так. Ссылку не выкладываю, ибо варез, но найти несложно например тут: gigapedia.com.

satanic-mechanic
()

Встреча с представителями Microsoft на моей кафедре

Форум — Talks

Сам я не присутствовал, так как не интересно, но вот что студенты сделали: http://blog.onliner.by/2008/03/05/predstavitelejj-microsoft-studenty-vstrecha... :)

>>>

satanic-mechanic
()

Arc is released

Новости — Open Source
Группа Open Source

Arc - новый диалект Lisp от небезызвестного на ЛОР Пола Грехема. Заявил Пол о нем еще в далеком 2001 году и с тех пор регулярно писал об этом языке на своем сайте: http://paulgraham.com/

И теперь этот язык доступен для общественности. Язык сейчас реализован поверх MzScheme. Пол позиционирует Arc в качестве языка для хакеров и не обещает обратной совместимости в будущем ;)

Веб-страница языка: http://arclanguage.org/

Скачать можно по ссылке: http://ycombinator.com/arc/arc0.tar

>>> Подробности

 , , ,

satanic-mechanic
()

octave

Форум — Development

Общий вопрос по Octave: как он вообще в качестве замены Matlab. На первый взгляд много общих вещей. Кто работал с ними, расскажите об отличиях, о том, чего в Octave нет.

satanic-mechanic
()

2 anonymousl

Форум — Talks

> Я так понимаю вам совковая ментальность, пропаганда, батька итд итп
> не дают посмотреть как люди живут в других странах.

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

Народ _ВЕЗДЕ_ для государства быдло... Поймите же, просто _здесь_ это
очевиднее, чем _там_. Не нужно жить иллюзиями. _Там_ это просто имеет
более культурную форму (выглядит привлекательнее), не более и не менее.
satanic-mechanic
()

Подъемна ли задача

Форум — Development

Сразу говорю, не надо никакого флейма, наездов и т. д. Прошу отвечать
по-существу.

Итак, поставили тут передо мной задачу. Люди разрабатывают программы
на С++ и Java, используя одинаковый framework, написанный и под
первый язык, и под второй. Разрабатывают одинаковые приложения. Т. е.
приложение_X в итоге должно быть на C++ и на Java. Разрабатывают две
разные группы, поэтому происходит дублирование работы. Возникла у
людей идея писать только на C++, а затем преобразовывать на Java. И
они хотят этот процесс хотя бы _ЧАСТИЧНО_ автоматизировать. Вот и
поставили передо мной эту задачу.

Я не идиот :)

Разумеется речь не идет о преобразовании _любой_ C++-прогрммы на Java.
Будет введено множество ограничений на то, что можно использовать, что
нельзя (типа нельзя множественное наследование, перегрузка операторов
указатели в чистом виде (то есть массивы, строки - можно), или
обязательное использование smart-pointer'ов, использование только
определенный библиотек и функций, достаточных для решения типовых
задач в их области). Тем более народ пишет скорее не на C++, а на C
с классами. И вообще, им не нужен идеальный результат, им нужно то,
что ускорит разработку.

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

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

Собираюсь это писать на OCaml, из сторонних вещей нашел GCC-XML.

P.S. Возможен вообще-то вариант Java -> C++, но он мне кажется более
     сложным.

P.P.S. Я давно здесь не видел Виталия Луговского, но если он заходит
       сюда анонимно, я очень прошу его высказаться по этому поводу.

P.P.P.S. Если вы дочитали до этого места и из-за величины поста
         забыли о моей просьбе, высказанной в начале, я напоминаю:
         отвечайте только если вам есть что сказать по-существу.
satanic-mechanic
()

Chris Okasaki. Purely Functional Data Structures

Форум — Talks

Нашел по ссылке http://www-2.cs.cmu.edu/~rwh/theses/okasaki.pdf книгу 1996 года (9 глав), в то время как примеры, переведенные c SML на Ocaml (http://www.ocaml.info/ocaml_sources/pure-fun-1.0.4/) ссылаются на книгу 1998 года (11 глав). Можно ли где-нибудь скачать это издание? Спасибо.

satanic-mechanic
()

scheme implementation

Форум — Development

Какую реализацию scheme выбрать для серьезной работы? (Проблема в том, что многие нужные возможности не стандартизованы, поэтому приходится выбирать). Параметры оценки: скорость, наличие различных библиотек. Если можно, поподробнее про рекомендуемую реализацию. Спасибо.

satanic-mechanic
()

gas optimization

Форум — Development

Использую в программе самомодифицирующийся код (не кидайти в меня тухлыми яйцами - работает все это в RealMode.

Вот такое дело: .byte 0x66 /* префикс изменения разрядности операнда */ .byte 0xea /* код команды ljmp */ .comm pmode32_entry_offset, 4 /* 32-битное смещение */ .word 0x08 /* селектор */

Это эквивалентно ljmpl $0x08, pmode32_entry_offset

Все это дело благополучно не работает. Долго думал в чем дело, потом догадался запустить biew. И что я вижу:

00000060: 66EA08000F20C024 jmpf32 24C0:+200F0008

То есть в целях оптимизации .word 0x08 и .comm pmode32_entry_offset, 4 были переставлены, чтобы обеспечить pmode32_entry_offset адрес, делящийся на 4.

Как отключить такую оптимизацию?

Спасибо.

satanic-mechanic
()

mozplugger

Форум — Development

Может кто знает, почему mozplugger при проигрывании какого либо контента внешней программой смещает окно в котором отображается контент на пиксель влево и вниз (то есть слева и вверху черная полоска, а справа и внизу на один пиксель картинка обрезана). Очень срочно. Если кто знает, дайте знать...

Спасибо.

satanic-mechanic
()

Числа в Python

Форум — Development

Может кто сталкивался с этим и объяснит мне, как реализованы числовые
объекты в Python? И логично объяснит зачем сделано именно так.

[Примеры для Python 2.3.5 [GCC 3.3.5]]

Я так понимаю, что числа неизменяемые объекты. Если мы делаем a += 1,
то a после этого просто будет указывать на новый объект:

  >>> a = 1
  >>> id (a)
  135523760
  >>> a += 1
  >>> id (a)
  135523748

Но, насколько я знаю, в текущих реализациях Python индивидуальность -
это адрес объекта. А для 4-х милионов чисел это накладно... И что мы
видим - а то, что индивидуальность различна только для числовых объектов
от -5 до 99:

  >>> id (-7)
  135591764
  >>> id (-6)
  135591764
  >>> id (-5)
  135523832
  ...
  >>> id (0)
  135523772
  >>> id (1)
  135523760
  >>> id (2)
  135523748
  ...
  >>> id (98)
  135524572
  >>> id (99)
  135524560
  >>> id (100)
  135591764
  >>> id (10000)
  135591764

Т. е. для каждого из чисел от -5 до 99 индивидуальность - 
ФИКСИРОВАННОЕ постоянное число. Для остальных - это некоторое
НЕФИКСИРОВАННОЕ одинаковое число.

НЕФИКСИРОВАННОЕ, т. к.:
  >>> id (1000)
  135591764
  >>> id (1001)
  135591764
  >>> a = 1000
  >>> id (a)
  135591764
  >>> id (1000)
  135591716
  >>> id (1001)
  135591716
  >>> a = a + 1
  >>> id (a)
  135591740
  >>> id (1000)
  135591764

Более того:
  >>> id (1000)
  135591728
  >>> a = 1000
  >>> id (a)
  135591728
  >>> id (1000)
  135591740
  >>> b = 1000
  >>> id (b)
  135591740
  >>> a is b
  False
  >>> a == b
  True

Т. о. равные числа могут быть разными объектами. Несколько
протеворечит книге Романа Сузи по Python: "[про индивидуальность]
для простейших встроенных типов (числа, строки) индивидуальность
определяется значением.", хотя, учитывая, что она написана для более
ранних версий Python, может оно так и было - я пока не проверял...

[Дальнейшие примеры для Python 2.4 в Windows, для Линукса у меня пока нет]

В Python 2.4 все изменилось. Теперь при проверке последовательных
сколь угодно больших чисел одинаковых значений id выявить не удалось.
Хотя логика подсказывает, что они должны будут повториться через
какие-то большие промежутки.

>>> for i in xrange (1000):
	for j in xrange (1000):
		if (i != j) and (id (i) == id (j)):
			print i, j

не выдало ничего. Но так все стало на свои места при последующих
экспериментах. Такое поведение характерно для ручного ввода в
интерактивном режиме id (xxx) и для созданных при генерации с помощью
range или xrange. Следующий код вернул все на свои места:

>>> for i in xrange (-20, 100):
	for j in xrange (-20, 100):
		if (i != j) and (id (i + 1) == id (j + 1)):
			print i + 1, j + 1

выводило все пары с числами вне диапазона [-5, 99]. То есть та же
картина.

А теперь собственно то, ради чего я затеял топик - кто нибудь это все
объяснит или придется самому копать код Python?

P. S. Может хотя бы кто-нибудь поделится подобными наблюдениями?
satanic-mechanic
()

RSS подписка на новые темы