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



пробую gnom-blog

Вот решил найти какойнибудь оффлайн клиент для блога. судя по всему gnome-blog это не то что мне нужно

хочется чтоб можно было вставлять форматированный текст. идеал с подсветкой, если это java, python, bash, etc..

здсесь же совсем ничего интересного

ну ладно хоть вставка изображений через drug-n-drop работает =)



аххх шЫт фот и нфига.. вставится вставилось, но на момент upload-а выругался :)

TNS-01150: The address of the specified listener name is incorrect и все все все

Иш ты жесть какая с ораклом приключилась. поставил Оракл все путем, но листнер стартовать не хочет пишет вот такую ошибку

Started with pid=5629
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
TNS-01150: The address of the specified listener name is incorrect
TNS-01153: Failed to process string: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xps)(PORT=null)))
No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))


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

вот это не правильно
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xps)(PORT = null))
)
)


а вот это правильно
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xps)(PORT = null))
)
)


В моем же случае все оказалось проще :), (PORT = null) вот это дело не давало мне покоя.. - нужно было поменять на (PORT = 1524), ибо слушанье на нулевом порту это жесть.

Так что наводите красоту и будьте бдительны :)

в догонку
если получили вот такую ошибку
Failed to auto-start Oracle Net Listener using /ade/vikrkuma_new/oracle/bin/tnslsnr

то дело в том что ORACLE_HOME_LISTNER захардкожен в скрипте запуска dbstart
поменять на это
ORACLE_HOME_LISTNER=$ORACLE_HOME

и наступит счастье :)

ну а если счастье не наступило, как у меня, и появилась вот такая ошибка
OC4J Configuration issue. /u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/OC4J_DBConsole_xps_orcl not found.

то как советует интернет, нужно проверить ORACLE_SID, но опять же не мой случай. :) у меня в папке $ORACLE_HOME/j2ee/ действительно небыло файла OC4J_DBConsole_xps_orcl. И тут на помощь пришла утилита
$ORACLE_HOME/bin/dbca

которая отконфигурит вашу датабазу и вот уж тогда и засияют помидоры.

суббота, 25 сентября 2010 г.

Install flashplayer debugger to firefox

wget http://download.macromedia.com/pub/flashplayer/updaters/10/flash_player_10_linux_dev.tar.gz
tar -xzvf flash_player_10_linux_dev.tar.gz
cd flash_player_10_linux_dev/
tar -zxvf plugin/debugger/libflashplayer.so.tar.gz
sudo mv libflashplayer.so /usr/lib/flashplugin-installer/

воскресенье, 19 сентября 2010 г.

Google images + stardict sound + anki

И так не сказать что все прошло гладко :) ОДнаждый меня забанил гугл, после того как я в 26 потоков началу него выпрашивать картинки, поэтому пришлось немного переписать скрипт.
Работает следующим образом. У меня 14 тыщ звуковых файлов. я их смотрю и отправляю запрос вида
http://www.google.com/images?....

Ну и после этого мне возвращается несколько картинок, я беру всего 3, их склеиваю в одно изображение и приписываю перевод который мне дает stardict (тоже узкое место, из за того что куча словарей и иногда получается билеберда)
и на выходе получаем следующее
например на заброс backbone получается такая вот карточка

ball

call


если все ок, то звуковой файл кладется рядышком, и переход на следующую итерацию, если вдруг гугл нас банит - то ни одно изображение до нас не доходит и программа завершается.
скрипт для запуска
#!/bin/bashls
TERM=xterm
export TERM
THREADS=3
TIMEOUT=5s

for FOLDER in /usr/share/stardict/sounds/Sound_En/*;
do
bash ../ganki.sh "$FOLDER" &
while [ "`jobs -p|wc -l`" -ge $THREADS ];
do
sleep $TIMEOUT
done
done



все чем он занимается это запускает основной в несколько потоков (тут можно настроить timeout с которым он опрашивает сколько потоков в текущий момент крутится и количество тредов), также обратите внимание что он запускает (это 2й основной скрипт) и по чему идет цикл (это рутовая директория аудиофайлов в которой 26 дирикторий с английскими буковками, внутри которых аудиофайлы с словами на эту букву)


#!/bin/bash
# Great thanks image download function creator http://www.krazyworks.com/wget-google-image-collector/
TMP_FILE=g.src.tmp
IMAGE_COUNT=3
SIZE="large"


FONT="/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf"

ROOT_FOLDER=$1;
OUT_DIR=$(echo $ROOT_FOLDER|sed "s/.*\///g")

if [ ! -d "$OUT_DIR" ]
then
mkdir $OUT_DIR
fi

for SOUND_FILE in $ROOT_FOLDER/*;
do
cp $SOUND_FILE $OUT_DIR;
KEYWORD=`echo ${SOUND_FILE/*\//}|sed "s/.ogg//g"`;
echo $OUT_DIR:$KEYWORD;
CAPTION=$(sdcv -n $KEYWORD|grep -A 10 Ru|egrep '^ *[1-3]\)'|head -n 2|sed "s/^ *[0-9].//g"|tr "\n" ", ")
if [ -z "$CAPTION" ];
then
CAPTION=$(sdcv -u 'LingvoUniversal (En-Ru)' $KEYWORD|tail -n 2|tr "\n" ", ")
fi
CAPTION=$(echo $CAPTION|sed 's/[\,]* *$//g');





# download images from google
i=0
URL="http://images.google.com/images?q=${KEYWORD}&svnum=100&hl=en&lr=&safe=off&sa=G&imgsz=${SIZE}"
wget -q -U Mozilla -O "${OUT_DIR}/results_${i}.txt" "$URL" -e robots=off

cat "${OUT_DIR}/results_${i}.txt" | sed 's/href/\n/g' | grep imgurl | grep imgrefurl | sed 's/imgurl=/@/g' | sed 's/&imgrefurl/@/g' | awk -F'@' '{print $2}' > "${OUT_DIR}/image_urls.txt"
results=$(cat "${OUT_DIR}/results_${i}.txt" | sed 's/border/\n/g' | fgrep '&start=' | fgrep -v '&start=0' | uniq | fgrep '
' | wc -l | awk '{print $1}')

i=1
while [ $i -lt $results ]
do
(( START = i * 20 ))
URL="http://images.google.com/images?q=${KEYWORD}&svnum=100&hl=en&lr=&safe=off&sa=G&imgsz=${SIZE}&start=${START}"
wget -q -U Mozilla -O "${OUT_DIR}/results_${i}.txt" "$URL" -e robots=off
cat "${OUT_DIR}/results_${i}.txt" | sed 's/href/\n/g' | grep imgurl | grep imgrefurl | sed 's/imgurl=/@/g' | sed 's/&imgrefurl/@/g' | awk -F'@' '{print $2}' >> "${OUT_DIR}/image_urls.txt"
(( i = i + 1 ))
done


find "$OUT_DIR" -type f -name "results_*.txt" -exec rm {} \;
cat "${OUT_DIR}/image_urls.txt" | fgrep '.jpg' | head -n ${IMAGE_COUNT} > /tmp/google_image_collector_${KEYWORD}.tmp
mv /tmp/google_image_collector_${KEYWORD}.tmp "${OUT_DIR}/image_urls.txt"

if [ -f "${OUT_DIR}/image_urls.txt" ]
then
clear
COUNT=$(cat "${OUT_DIR}/image_urls.txt" | wc -l | awk '{print $1}')
#echo "Found $COUNT images matching $KEYWORD"
if [ $COUNT -eq 0 ];
then
echo $OUT_DIR:"gooogle probably block me"
exit 0;
fi
j=1
cat "${OUT_DIR}/image_urls.txt" | while read LINE
do
wget -q -U Mozilla -nd -t 1 -T 5 -O "${OUT_DIR}/${KEYWORD}_${j}.jpg" "$LINE" -e robots=off

convert -resize '200x200' "${OUT_DIR}/${KEYWORD}_${j}.jpg" "${OUT_DIR}/${KEYWORD}_${j}.jpg"
(( j = j + 1 ))

done
fi


convert -size 640x260 gradient: "${OUT_DIR}/grad.jpg"
for ii in `seq 1 3`;
do
composite -compose Copy -geometry +$((10*(ii)+200*(ii-1)))+10 "${OUT_DIR}/${KEYWORD}_$ii.jpg" "${OUT_DIR}/grad.jpg" "${OUT_DIR}/grad.jpg"
rm "${OUT_DIR}/${KEYWORD}_$ii.jpg"
done

convert -background none -fill white -font $FONT -pointsize 18 -size 620x80 -gravity South caption:"$CAPTION" "${OUT_DIR}/caption.gif"
composite -gravity South "${OUT_DIR}/caption.gif" "${OUT_DIR}/grad.jpg" "${OUT_DIR}/$KEYWORD.jpg"
rm "${OUT_DIR}/grad.jpg"
rm "${OUT_DIR}/caption.gif"

done

exit 0


работает это следующим образом - создаете эти 2 скрипта в одной дириктории, у меня это ganki_root.sh и ganki.sh а также дирикторию (у меня это ganki)
далее
cd ganki
chmod a+x ../ganki_root.sh
../ganki_root.sh


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


большой респект человеку написавшим сей скрипт и сэкономившему мне кучу времени с работой google.com/images

четверг, 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