URL
  • ↓
  • ↑
  • ⇑
 
22:56 

Brainfuck

Итак, в очередной раз возникло желание написать что-то вроде языка высокого уровня, который моно было бы транслировать в Brainfuck. Попытался написать некое подобие на джаве, убил кучу времени. Потом вспомнил что когда-то давно писал нечто на с++, позволяющее в принципе закодить достаточно много алгоритмов. Суть этого нечта заключалась в следующем: определяется модель вычислений с помощью BF, после чего пишется на языке с++ некоторый базовый набор функций, вроде goto, сложения, копирования, переноса. С помощью этих простейших функций строятся более сложные, вроде умножения, вывода на экран и т.д. Каждая из этих функций делает не что иное, как выводит на экран (или в файл) всё что делает, в терминах BF. Таким образом, реализовав какой-то алгоритм с помощью этих функций, мы после запуска программы получаем на выходе эквивалентный код на BF, который можно исполнить интерпретатором. Плохо только то, что таким образом не пнятно как универсально реализовать операции сравнения, потому что заранее неизвестно количество аргументов тех функций, которые стоят в качестве кусков кода для then и else.
А модель в этом случае была такова: лента машины BF является своего рода стеком, все функции могут иметь только константы в качестве параметров (это могут быть просто числовые константы, или адреса ячек стека). Для перемещения по стеку можно использовать только лишь функцию goto, а операторами > и < пользоваться нельзя (если только конечно это не сделано с умом и указатель после этого вернётся в своё первоначальное положение). В начале работы почти каждая функция получает значение bp - текущий указатель стека, а в конце работы восстанавливает. Такая модель чем-то напоминает ассемблер с его инструкциями enter и leave. При вызове функции считается что она может портить весь стек, включая текущий указатель. Таким образом перед вызовом функций необходимо перемещать указатель стека выше переменных, дабы их не испортить. Вроде бы всё. Ещё меня раньше останавливало то, что непонятно как получить значение произвольного элемента массива, если его номер не константа, а лежит в стеке. Сегодня нашёл страницу с алгоритмами, где эта проблема решена
esolangs.org/wiki/Brainfuck_algorithms
Правда пока не разобрался как это работает. В любом случае теперь я не вижу помех для изготовления компилятора с Си на BF) Не понятно только одно: столько лет прошло, а компилятора я так и не вижу. Неужели его никто не написал?

00:04 

ubuntu 9.04 @ EeePC 900

Решил поставить убунту на EeePC 900. Не зря поставил. Wi-Fi, звук завёлись из коробки, работают кнопки управления звуком. Про остальное не знаю.
Из минусов:
1. при старте иксов экран светится на краях ярким белым светом. Такое впечатление что раз двадцать вот так - и он сгорит.
2. не работает totem - падает при пупытке воспроизвести видео. Чинится следующим образом: запускаем gstreamer-properties, там вкладка видео, там "Выход по умолчанию" и выбираем "Система X Window (без расширения Xv)".

Ещё можно настроить автоматическое монтирование второго винчестера (у меня там один раздел, монтируется в /ssd)
# ls /dev/disk/by-id
08845431-e867-40a7-ab59-35ecce0c2261 e81f1471-6050-41dd-9777-c126b0ee3b36
# cat /etc/fstab
...
proc /proc proc defaults 0 0
UUID=e81f1471-6050-41dd-9777-c126b0ee3b36 / ext2 relatime,errors=remount-ro 0 1
# echo "UUID=08845431-e867-40a7-ab59-35ecce0c2261 /ssd ext2 auto 0 2" >> /etc/fstab
# mount -a


Система устанавливалась с 1Гб флешки, которая была предварительно сделана на другом компе с помощью утилиты "Создание загрузочного USB диска" и CD с убунтой. При установке настоятельно рекоментуется включить в биосе всё имеющееся на борту оборудование.

13:23 

демосцена

На очередные раздумья навело вот это
pouet.net/prod.php?which=31132
На этот раз авторы умудрились запихнуть что-то более-менее живое в 4кб. Мой мозг полон непонимания происходящего.

17:32 

11 сентября

Почему-то до сих пор кажется что эти события были не так давно. Википедия всё же говорит что это было в далёком 2001 году, почти восемь лет назад.
Вспомнилось после просмотра очередной неплохой демки. Prophecy - Project Nemesis. 2004 год.

14:50 

Сегодня научился делать бэкапы по сети. Итак: не забыть
# cd /
# tar cf - . | ssh -c blowfish admin@10.55.115.6 dd of=/media/mnt/backups/server/dump.tar
Пара часов ожидания и файлик размером в 30гб у нас на винчестере) Теперь можно на месяц забыть о том, что сервер может помереть.

Закономерность: чем ближе экзамен, тем больше появляется идей по программированию, и прочей радости. На данный момент:
1. Имеется 13Гб файлов для Guitar Pro, порядка 270000 штук, надо что-то с ними сделать. Из этих 13гб где-то 1.5-2гб дубликатов. Надо всё это запихнуть в несколько файлов по 1гб, создать там некий аналог своей файловой системы. Потом данные по каждому файлу запихнуть в MySQL. После всего этого сделать страничку, на которой можно было бы массово назначать файлам исполнителей, названия произведений и т.д.
2. Скрипт, заливающий в MySQL данные из файла "всевидящего ока" QiP и выводящий это всё с никами и возможностью добавления описания к каждому нику и ещё пола как вариант. Потихоньку теряет актуальность ввиду неиспользования аськи.
3. Страница, где можно было бы загрузить свою картинку, получить на неё ссылку, поместить её куда-нибудь и видеть логи обращения к картинке (время/айпи/браузер/ОС/дочерняя страница). Позволяет узнавать много нового :gigi:

Вчера увидел у одного человека небольшое исследование сжатия с помощью нейронной сети. Если верить этому, у него получилось сжать видеофайл в 30 раз. Идея сжатия заключалась в построении функции, которая вычисляет следующий байт на основе двух предыдущих. Разумеется, без ошибок никак, поэтому на выходе есть файл поправки: разница между результатом функции и тем что надо. Загорелся идеей сделать что-то подобное, ничего не получилось. Сжимает только маленькие файлы, а большие никак. Для маленьких оно и понятно: нейронная сеть занимает места больше чем сам файл. Ещё бесит то, как медленно оно считает. Всё-таки комп тормоз, у него ведь порядка 300Мфлопс. Теперь хочу видеокарту с поддержкой CUDA, там порядка 30-500Гфлопс будет, что заметно больше.

Вот, а скоро экзамен:)

12:28 

Участие в обсуждениях сообщества techsupport потеряло смысл. Мне есть замена, ну и ладно. Быть может найду себе что-нибудь аналогичное, где можно хоть как-то реализовать себя.

11:15 

мысли

Утренняя прогулка благоприятно подействовала на мой мозг и там появилась умная мысль. Было бы очень неплохо сделать серверное приложение, которое бы кэшировало результаты MySQL запросов. Да, я знаю что есть memcache, но его мало. Фишка нового приложения заключается в том, что при запуске php скрипта он(скрипт) передаёт на этот сервер некие данные: а именно url страницы и id пользователя (если это не гость). После этого php-скрипт делает запросы уже не к MySQL, а к этому серверу. Фишка заключается в том, что сервер может знать поведение скрипта на этой странице и заранее выбрать из базы всё нужное, а потом просто отдать скрипту результат. Также это "нужное" можно кэшировать и одни и те же результаты таким образом выдавать сразу на много-много запросов. Эта модель идеально подходит для надстройки AdvancedOntology из QuickStart CMS и, наверняка, для многих других вещей.
Минусы:
1. не катит для запросов с "order by rand"
2. идентификатор сессии (то что отправляется в первую очередь скриптом на сервер) не слишком универсальный
3. все запросы после запроса update к какой-то таблицы кэшировать не имеет смысла (правда там наверное и потери небольшие).
4. сложно обрабатывать запросы к нескольким таблицам (правда у меня их вроде бы и нет)
5. экономим очень мало ибо и так кэширование происходит, так что запросов к базе будет примерно столько же, сколько и при умном использовании memcache

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

А ещё я не поленился и поставил в базе много индексов, теперь сайт грузится в пару раз быстрее. Всё-таки приходится сильно экономить когда процессор всего 400МГц.

18:55 

Сегодня ковырял KiCAD. Это бесплатная open-source оболочка для проектирования печатных плат/принципиальных схем. Насколько я понимаю, это вполне нормальная замена платному OrCAD в рамках моих потребностей. За полчаса кликаньем мышки сделалось совсем немного - видимо просто нет навыка. Ещё совершенно не понимаю как делаются ответвления от шины с разными именами: надо ведь как-то различать проводки в шине, а стандартных средств я не вижу. Видимо это большой пробел в моём понимании этих программ. В общем надо найти часов шесть времени чтоб во всём этом разобраться

Сайт
Документация
Миниурок

Пока ещё есть желание сделать
1. плату для "пяти проводков", Фичи:
-три панельки (8, 20, 26)
- кварц с возможностью быстрой замены
-переключатели, с помощью которых можно включить/отключить кварц
-возможность внешнего питания.
2. usb-программатор. Из фич наверное только индикация чтения/записи
3. бинарные часы by Riateche. Фичи:
- настройка с помощью двух кнопок
а это уже больной разум:
- управление через usb
- регулировка яркости
- управление хлопками (микрофон+АЦП)
- будильник
- работа от батарейки при выключенном питании (что-то вроде часов в компе)
С питанием получился бред: светодиоды потребляют в несколько раз больше, чем микропроцессор, а при таком раскладе батарейка сядет за сутки работы, так что не катит. В режиме отсутствия индикации и почти постоянного сна микропроцессора батарейки должно хватить надолго.

Надеюсь осенью будет время и мы это всё последовательно соберём.

15:44 

Opera Mini

Я тут подумал, а почему бы не подключить ноут через телефон и не сидеть в опере мини для экономии траффика? Исследование гугла показало что бльшинство пользуется MicroEmulator

Во время использования возникают трудности:
1. Когда приложение запрашивает ввод текста, кнопки ОК/Отмена не работают. Вместо них работают F1,F2 на клавиатуре, которые выполняют функцию софт-клавиш телефона
2. Иногда ввод останавливается по непонятным причинам, а потом так же возобновляется.
3. Пока не нашёл как ввести символ # - при попытке ввести его переключаются режимы ABC/abc/123. В принципе это не критично ибо работает copy/paste
4. Не работает автозапуск приложений. Первый запуск происходит с ошибкой, а со второго-третьего раза опера запускается внутри эмулятора.

Мануалы установки:
под Windows:
http://forum.mobile-review.com/showthread.php?t=57243
http://denismajor.ru/index.php/softmania/105--opera-mini-
под Linux:
http://helpforlinux.blogspot.com/2008/12/use-opera-mini-in-ubuntu.html
http://telegamochka.livejournal.com/107343.html - тут ещё описание настройки подключения gprs через телефон. Более простое подключение gprs наверное только в убунте через NetworkManager

23:40 

ЛУТ

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

Оказалось что разводка платы вручную - очень затягивающее занятие. Качественно убивает время и лишние мысли. Пользователю требуется всего немного мозга, желание думать и мышка. На этот раз мне удалось включить мозг и получилось очень даже неплохо. Вообще я начал заниматься этим с мыслью "программа всё за меня сделает", но теперь прихожу к выводу, что результат человеческого труда всё же куда качественнее результата работы программы.

21:02 

Прямоугольные импульсы такие прямоугольные

На самом деле это картинка с чьего-то осциллографа, на котором заснят обмен данными между клавиатурой и компом. Найдена в результате ковыряния протокола передачи по проводкам PS/2. Уж больно хочется подключить клавиатуру к микроконтроллеру, чтобы что-нибудь соорудить.

В субботу были на радиорынке, купили много железок. В числе прочего - большой экран 16х2 символов с красивой оранжевой подсветкой и моя давняя мечта - контактная макетная плата. Там паять ничего не надо, вставляешь детали в дырочки и соединяешь проводами. В результате готовое устройство получается раньше, чем ты забиваешь на идею его изготовления. В тот же день спаяли программатор. Он работает, сверху выглядит даже аккуратно. Без последствий моей криворукости не обошлось, но комп к счастью не спалили. Всё-таки сам бы я этого не сделал ибо терпения у меня слишком мало. Спасибо.
Начинается творческий кризис. Всё чаще ставится вопрос "что бы написать?". А ведь всего-то три дня прошло.

В процессе кодинга оказалось что в примерах библиотеки avr-libc, а именно в примере stdiodemo написан откровенный бред. Процесс чтения байт из контроллера дисплея HD44780 сделан мягко говоря не по стандарту, из-за этого у всех прочитанных байт первые и последние четыре бита равны. Если вдруг кто-то столкнётся с этой багой и увидит моё сообщение, то там надо вынести изменение бита RW из hd44780_innibble в hd44780_inbyte. В принципе это же касается бита RS, но в данном случае это не так критично, как изменение чтения на запись посередине процесса чтения байта.

11:30 

К вопросу о кэшировании данных на сайте. Решил посмотреть что будет, если использовать не memcache, а разделяемую память. По идее тогда для каждого запроса к кэшу не нужны переключения между процессами, и время запроса должно сократиться. Делать аналог memcache времени не было, поэтому я сделал прогу, которая просто сохраняет в разделяемой памяти переданную ей строку и возвращает обратно. Производительность полученного кода составила 115000 запросов в секунду. Для сравнения: memcache позволяет сделать 650 запросов в секунду.

20:15 

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

Застрял на четвёртом уровне. Всё-таки азы электроники успешно потеряны в далёком детстве. Зато теперь мне есть к чему стремиться)
Ещё такие вещи мне нравятся тем, что можно просто решить проблему, а можно сделать красиво. Иногда наведение красоты становится интереснее, чем всё остальное.

21:21 

И вот, 21го сентября вышла очередная версия замечательной операционной системы - FreeBSD 8.0-RC1. Не знаю как было раньше, но сейчас меня порадовала возможность сделать загрузочную флешку, приложив минимум усилий. В 7.2 этого вроде бы не было, по крайней мере мне пришлось извращаться с записью на флешку минимального образа и установкой по сети через nfs. Теперь система ставится прямо с флешки и всё хорошо.
Решил поставить ради эксперимента на комп. Поставилось быстро, заработало. После этого я решил обновить всё что там есть и началась жесть. Больше так делать не буду. Обновление документации (ну зачем мне надо было обновлять документацию???) потянуло за собой установку большого количества софта, и до сих пор он ставится (уже порядка 250Мб установилось). И это ведь не только установка, а ещё и компиляция. В общем четыре часа, если не больше, оно так обновляется. Никогда не делайте так, как я, это вредно для нервов.

Расписание выхода нового релиза можно посмотреть здесь. Получается что в ближайшие пару дней должен выйти RC2, а ещё через неделю - релиз.

По поводу админства в общаге мне сказали что на общагу положено два админа, а сейчас их формально три. Из этих троих можно застать в основном только одного, но у этого одного крайне мало возможностей что-то делать. А мне банально скучно, хочется что-то делать, админская работа была бы весьма кстати. Ничего, быть может дальше что-то изменится.

За всё это время был написан относительно рабочий вариант модуля php_shmcache. Осталось его протестировать и сделать нормальную синхронизацию между процессами. Результаты работы сейчас вполне оправдывают затраченные силы: модуль работает в 30-40 раз быстрее memcache (сравнивалось, правда, на простом тесте). Два дня назад задал вопрос на codenet-е, пока 60 просмотров и ни одного ответа. Судя по всему, туда стоит писать только когда совсем всё безнадёжно, а иначе можно гараздо быстрее найти всё гуглом. Хочется где-нибудь найти хотя бы ещё одного человека, которому была бы интересна реализация этого модуля. Хотя бы для того, чтоб кто-нибудь сделал достаточно детальное описание проекта и процесса компиляции в виде одной единственной html-страницы.

14:45 

очередной бред

Задача.
Дано:
1. аккаунт ххх на одном общеизвестном сайте.
2. существует человек, которому принадлежат аккаунты ххх и ууу
3. этот человек из-под аккаунта ууу умеет отвечать на вопрос о принадлежности ему аккаунта ххх.
4. есть некоторое множество открытой информации (доступной любому человеку) в виде текстов на этом сайте
Найти: ууу

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

19:42 

Я нашёл его. Порт, позволяющий без особого напряга использовать FreeBSD в качестве десктопной системы.

You can get a good standard workstation install by using the
instant-workstation port/package. If you have ports installed, you can
install it by doing

# cd /usr/ports/misc/instant-workstation
# make install && make clean

as root. This will install a collection of packages that is convenient to
have on a workstation.

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

18:02 

Начинаю понимать людей, время от времени ждущих выхода новой убунты) Теперь я так же жду выхода FreeBSD 8.0 RC-2 и релиза. Ну где? Где он?? Уже 20 дней назад должен был выйти.
7.2 вышла с трёхдневным опозданием в RC-2, а релиз вообще в срок вышел.

23:46 

от нечего делать

Стянуто у Riateche:

1) ваша операционная система?
OpenSUSE 11.0

2) ваш используемый интернет-браузер?
Opera

3) ваша домашняя страница?
быстрый набор

4) где находится ваша почта?
gmail.com

5) ваш наиболее часто используемый аудио-плеер?
Amarok

+26

09:21 

Отдам в хорошие руки простенький движок для ведения дневника у себя на компе. Написан на PHP, использует MySQL для хранения сообщений. Выглядит как-то так:
Free Image Hosting at www.ImageShack.us
Распознаёт теги <a>, <img>, <b>, <i>, остальные теги превращает в текст.

16:48 

Дёрнуло меня чего-то разобраться с Adobe Flex. Кроме того, обнаружилась версия под линукс. Где-то час я его устанавливал, потому что адекватно работать он хочет только с eclipse 3.3. Это я узнал с третьей попытки. Ещё два часа ковыряния в vkontakte api, их примерах и tour de flex - в результате удалось написать полее-менее рабочую флэшовую версию бота A.L.I.C.E.
Собственно поговорить с ботом можно тут
Посмотреть на мой недофлэш можно тут

the code inside me

главная