-Подписка по e-mail

 
Получать сообщения дневника на почту.

 -Поиск по дневнику

люди, музыка, видео, фото
Поиск сообщений в StasikOS

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Дата регистрации: 08.05.2005
Записей в дневнике:
Комментариев в дневнике:
Написано сообщений: 3723
Популярные отчеты:
кто смотрел дневник по каким фразам приходят
Мы или говорим "нет" депрессиям, стрессу, недовольству, и что-то для этого делаем, или перестаем жаловаться на жизнь...

Pulseaudio, twitch and broadcasting

Воскресенье, 14 Июля 2013 г. 01:46 + в цитатник

Как-то ради интереса решил постримить то, как я играю в WoT на http://www.twitch.tv/skogut. Первой проблемой было запилить, собственно, захват видео. Я нашел скриптик, и он, в общем-то работает. Но я немного его подправил под реалии wine + World Of Tanks и свои 4 ядра:

 #! /bin/bash  
 # originaly from http://tinyurl.com/twitch-linux from taladan  
 # www.youtube.com/user/taladan  
 # gist created by brodul  
 INRES=`xwininfo -name "WoT Client" | awk '/geometry/ {print $2}' | sed -e 's/\+.*//g'`  
 #INRES="1280x800" # input resolution  
 #OUTRES="1280x720" # Output resolution  
 OUTRES="640x380" # Output resolution  
 #OUTRES="$INRES" # Output resolution  
 FPS="18" # target FPS  
 QUAL="fast" # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg  
 # If you have low bandwidth, put the qual preset on 'fast' (upload bandwidth)  
 # If you have medium bandwitch put it on normal to medium  
 CORNER=`xwininfo -name "WoT Client" | awk '/Corners/ {print $2}' | sed -re 's/\+(.*)\+(.*)/+\1,\2/'`  
 echo "INRES: $INRES CORNER: $CORNER"  
 # Write your key in a file named .twitch_key in your home directory  
 STREAM_KEY=$(cat ~/.twitch_key) # This is your streamkey generated by jtv/twitch found at: http://www.justin.tv/broadcast/adv_other  
 URL="rtmp://live-ams.twitch.tv/app/"   
 #BITRATE=2048000   
 BITRATE=1024000   
 nice taskset -c 1,2,3 avconv \  
 -f x11grab -s $INRES -r "$FPS" -i :0.0"$CORNER" \  
 -f alsa -ac 2 -i pulse \  
 -vcodec libx264 -s $OUTRES -preset $QUAL \  
 -acodec libmp3lame -ar 44100 -threads 3 -qscale 3 -b $BITRATE -bufsize 512k \  
 -f flv "${URL}${STREAM_KEY}"  

Основное изменение - это поиск окна WoT и определение его местоположения на экране.

С этим все ясно. Следующей проблемой было сделать так, чтобы можно было и говорить в микрофон и зрители стрима могли это слышать. После гугления был обнаружен хинт про module-loopback в pulse. Так я и сделал :)
 

 pactl load-module module-loopback latency_msec=1 sink=alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo  

Однако, с таким подходом, я слышу и себя, что делает для моего мозга ужасную обратную связь, которая мешает нормально говорить.
После вдумчивого чтения документации по модулям pulseaudio, меня осенило.
В pulse есть модуль null-sink, который ничего никуда не выводит. Так вот, достаточно его загрузить, выбрать как устройство, с которого будет идти запись в стрим (через pavucontrol, например).
Далее загружаем аж два module-loopback:
 

 pactl load-module module-loopback latency_msec=1 sink=null  
 pactl load-module module-loopback latency_msec=1 sink=null  

После чего в том же pavucontrol источником звука для этих (для этого надо включить отображение Virtual streams в Recording) мы выбираем 1) Monitor o НашаЗвуковаяПлата для захвата звука из приложения (в данном случае World Of Tanks и любые другие звуки), для второго loopback мы выбираем, собственно, саму звуковую плату (для захвата микрофона). И вуаля - мы слышим звук из игры, мы не слышим себя, зато зритель слышит всё!

Следующим шагом, видимо, будет запиливание автоматического выбора источников звука для loopback с помощью pactl, чтобы не нужно было ничего делать руками в pavucontrol, но я так спешил поделиться радостью, что пока не сделал этого.

 
Рубрики:  Linux

Метки:  

Как же подгружать правила iptables через Network Manager?

Понедельник, 03 Июня 2013 г. 00:11 + в цитатник

Network Manager - пожалуй, самая ненавистная всеми вещь, которую я, несмотря на общественное мнение, с удовольствием использую.

Так вот, в ней есть замечательная вещь - в ответ на разные события, связанные с интерфейсами, он способен запускать скрипты, которые лежат в /etc/NetworkManage/dispatcher.d, и это можно использовать, в том числе, для подгрузки правил iptables. Самое главное, чтобы скрипт был 1) обычным файлом; 2) владельцем был root; 3) не был доступен на запись кому-то еще; 4) не был suid; 5) разрешен для исполнения владельцем (короче, права должны быть не более разрешающими, чем 755).
Все подробности о том, как этот скрипт исполняется и какие параметры получит, можно выгрести в man NetworkManager(8). Единственная печаль - он не получает никакого имени профиля настроек для интерфейса, а только его имя.
Но уже имея это, можно сунуть пару простых скриптов для настройки IPv4 или IPv6 фильтров (просто сменив iptables на ip6tables):
 

1:  if [ -x /usr/bin/logger ]; then  
2:      LOGGER="/usr/bin/logger -s -p daemon.info -t FirewallHandler"  
3:  else  
4:      LOGGER=echo  
5:  fi  
6:  case "$2" in  
7:      up)  
8:          if [ ! -r /etc/iptables.rules ]; then  
9:              ${LOGGER} "No iptables rules exist to restore."  
10:              return  
11:          fi  
12:          if [ ! -x /sbin/iptables-restore ]; then  
13:              ${LOGGER} "No program exists to restore iptables rules."  
14:              return  
15:          fi  
16:          ${LOGGER} "Restoring iptables rules"  
17:          /sbin/iptables-restore -c < /etc/iptables.rules  
18:          ;;  
19:      down)  
20:          if [ ! -x /sbin/iptables-save ]; then  
21:              ${LOGGER} "No program exists to save iptables rules."  
22:              return  
23:          fi  
24:          ${LOGGER} "Saving iptables rules."  
25:          /sbin/iptables-save -c > /etc/iptables.rules  
26:          ;;  
27:      *)  
28:          ;;  
29:  esac  

Скрипт нужно назвать, например, /etc/NetworkManager/dispatcher.d/01firewall и обязательно установить разрешения 0755.

 
Рубрики:  Linux
Linux для чайников
Админство и Сети

Метки:  

UFW - Ubuntu firewall - такая нужная вещь? :)

Воскресенье, 02 Июня 2013 г. 23:24 + в цитатник

Была как-то давно мысль посмотреть на все эти фронтенды к iptables, написанные для "упрощения жизни". Да, возможно, не все могут понимать синтаксис правил iptables, всю его гибкость и мощь, так что им нужно пользоваться чем-то более простым. Итак, сейчас речь пойдет про ufw - Ubuntu-фронтенд к iptables.

Наверное, использовать именно его - самый простой способ "защититься". Включается он просто -

$ sudo ufw enable

По-умолчанию он запрещает весь входящий траффик и разрешает исходящий:

$ ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

Теперь посмотрим, что же стоит за всем этим...

На самом деле ufw создает примерно полтора десятка разных цепочек iptables, рассовывая по ним кучу разных правил, так что разобраться, что же сломалось после его применения будет в разы сложнее:
 

# iptables -L -v -n
Chain INPUT (policy DROP 2 packets, 64 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  344 31500 ufw-before-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  344 31500 ufw-before-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   23  2608 ufw-after-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    5   160 ufw-after-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    5   160 ufw-reject-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    5   160 ufw-track-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ufw-before-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ufw-before-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ufw-after-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ufw-after-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ufw-reject-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  254 23653 ufw-before-logging-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  254 23653 ufw-before-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   56  3591 ufw-after-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   56  3591 ufw-after-logging-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   56  3591 ufw-reject-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   56  3591 ufw-track-output  all  --  *      *       0.0.0.0/0            0.0.0.0/0          

Что радует (или огорчает) - он по-умолчанию сразу разрешает DHCP запросы, так что хотя-бы DHCP-клиент у вас ломаться не должен. Одновременно с этим он разрешает и сервис avahi. Все остальное нужно разрешать самим.
Кроме того, он настраивает логирование заблокированных пакетов, так что в dmesg или syslog они будут.

Как же после этого разрешать что-либо?

$ sudo ufw allow 22/tcp

Просто разрешить ssh. Или только себе, скажем:

$ ufw allow from 172.20.1.4 to any port 22 proto tcp

На этом моменте начинает казаться, что ufw писали фанатики синтаксиса ipfw. :)

Дальше - хуже. Удобства от ufw кончаются, как только вам нужно что-то более сложное, например, nat. Тут вам придется таки учить синтаксис iptables:

/etc/ufw/before.rules:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
COMMIT

Такие вот дела, может кому-нибудь и нужен такой малофункциональный фронтенд к пакетному фильтру. У него есть одно достоинство - он загружает и сохраняет правила, что обычно является проблемой. А если кто не хочет и хочет что-то посложнее, в следующей заметке я расскажу, как ноутбучным и десктопным пользователям к NetworkManager прикрутить загрузку правил iptables.

 
Рубрики:  Linux
Linux для чайников

Метки:  

Про RCS для конфигурационных файлов

Суббота, 14 Января 2012 г. 21:10 + в цитатник
Уже не раз сталкивался с идеей сунуть конфиги на серверах в какую-то систему котроля версий. Систем этих, как известно, валом, на любой вкус. Но все популярные у программистов для такой задачи слабо подходят: отслеживают все дерево, что-то ломают и т.п. В то же время в самых древних скрижалях по администрированию UNIX можно встретить не менее древнюю систему контроля версий, с названием RCS - Revision Control System. Просто и очевидно. После прочтения маленького мануала и прочих man rcsintro rcs ci co, и нескольких замученных в усмерть текстовых файлов, я родил такой вот враппер для текстового редактора, который можно легко впихнуть в .bashrc и пользоваться:

# RCS wrapper to help make all files versioned
vim() {
	if [ ! -e `dirname $1`/RCS ] ; then
		mkdir -v `dirname $1`/RCS
	fi
	if [ -e `dirname $1`/RCS/$1.v ] ; then
		co -l $1
		/usr/bin/vim $1
		ci -u $i
	else 
		ci -u $1
		co -l $1
		/usr/bin/vim $1
		ci -u $1
	fi
}

Он почти все делает сам, делая работу с версиями довольно-таки простой, но не лишен и недостатков. Так что если кто-то поднаторел с RCS, я бы хотел чтобы мы вместе это допилили до состояния предмета искусства. Итак: если в директории файлы еще не подвергались работе с RCS - он создает каталог для хранения версий. Дело в том что в отсутсвие этого каталоге, файл с информацией об изменениях будет храниться тут же рядом, что не очень круто, и замусоривает каталог. Если каталог уже есть, но файл еще не подвергался пыткам - он вносится в систему контроля версий, затем вы его редактируете, и он заносит новую ревизию куда положено.
Итак, недостатки, а точнее один недостаток, который я совсем недавно обнаружил:
При редактировании файла с владельцем user:root и правами 600, владелец почему-то сбрасывается на root. Почему, пока не разобрался. Второе что, видимо, имеет те же корни - права на файл меняются так, чтобы он был только для чтения (из соображений "дабы никто не мог поправить файл в обход системы контроля версий). Обе эти вещи могут сделать файл конфигурации непригодным для использования приложением, так что тут надо как-то придумать хороший метод исправления проблемы.
Рубрики:  Размышления
Linux
Админство и Сети

Метки:  

Мы с Linux уже 7 лет :)

Четверг, 15 Сентября 2011 г. 13:34 + в цитатник
Только что осознал, что 7 лет назад купил на горбушке два двд с довольно-таки устаревшим на тот момент срезом Debian Sid и снес винду. И с тех пор вот как-то постоянно с Linux в контакте нахожусь. Не скажу, что это сильно отразилось на профессионализме, гг, ну да, я их админю, поддерживаю, иногда ковыряюсь глубоко внутри, много опыта, но все равно не оставляет чувство, что в нем еще огромное количество белых пятен, касающихся его применения в быту и на производстве, так сказать. Это оказало потрясающее влияние, надо сказать. Например, мне очень не хочется сталкиваться с чем-то другим, особенно Windows, потому что привычно и удобно работать все-таки в *nix системах. Нравится сама идеология и философия.
Linux сильно изменился за эти годы. XFree86 ушел, пришел Xorg, научился делать и определять почти все сам, и почти всегда делает это правильно. Появились KDE4, Gnome3, Unity, которые до сих пор не вписываются в старые привычки, PulseAudio и NetworkManager. Долгое время была привычка отрицать наличие этого всего, но постепенно понимаешь, что это все-таки прикольно, юзабельно и удобно. Появился Ubuntu, который я тоже яростно отрицал, пока не попробовал, и вот уже Debian отошел на второй план, а в IRC я узнал про много других интересных дистрибутивов. И не могу сказать что какой-то лучше другого (ну, есть такие, которые я презираю в принципе, потому что не вижу им применения), все они хороши для определенного круга задач. Так что не холиворьте, у всех свои вкусы и пожелания. Все растут, понимают больше и, я уверен, у всех ощущение что "дистрибутивов должно быть много" будет иметь место, особенно если Linux это не только OS для десктопа.
Ну и за эти 7 лет я таки прихожу к мнению что Linux готов для дескопа. Не среднестатистического, но готов. И Windows для этого же самого не среднестатистического десктопа не готов совсем. :)

Метки:  

Загрузка SeaTools for DOS с флешки

Понедельник, 05 Сентября 2011 г. 23:49 + в цитатник
У Seagate есть фирменная утилита для тестирования жестких дисков и ремаппинга бед секторов. Распространяется она в виде .iso, так что подразумевается что вы будете загружать ее с CD. Но так уж вышло, что у меня вовсе отстутсвует такой девайс в десктопе (есть только пара IDE-приводов, а IDE-контроллера в материнке нету :)). Так что единственным выходом было как-то в Linux создать загрузочную флешку с этой программой. Как обычно, решение нашлось, и оно называется Syslinux.
Она входит в большинство дистрибутивов, так что ее просто нужно установить через пакетный менеджер. :) Далее, адаптируя для своего дистрибутива (пути к файлам syslinux могут отличаться), делаем примерно следующее:
1. Переразмечаем флешку, создавая только один раздел с типом fat, используя любимый редактор разделов (fdisk или что там у вас).

2. Делаем этот раздел активным (boot) с помощью того же редактора разделов (раздел в fdisk помечается звездочкой в колонке Boot, а флаг переключается командой "а").

3. Копируем на флешку загрузочный раздел syslinux:

# dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdb

(будьте внимательны и не копипастьте эту команду в консоль - здесь нужно указать правильное устройство :))

4. Теперь устанавливаем syslinux в этот единственный раздел на флешке:

# syslinux /dev/sdb1


5. Теперь флешку можно смонтировать:

# mkdir /media/SEATOOLS ; mount -t vfat /dev/sdb1 /media/SEATOOLS


6. Для загрузки ISO нам потребуется memdisk из комплекта syslinux:

# cp /usr/lib/syslinux/memdisk /media/SEATOOLS


7. Теперь скопируем образ SeaTools на флешку.

8. В финале в корне флешки создается конфигурационный файл syslinux.cfg с примерно таким содержанием:

DEFAULT SeaTools
LABEL SeaTools
LINUX memdisk
INITRD SeaToolsDOS220EURO.144.ISO
APPEND iso


Стоит заметить, что такое прокатывает со множеством небольших iso-образов, если они вмещаются в память компьютера. Но дистрибутивы линукса прямо вот так работать не будут, потому что полученный виртуальный диск с содержимым .iso - не CD-ROM, и для этого нужно использовать специальные рецепты или утилиту unetbootin
Рубрики:  Linux
Linux для чайников

Метки:  

Про эти надоедливые локализации

Вторник, 16 Августа 2011 г. 00:25 + в цитатник
У меня есть только одна позиция насчет иных локализаций интерфейсов, кроме английской, и я теперь ее намерен озвучить.
Начну с главного - нет ничего плохого для простых пользователей в том что они видят систему и приложения на родном, не английском, языке. Это славно и нужно. Но подчастую эта локализация настолько потрясает своим качеством исполнения, что на несколько секунд накатывает желание покалечить, или даже убить того кто их делает. Может тогда не стоит локализовать приложения совсем? Пользователи хотя-бы чуть-чуть станут полиглотами :).
Итак, проблемы по пунктам:
1. Орфография. В свое время я репортил проблемы с локализацией KeePassX, в которой были допущены вопиющие орфографические ошибки типа слова "пороли". Я так полагаю, что авторы явно не проверяют локализацию, как и майнтейнеры пакетов, которые, возможно, включают это вне зависимости от апстрима. В любом случае, баги поправили. Вот только не помню кто - я сам пошел и поправил или эти ребята таки меня услышали. В багрепорт ответили где можно это исправить.
2. Искажение смысла. Конкретного примера не приведу уже, не помню, но думаю, что все встречали какой-то такой странный перевод, что догадаться что кокретная функция делает именно то что нужно было нереально. (Хотя вот вы все думаете что "Пуск" в Windows это очевидный перевод. На самом деле я еще помню людей, которые впервые видели Windows 98, тыкали иконку на рабочем столе и пытались запусть ее кнопкой "Пуск". Ведь тогда подсказки, пролетающей по таскбару, с текстом "Нажмите тут чтобы начать работу" уже не было.)
3. Локализация добавляет эпичный баг, который делает софт неюзабельным. Вот пример, который я репортил, и который был куда-то подвинут в сторну прогресса только спустя годы: https://bugs.launchpad.net/ubuntu/+source/gtypist/+bug/281946. Т.е. локализаторы, судя по всему, не смотрят что случилось с приложением после локализации.
4. Просто убийственно - если какой-то системный инструмент после буквального перевода всем понятных терминов с английского языка вызывает громкий смех. Например, в какой-то версии 9.х Ubuntu кто-то решил локализовать вывод ifconfig и iproute2. Все получили чудесное "ВВЕРХ BROADCAST RUNNING MULTICAST" вместо "UP BROADCAST..." и "Диапазон: ссылка" вместо "Scope:Link". Но это скорее к пункту 2, наверное.
5. Иметь счастье искать по локализованному сообщению по ошибке решение проблемы в поисковиках почти не имеет смысла.
6. Иногда вы имеете сообщение об ошибке в консоли в неправильной кодировке и даже не можете его разобрать. Например, когда соединились с сервером с архаичной локалью в koi8-r с современного десктопа с UTF-8. Да, это решаемо, но лишними движениями. Оно мне надо?
7. Недавно на Хабре увидел скрины локализованного Netbeans. Сразу возникла мысль "И что, это правда можно вот так пользовать?". Смотрите сами: "Refactoring" заменено на "Реорганизация кода", хотя "рефакторинг" 99% программистам уже давно известное слово. "Участок текста" вместо "Text field". Это вообще искажение смысла. "Поле ввода" было бы куда понятнее, не так ли? Я уж не говорю что JTextField куда проще связать с Text Field нежели с "Участок текста". Т.е. названия компонентов в оригинале намного проще связать с классами компонентов. (Чорт, может им стоило еще и классы и синтаксис Java локализовать? А что, язык это позволяет...). Продолжаем глумиться - "Версии API-интерфеса". Версии МСМасла-Масла - Мягкого Сливочного Масла-Масла. "Построить" вместо "Build" не умиляет?

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

Метки:  

CFLAGS, CXXFLAGS и стоит ли так увлекаться их изменением?

Среда, 10 Августа 2011 г. 11:41 + в цитатник
Пользуясь случаем, даю ссылку на свой топик на WeLinux
В нем я немножко травлю тех пользователей (не всех!) Gentoo или Funtoo, которые бездумно меняют флаги компиляторов, ничего не тестируя и не сравнивая и потом пишут, что:  "Собрання под мой процессор система в стопицот раз круче чем любая другая! Я вот собираю с этими (20 флагов) и весь софт летает!".

Вы легко можете узнать их - обычно на вопрос "а где бенчмарк?" они ответят какую-то неконструктивную гадость вроде "я чоли твой персональный тестер?".

Почему я начал? Да просто вот на примере FireFox5, описанном в топике, очевидно, что компилятор влияет, иногда аж на 20%, на производительность софта. Возможно, есть софт, который выигрывает (или проигрывает) даже сильнее. Поэтому интересно узнать, кто еще что тестировал и чего добился. Интересует любой действительно важный для пользователя софт (Например, браузер, офисный пакет или что еще в таком духе), либо демон/сервис, для которого производительность реально важна - это например, SQL БД, http-сервер или, скажем, proxy, mail и что угодно еще, что удалось разогнать на 20 и более %.


Метки:  

Про реагирование на OutOfMemoryException в Java

Четверг, 30 Июня 2011 г. 15:27 + в цитатник
Есть такая неприятная ситуация, когда память в куче заканчивается, и сборщик мусора тратит все больше и больше времени, пытаясь ее безрезультатно освободить, потому что объекты еще используется. Когда на это тратится почти 100% процессорноного времени, JVM может внезапно выбросить OutOfMemoryException в треде, который попытался выделить еще память. Как правило, это означает полную смерть треда, а может и всего приложения. Что еще неприятнее, отловить эту ситуацию изнутри практически нереально.
Но, как оказалось, можно хотя-бы сообщить об этом наружу, что можно использовать чтобы послать, скажем, письмецо с сервера о том что сервис помер, или даже убить и перезапустить его.

Делается это опцией для JVM:
java ... -XX:OnOutOfMemoryError="shell command; ..."

Ну а что туда подставить, сами можете догадаться. Это может быть шелл-скрипт, который через mail пошлет вам письмо, либо найдет pid этой JVM, пристрелит и запустит ее или что угодно еще.

Метки:  

Наслаждаясь Clojure

Понедельник, 27 Июня 2011 г. 00:49 + в цитатник
После месяцев троллинга в IRC по поводу Clojure, я, наконец, достал книжечку по этой теме и решил почитать, надеясь что простыми и понятными описаниями что, куда и как, как-то понять как писать на этом языке программирования какие-то полезные применимые в реальности программы, решающие реальные задачи. Книжечка эта - Joy Of Clojure, на английском языке, и я уже прочел 13 страниц из примерно 300 (что, как это нетрудно посчитать, является 4% от всего объема, что немного). Но я так ничего толком и не понял из того что там написано. В общем смысл пока такой - Clojure это реально классный и полезный язык и его делали реально классным и полезным языком для написания полезных программ, а не для изучения каких-то аспектов программирования, поэтому все просто обязаны его попробовать, потому что он позволит программистам увидеть бога. Пока что информация была предоставлена для тех, кто еще не имеет никакого понимания функционального программирования совсем (а таких людей большинство). Я помолчу о том, что я узнал много новых интересных слов английского языка, которые раньше я даже не встречал (несмотря на то что часто читаю техническую литературу, в том числе и по программированию, не используя словарей и переводчиков), и то что они там, в общем-то, никакого специального места не имеют. Это были не новые термины из математики или области компьютерных наук. Просто используется такой язык.. :)

Была и парочка примеров коротких программ, делающих простые вещи. Но смысл этой мешанины сокращенных слов, скобочек и двоеточий пока понять не удалось. Ну, то есть можно догадываться, что это делает, обозревая вывод программы, но никак не понять место всех этих символов. Сомневаюсь, что такое вообще кому-то без спецподготовки будет понятно, а с учетом того что смысл этого не был разъяснен, вообще с трудом угадывается место этих примеров в книге. Такое чувство, что она была написана только с одной целью - чтобы не очень глупые люди чувствовали себя полными идиотами. Но надеюсь, это чувство пропадет у меня по мере того как я снова и снова перечитаю эти 13 страниц, составлю конспект и схему этих непонятных понятий. Еще есть надежда, что я не стану таким же обфускатором, как автор этой книги (а может и автор языка - я не сомневаюсь, что это именно Clojure повлиял на автора книги таким причудливым образом).

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

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

И да, им очень нужны новые адепты.

Метки:  

Админское чутье

Среда, 01 Июня 2011 г. 02:33 + в цитатник
Есть некоторые вещи, которые админам приписывают. Пляски с бубном, какую-то непостижимую магию или еще чего. Да, это реально существует. Все зависит от количества мидихлориан и умения админа пользоваться Силой.
Вот было у меня много таких случаев. Скажем, было время ложиться спать, но ворочаешься, жарко, спать не можешь. Берешь и открываешь почту, смотришь, а там как раз недавнее сообщение от системы мониторинга что все плохо и что-то нужно и важное отвалилось. Идешь и чинишь. Или, бывало, раннее утро, но ты внезапно просыпаешься, хотя не было никакого шума или звонка будильника. И не можешь уснуть. И оказывается, да, прямо сейчас, несколько минут назад у тебя в почте появилось письмо про отвалившийся сервис. Такие дела.

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

Метки:  

О мифических профитах tmpfs при компиляции

Пятница, 01 Апреля 2011 г. 03:05 + в цитатник
Возвращаясь к "бенчмарку" сборкой ядра, табличка на результаты которого будет чуть ниже, прошу обратить внимание на выделенные зеленым строчки. Это ничто иное как попытка увидеть профит от размещения исходников и каталога для сборки на tmpfs, который целиком влазит в оперативу. Как видим, профит ничтожно мал и составил 18 секунд от 678, то есть всего около 2.6%. Если при этом учесть еще что tmpfs зажирает место, которое могло использоваться всей системой под кеш (ну, ведь гентушники же не подключают /var/tmp/portage перед каждой сборкой?), я думаю что это можно смело называть непонятно откуда взятым мифом. :)

Тут-то и сами результаты

Метки:  

Штирлиц получил новую шифровку из Центра

Четверг, 24 Марта 2011 г. 10:46 + в цитатник
Мы тут случайно наткнулись на очень необычную функцию древнейшего UNIX-калькулятора, и именно свойство печатать цифры из стека в виде букв. Нам это так понравилось, что я сначала написал черновую версию преобразователя текста в такие цифры, а потом, кучей итераций на #linux скриптик медленно преобразовался в такое вот коротенькое:

echo some text | perl -Mbigint -pe 'map{($s<<=8)|=$_}unpack"C*";$_="dc -e ${s}P\n"'


на выходе получается готовая команда для запуска dc, которая печатает some text. Этот окончательный вариант принадлежит перу ams, так что можете считать его perl-гуру. Другой гуру - ramok, он же komar, тоже приложился к этому делу.
Конечно, это не имеет никакой практической ценности, но является само по себе забавной вещью.
Рубрики:  Бред
Забавное
Linux
Linux для чайников

Метки:  

rlwrap - используем readline в приложениях, в которых его нет

Суббота, 05 Марта 2011 г. 16:15 + в цитатник
rlwrap позволяет обернуть ввод в приложение, снабдив его функциями редактирования строки от readline. То есть, мы запускаем через rlwrap любую программу, которая просто читает ввод с терминала, например cat, telnet, netcat и получаем историю ввода, передвижение по строке курсорными клавишами, редактирование строки и прочие плюшки нормального, удобного ввода.
Устанавливается rlwrap в виде отдельного одноименного пакета и есть в репозиториях большинства дистрибутивов.

Пример использования:
$ rlwrap netcat localhost 25

- подключаемся к локальному SMTP-серверу и имеем чуть более удобную возможность говорить с ним напрямую.

Метки:  

Как скопировать файлы из другой ветки репозитория git

Вторник, 01 Марта 2011 г. 20:54 + в цитатник
Кросспост из ЛинСовета

Что же делать, если нужно скопировать файлик из одной ветки git в другую? Браться за голову и делать это руками? Совсем нет. :)


Достаточно сделать в нашей ветке, где файла нет вот такое действие:
$ git checkout другая_ветка путь_к_файлу

и файл магически скопируется из другая_ветка. Останется добавить его и закоммитить.
Рубрики:  Рабочее

Метки:  

XPRA - "screen" для X-клиентов

Суббота, 19 Февраля 2011 г. 16:47 + в цитатник
xpra, или X Persistent Remote Applications - это приложение, которое позволит подключаться к запускаемым с его использованием X-клиентам (графическим программам) удаленно или локально, не опасаясь обрыва связи или смерти X-сервера. Эдакий “screen” для графических приложений, который и правда чем-то напоминает обычный screen для терминала.

Итак, как это работает?

  1. Устанавливаем xpra. (свежие ебилды, репозитории со свежачком)

  2. Запускаем xpra на каком-либо свободном дисплее:
    xpra start :1

    xpra list - показывает активные дисплеи xpra

  3. Запускаем наше приложение:
    DISPLAY=:1 someguiapp


  4. Идем на удаленную машину... запускаем ssh с X-forwarding:
    ssh -X username@hostname


  5. Делаем xpra attach:
    xpra attach


  6. Видим свое приложение и работаем с ним.


После этого можно повторять шаги 4-6 с любой машины (включая ту, на которой мы запустили xpra, правда для этого не нужно никуда подключаться по ssh).


Есть правда у него существенный недостаток - у меня в нем совсем не работает ввод кириллицы, да и некоторые приложения совсем плохо работают по сети через X-протокол (ну то есть, может они и хорошо работают, но для этого нужна гигабитная сеть %)). Ну и второе - такое как в tmux, а именно одновременное отображение и работа приложения на двух и более серверах, тут невозможно.
Рубрики:  Linux

Метки:  

Поиск сообщений в StasikOS
Страницы: [25] 24 23 ..
.. 1 Календарь
Найти дневники