Показаны сообщения с ярлыком linux. Показать все сообщения
Показаны сообщения с ярлыком linux. Показать все сообщения

четверг, 16 сентября 2010 г.

Медиа дека для Anki

этот мануал гораздо лучше, скрипт более гибкий и лаконичный
Итак .. немного вводная.
Anki программа для запоминания, Это Обычные карточки, но которые показываются по определенному алгоритму, и те карты которые сложно запомнить показываются чаще, которые легко реже.

Создавать деки можно самому, так и брать готовые с сайта.
Тема же сегоднешнего заняти, натырить картинок с тырнета и сделать из них красивую деку(набор карточек).
итак поехали
1. выберем жертв, в моем случае стали 2 сайта http://www.my-english-dictionary.com и www.pdictionary.com скачаем их через wget
$mkdir sites && cd sites
$wget -pdrc http://www.my-english-dictionary.com
$wget -pdrc www.pdictionary.com

2. Исследуем скачаные дириктории
2.1 в случае с pdictionary все просто , картинки лежат в папке images и носят названия того что на них изображено
$ls www.pdictionary.com/images/
a  b  c  d  e  f  g  h  i  j  k  l  m  misc  n  o  p  q  r  s  t  u  v  w  x  y  z
$ls www.pdictionary.com/images/z
zebra.gif  zero.gif  zigzag.gif  zipper.gif

2.2. c my-english-dictionary все гораздо интереснее
$ ls |head
eng100.htm
eng100.jpg
eng101.htm
eng101.jpg
eng102.htm
eng102.jpg
eng103.htm

тоесть на каждую картинку по отдельной страничке и с именем eng???.htm с картинкой eng???.jpg
слазив внутрь заметим что название картинок лежит в теге img с сылкой на наше изображение а имя картинки в атрибуте alt
$cat eng100.htm |grep 100.jpg
<img src = "eng100.jpg" alt= "drawer" border = 0>

Ну так как видно что все идет строго попарядку можно в цикле пройти по всем htm страничкам и переименовать файлы в вид name.jpg и положим их в папки result и result_small (кто его знает может thumbnail-ы тоже кому пригодятся)
$mkdir result&&mkdir result_small
$for i in `seq 1 408`;do NAME=`cat eng$i.htm|grep eng$i.jpg|sed 's|.*alt= "||g;s|".*||g'`;echo $NAME;cp eng$i.jpg result/$NAME.jpg;cp s-eng$i.jpg result_small/$NAME.jpg; done

итак.. мы получили картинки, но о боже.. большие картинки с большими черными подсказками :)

что же делать... "Доктор, нужно резать!"... да.. будем резать.. и резалку мы возьмем imagemagic, и резултат трудов положим еще в одну поддирикторию result
$mkdir result
$for i in *;do convert $i -crop 400x265+0+0 result/$i;done

можно посмотреть результат наших трудов - что все ок. ну и двинем дальше.
Насколько помнится мы загрузили изображения еще со 2го сайта, и внимательный телепат наверняка разглядел что изображения то там не jpg а gif - ну не будем портить всю малину через тот же image magic сконвертим их в jpg и двинем в текующую фотку где у нас уже есть изображения(перейдем в тот сайт и из дириктории image вфполним следующее
$cp */*.gif ../../www.my-english-dictionary.com/result/result/

это мы так скопировали, а теперь их переделаем в jpg (вернемся в ..../result/result и выполним вот это колдовство
$for i in *.gif;do convert $i ${i/gif/jpg};done

ну и избавимся от наших гифок

$rm *.gif

3. Самое интересное.. файлы у нас есть все называются как надо - осталось их загнать в деку анки. ну и конечно руками мы это делать не будем. что нам в конце концов - делать чтоль нечего
топаем на страничку http://ichi2.net/anki/wiki/FileImport которая нам рассказывает как можно создать файл вида
caption [tab] x-ray <img src="x-ray.jpg">[sound:x-ray.ogg]

левая часть это одна сторона карточки, а правая "Сюрприз!!!!" не только изображение но еще и произношение.
Я вспомнил про когда то скачаные словари для stardict с произношением, и подумал что вот он!, тот шанс :)... но на этом не остановился когда узнал что слов многих нету и на помощь пришел сайт http://www.answers.com который любезно согласился предоставить отсутствующие звуки.
упуская подробности (одной строкой выполнять все эти операции было тяжело) и я наваял небольшой скрптик, правда не отладил но главное работает
#!/bin/bash

DIRECTORY=/home/nikolay/sites/www.my-english-dictionary.com/result/result
EXTENSION=jpg
SOUND_EXTENSION="ogg mp3 wma wav"
SOUND_DIRS="(stardict|$DIRECTORY)"
SITE='http://www.answers.com'
OUT_MEDIA_DIR=$DIRECTORY/media
OUT_FILE=import

rm $OUT_FILE
if [ -d "$OUT_MEDIA_DIR" ];
then
rm -Rf "$OUT_MEDIA_DIR"
fi

mkdir "$OUT_MEDIA_DIR"


cd $DIRECTORY
for i in *$EXTENSION;
do
FULL_NAME=$i;
NAME="${i/.jpg/}";

SOUND_FILE_NAME=$(ls $NAME.*|egrep '(ogg|mp3|wma|wav)')
if [ -z "$SOUND_FILE_NAME" ];
then
for i in $SOUND_EXTENSION;
do
SOUND_FILE_PATH=$(locate "/$NAME.$i"|egrep "$SOUND_DIRS")

if [ -n "$SOUND_FILE_PATH" ];
then
SOUND_FILE_NAME=$NAME.$i
cp "$SOUND_FILE_PATH" "$SOUND_FILE_NAME"

break
fi
done
if [ -z "$SOUND_FILE_NAME" ];
then
#truing download from answer.com                            loca
wget -q $SITE/$NAME --output-document $NAME.tmp
SERVER_FILE_PATH=$(cat $NAME.tmp |grep playIt|grep wav|sed "s/.*playIt('//g;s/'.*//g"|sed q)
if [ -n "$SERVER_FILE_PATH" ];
then
wget -q $SERVER_FILE_PATH --output-document $NAME.wav
SOUND_FILE_NAME="$NAME.wav"
fi
rm $NAME.tmp
fi
fi
STRING="$NAME$(echo -e '\t')<img src=\"$FULL_NAME\">"
cp "$FULL_NAME" "$OUT_MEDIA_DIR/"
if [ -n "$SOUND_FILE_NAME" ];
then
STRING="$STRING[sound:$SOUND_FILE_NAME]"
cp "$SOUND_FILE_NAME" "$OUT_MEDIA_DIR"
fi
echo $STRING>>$OUT_FILE    
done;


эхх шит фокус с echo -e "\t" не удался.. придется подправить .. заменить все пробелы на таб
$ sed -i 's| |\t|' import


смысл в том что нужно поменять значение переменной DIRECTORY на то куда вы выложили файлы, SOUND_DIRS - это то где скрипт ищет произношение (не бязательно полный путь, так как идет все через grep)
ну и результат получаем файл import и папку media

открываем anki
жмем на create (name=mediadeck)
file->import выбираем наш файл "import"
saveas (mediadeck)
теперь нужно зайти в :~/.anki/decks
и создать там дирикторию mediadeck.media
$mkdir ~/.anki/decks/mediadeck.media

и копируем
$cp media/* /home/nikolay/.anki/decks/mediadeck.media/

после этого в анки нужно выполнить Tools>Advanced>Check Media DB (tag cards)

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


ну а это готовая дека, которая получилась, распаковать зип и импортировать shared.anki

четверг, 20 мая 2010 г.

KVM ошибка сети

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

C:\Documents and Settings\Owner>ping -t 192.168.11.1

Pinging 192.168.11.1 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from 192.168.11.1: bytes=32 time=738ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.11.1:
Packets: Sent = 98, Received = 33, Lost = 65 (66% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 738ms, Average = 22ms
Control-C


тоесть ответы появляются - но когда то потом и не стабильно, с линуксом еще хуже

user@host:~> ping 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
From 192.168.11.172: icmp_seq=2 Destination Host Unreachable
From 192.168.11.172 icmp_seq=2 Destination Host Unreachable
From 192.168.11.172 icmp_seq=3 Destination Host Unreachable
From 192.168.11.172 icmp_seq=4 Destination Host Unreachable
From 192.168.11.172 icmp_seq=6 Destination Host Unreachable
From 192.168.11.172 icmp_seq=7 Destination Host Unreachable
From 192.168.11.172 icmp_seq=8 Destination Host Unreachable
^C
--- 192.168.11.1 ping statistics ---
8 packets transmitted, 0 received, +7 errors, 100% packet loss, time 7000ms
, pipe 3
user@host:~> sudo route -n
root's password:
sudo: route: command not found
user@host:~> sudo su
host:/home/user # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.11.1 0.0.0.0 UG 0 0 0 eth0


как видно в таблице роутинга вроде все ок.

даже в ifconfig никакого криминала.
дело оказалось в дефолтном драйвере сети которы rtl8139 по умолчанию. И какого было мое удивление когда все залетало, после того как я поменял драйвер на pcnet

все по стандарту
sudo virsh

далее
edit machine_name

и правим секцию interface
    <interface type='bridge'>
      <mac address='52:54:00:54:f4:ba'/>
      <source bridge='br0'/>
      <target dev='vnet1'/>
      <model type='pcnet'/>
    </interface>

среда, 13 августа 2008 г.

x-проброс, или gui по ssh

эх, как же незря купил linux-format, так бы никогда либо бы руки не дошли. либо опять горевал, когда oracle бы ругался - что ему гуевина нужна для установки

вобщем на сервере где у нас ssh и x11 идем в /etc/ssh/sshd_config и убеждаемся что X11Forwarding yes

после этого уже конектимся

ssh -X user@host

тупо заметка

для оракла ндо егошние библы, поэтому в
/etc/ld.so.conf добавить путь к библиотекам оракла и запустить ldconfig
так же пригодятся переменные окружения, ORACLE_HOME и ORACLE_BASE
поэтому в /etc/enviroment добавим их после всего у меня получилось что то типа этого

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:.:/usr/lib/jvm/java-6-sun/jre/bin/:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin"
JAVA_HOME="/usr/lib/jvm/java-6-sun/"
CLASSPATH="/usr/lib/jvm/java-6-sun/lib:."
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
ORACLE_BASE=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server


ну и перегрузим их

etc/environment'

суббота, 3 мая 2008 г.

FFmpeg ошибки и установка, а также как nwz-s618 научился смотреть видео

Вобщем сижу и делаю сайт, и тут мне понадобилось автоматом клепать иконки, в формате .gif для небольших видеороликов. Полазив по интернету остановился на ffmpeg для нарезки скриншотов. и imagemagick для собирательства скриншотов в .gif (в ffmpeg конечно есть функция преобразования сразу в гиф, но как сделать промежуток больше чем 1кадр в секунду я не смог, да и качество меня не вполне брадовало)

Все бы хорошо, но 3 часа мучался с ошибкой

ffmpeg: error while loading shared libraries: libx264.so.54: cannot open shared object file: No such file or directory

какую фигню только не пробовал, и что не пытался - все напрасно
а ведь нужно делать иконки для видеофайлов

и о чюдо - после 2х часовой пробежки на роликах наконецто решился собрать ffmpeg сам! гы гы.. :) вот такой вот я лентяй - сижу под ubuntu и собирать что то самому я не привык.

https://wiki.ubuntu.com/ffmpeg - вот это вот статья оригинал по которой у меня и получилось его собрать. - до этого пробовал с других источников, и все время натыкался на ошибку отсутствующего модуля

ну вобщемто и все :), ffmpeg собрался без всяких проблем.
пока собирал :) мысли про работу ушли далеко на последний план и вспомнилось, что уже давно не смотрел видео на плеере. посмотрев историю браузера нашел тот скрипт который конвертирует видео в mp4

вот этой строчкой можно конвертировать видео в 320х240 x264 файл

ffmpeg -y -i INPUT.avi -threads auto -vcodec libx264 -b 250k -maxrate 768k \
-flags +loop -cmp +chroma -partitions +parti4x4+partp4x4+parti8x8+partp8x8 -flags2 \
+mixed_refs -level 13 -refs 3 -subq 7 -trellis 2 -me 6 -g 300 -s 320x240 -ab 128k -ar\
44100 -ac 2 -acodec libfaac OUTPUT.mp4

чтоб каждый раз ее не вводить можно создать вот такой вот скрипт
(модифицированный от Eric Hewwitt's)

#!/bin/bash

input_file=$1
input_x=`ffmpeg -i "${input_file}" 2>&1 | sed '/Video:/!d' | sed 's/.* \([0-9]\{3,4\}\)x\([0-9]\{3\}\).*/\1/'`
input_y=`ffmpeg -i "${input_file}" 2>&1 | sed '/Video:/!d' | sed 's/.* \([0-9]\{3,4\}\)x\([0-9]\{3\}\).*/\2/'`
echo $input_x
echo $input_y
output_dir=$PWD
declare -i crop_tmp
crop_tmp=-$input_y/3*2+$input_x/2
declare -i crop
crop=$crop_tmp+$crop_tmp%2
echo $crop

ffmpeg -y -i "${input_file}" -threads auto -vcodec libx264 -b 250k -cropleft "${crop}" -cropright "${crop}" -aspect 1.333 -maxrate 768k -flags +loop -cmp +chroma -partitions +parti4x4+partp4x4+parti8x8+partp8x8 -flags2 +mixed_refs -level 13 -refs 3 -subq 7 -trellis 2 -me 6 -g 300 -s 320x240 -ab 128k -ar 44100 -ac 2 -vol 768 -acodec libfaac "${output_dir}/${input_file}_walkman.mp4"


для использования alkman INPUT.avi

ну вот пожалуй и все :), ну а к gif-кам мы вернемся чуть чуть попозже