» Publishers, Monetize your RSS feeds with FeedShow: More infos (Show/Hide Ads)
На обратном пути решил отметить чашкой кофе в Венеции. Познакомился с обаятельным итальянцем, Альваро, который недавно приехал в Питер, говорит по-английски и немного по-испански. Но испанский он знает хуже меня, так что сразу перешли на английский. Оказалось, что он работает сисадмином в одной софтверной конторе, а в свободное время преподает латиноамериканские танцы. Удачное знакомство. :)
Кстати, заметил, что начал при разговоре путаться: когда говорю на испанском, частенько вставляю английские слова, и наоборот. Меня это ужасно расстраивает. Некрасиво как-то, а собеседнику, наверное, еще хуже слушать эту мешанину. Надо больше практиковаться, больше общаться на обоих языках, наверное. Где бы только найти собеседников.
Завтра надеюсь дойти до занятия по реггетону, а после него наверное зайду на сальса-вечеринку, которую устраивает организатор нашего танцевального клуба. Танцевать я еще не смогу, но хотя бы взгляну, как это выглядит вживую.
Не только в России журналисты выдумывают небылицы.
Пока на каждую строчку уходит минут 20 времени. Грамматические конструкции вроде бы не особенно сложные, но очень много незнакомых слов. Едва ли не каждое второе. Все вношу в anki, надеюсь, дальше читать станет легче.
Еще накачал клипов по сальсе. Периодически отрабатываю движения перед экраном. Наверное, ужасно коряво, но надеюсь это поможет мне догнать нашу группу. Очень хочется начать танцевать.
Остаток понедельника и весь вторник я ее настраивал на то, что у нее все получится, и в среду она согласилась сделать еще одну попытку, хотя пришлось впихивать ее в зал почти силой. Наверное помогло то, что нас было всего трое на первом занятии — я, моя партнерша, и еще одна девочка.
Ведет занятия симпатичная веселая кубинка Дейзи, которая не знает ни слова по-русски (только «право» и «лево», но и их она путает) — и я, и моя партнерша, от нее в восторге. Именно благодаря ей Рита решила остаться, хотя у нее, также как и у меня, пока ничего не получается, и она очень стесняется. Меня Дейзи постоянно подбадривала, в конце занятия я поболтал с ней немного на своем ломаном испанском, и она сказала, что видно, что я никогда не танцевал, но также видно, что очень хочу научиться, значит, у меня все получится.
Зовут их Ферран и Кончи (Conxi, тоже в первый раз слышу такое оригинальное имя), живут в Барселоне, работают в банке, любят путешествовать. Специально берут отпуск осенью, чтобы поездить по миру. В Испании принято отдыхать в августе, но мои новые друзья говорят, что в августе работать в банке очень хорошо, потому что есть кондиционер и нет посетителей. А в сентябре, когда все возвращаются из отпусков и начинается стресс и неразбериха, они наоборот уезжают. )))
Постоянно восхищались моим произношением — значит не зря стараюсь каждый день слушать уроки и радио на испанском.
Под конец обменялись номерами телефонов и адресами электронной почты. Я сказал, что могу погулять с ними завтра или на неделе, показать город, но они отказываются, говорят, что не хотят злоупотреблять моим расположением. Впрочем, пообещали, что в понедельник позовут с собой во второй половине дня.
Сегодня написал первый баг в баг-трекер Django. Натыкался на ошибки и раньше, конечно, но всегда кто-то сообщал о них раньше меня.
SELECT activity_activityevent.id, activity_activityevent.user_id, activity_activityevent.added_on FROM activity_activityevent WHERE activity_activityevent.user_id IN ( SELECT U0.user_id FROM profile U0 INNER JOIN profile_friends U1 ON U0.user_id = U1.to_profile_id WHERE U1.from_profile_id = 5 ) ORDER BY activity_activityevent.added_on DESC LIMIT 10
EXPLAIN ANALYZE с настройками по умолчанию:
Limit (cost=4815.62..4815.65 rows=10 width=202) (actual time=332.938..332.977 rows=10 loops=1)
-> Sort (cost=4815.62..4816.35 rows=292 width=202) (actual time=332.931..332.945 rows=10 loops=1)
Sort Key: activity_activityevent.added_on
Sort Method: top-N heapsort Memory: 19kB
-> Hash IN Join (cost=2204.80..4809.31 rows=292 width=202) (actual time=12.856..283.916 rows=15702 loops=1)
Hash Cond: (activity_activityevent.user_id = u0.user_id)
-> Seq Scan on activity_activityevent (cost=0.00..2370.43 rows=61643 width=202) (actual time=0.020..126.129 rows=61643 loops=1)
-> Hash (cost=2200.05..2200.05 rows=380 width=8) (actual time=12.777..12.777 rows=424 loops=1)
-> Nested Loop (cost=11.20..2200.05 rows=380 width=8) (actual time=0.260..11.594 rows=424 loops=1)
-> Bitmap Heap Scan on profile_friends u1 (cost=11.20..62.95 rows=380 width=4) (actual time=0.228..1.202 rows=424 loops=1)
Recheck Cond: (from_profile_id = 5)
-> Bitmap Index Scan on profile_friends_from_profile_id_key (cost=0.00..11.10 rows=380 width=0) (actual time=0.208..0.208 rows=424 loops=1)
Index Cond: (from_profile_id = 5)
-> Index Scan using profile_pkey on profile u0 (cost=0.00..5.61 rows=1 width=4) (actual time=0.012..0.015 rows=1 loops=424)
Index Cond: (u0.user_id = u1.to_profile_id)
Total runtime: 333.190 ms
Теперь запрещаем seq scan (set enable_seqscan to off) и снова выполняем EXPLAIN ANALYZE:
Limit (cost=9528.36..9528.38 rows=10 width=202) (actual time=165.047..165.090 rows=10 loops=1)
-> Sort (cost=9528.36..9529.09 rows=292 width=202) (actual time=165.042..165.058 rows=10 loops=1)
Sort Key: activity_activityevent.added_on
Sort Method: top-N heapsort Memory: 19kB
-> Nested Loop (cost=2201.00..9522.05 rows=292 width=202) (actual time=13.074..126.209 rows=15702 loops=1)
-> HashAggregate (cost=2201.00..2204.80 rows=380 width=8) (actual time=12.996..14.131 rows=424 loops=1)
-> Nested Loop (cost=11.20..2200.05 rows=380 width=8) (actual time=0.263..11.665 rows=424 loops=1)
-> Bitmap Heap Scan on profile_friends u1 (cost=11.20..62.95 rows=380 width=4) (actual time=0.232..1.181 rows=424 loops=1)
Recheck Cond: (from_profile_id = 5)
-> Bitmap Index Scan on profile_friends_from_profile_id_key (cost=0.00..11.10 rows=380 width=0) (actual time=0.210..0.210 rows=424 loops=1)
Index Cond: (from_profile_id = 5)
-> Index Scan using profile_pkey on profile u0 (cost=0.00..5.61 rows=1 width=4) (actual time=0.013..0.016 rows=1 loops=424)
Index Cond: (u0.user_id = u1.to_profile_id)
-> Index Scan using activity_activityevent_user_id on activity_activityevent (cost=0.00..18.82 rows=35 width=202) (actual time=0.014..0.130 rows=37 loops=424)
Index Cond: (activity_activityevent.user_id = u0.user_id)
Total runtime: 165.323 ms
Время выполнения запроса уменьшилось в два раза. Тот же самый результат получается, если установить random_page_cost меньшим или равным 1.2. Оба подхода мне не очень нравятся, особенно с выключением seq scan.
Просто не понимаю, каким разумным методом заставить postgres использовать здесь индекс. Видимо, я что-то не догоняю.[NOTICE@1252216599.924163] mcm_storage_cmd():3339: unable to store value: add [NOTICE@1252216599.924494] mcm_storage_cmd():3339: unable to store value: add [NOTICE@1252216599.924764] mcm_storage_cmd():3339: unable to store value: add [NOTICE@1252216599.925048] mcm_storage_cmd():3339: unable to store value: add
Соответственно, кэширование не работает. Гугление этих ошибок никакого вразумительного ответа не дает. Видимо, придется откатываться к более медленному pure-python модулю memcache.
Искусственный интеллект PostgreSQL начинает задалбывать. Есть долгий запрос с несколькими JOIN'ами. В паре JOIN'ов не используется индекс, вместо этого Postgres ищет 1000 значений в таблице из миллиона записей методом seq scan. Развернул дамп базы локально на той же версии postgres. Сделал VACUUM ANALYZE для трех таблиц, которые используются в JOIN'ах. Postgres начал использовать индекс и время выполнения запроса уменьшилось более чем в два раза. На production VACUUM ANALYZE тех же таблиц ни к чему не приводит, запрос выполняется все так же медленно.
Может быть ему вообще запретить метод seq scan?
CREATE OR REPLACE VIEW pg_table_nonindex_x AS SELECT x1.table_in_trouble, pg_relation_size(x1.table_in_trouble) AS sz_n_byts, x1.seq_scan, x1.idx_scan, CASE WHEN pg_relation_size(x1.table_in_trouble) > 500000000 THEN 'Exceeds 500 megs, too large to count in a view. For a count, count individually'::text ELSE count(x1.table_in_trouble)::text END AS tbl_rec_count, x1.priority FROM ( SELECT (schemaname::text || '.'::text) || relname::text AS table_in_trouble, seq_scan, idx_scan, CASE WHEN (seq_scan - idx_scan) < 500 THEN 'Minor Problem'::text WHEN (seq_scan - idx_scan) >= 500 AND (seq_scan - idx_scan) < 2500 THEN 'Major Problem'::text WHEN (seq_scan - idx_scan) >= 2500 THEN 'Extreme Problem'::text ELSE NULL::text END AS priority FROM pg_stat_all_tables WHERE seq_scan > idx_scan AND schemaname != 'pg_catalog'::name AND seq_scan > 100) x1 GROUP BY x1.table_in_trouble, x1.seq_scan, x1.idx_scan, x1.priority ORDER BY x1.priority DESC, x1.seq_scan ; SELECT * FROM pg_table_nonindex_x;
Отсюда.
He would also have to pay a fine of $250,000 (£150,000) for each of the two charges.
Good thing he didn't download any music!
Пока нашел простенький тест: http://www.studyspanish.com/verbs/
Надо бы что-нибудь подобное для anki написать. Допустим, помечать глаголы меткой Verbo и генерировать дополнительные вопросы, типа, «как спрягается этот глагол в таком-то времени в таком-то наклонении»... Не знаю, когда время для этого появится.
P.S. Нашел еще одну полезную ссылку: Conjugación de Verbos/Spanish Verb Conjugation
Осталось дождаться, когда этот посконный российский средний класс организует нам соответствующие инновации и нанотехнологии. ...
via
После сеанса пришло в голову, что это, возможно, пропаганда толерантности, но довольно ненавязчивая.
Меня на этих фотографиях нет, поскольку в тот день сильно порезался бритвой, пришлось заклеить морду пластырем, постеснялся фотографироваться.
Длинноволосая брюнетка — Мария Кармен, переводчица из Андалусии, очень красивая. Не знал, что испанки бывают настолько красивыми. Девочка в белой толстовке и очках — дочь Игнасио, Соледад (странное имя, как им в голову приходит так детей называть).
Видео, как наш Игнасио играет на гитаре. Не перестаю удивляться талантам этого человека. На одном из видео поет Валя — секретарь центра. Ни слова не разобрать, но красиво. ))))
http://www.youtube.com/watch?v=Fj7TcR9bV6s
http://www.youtube.com/watch?v=bePx4oFDtPE
http://www.youtube.com/watch?v=X4ipaADjS9o
http://www.youtube.com/watch?v=S9moAsx4gmc (сиськи! но одетые, не обольщайтесь)
Необходимость возникла из-за того, что pymmseg (основанный на mmseg-cpp) считает CJK-пунктуацию отдельными словами. :(
Существует пакет MeCab для работы с японскими текстами. Предназначение его неизвестно, поскольку документация скудная и исключительно на японском. Мне надо всего лишь разбивать японские текст по словам (китайские тоже, но для этих целей есть простой и понятный pymmseg).
К счастью, нашел на Google Code Search минимальный пример на Ruby, который быстро портировал на Python:
import MeCab
def words(text):
mecab = MeCab.Tagger("")
mnode = mecab.parseToNode(text.encode('euc_jp'))
word_array = []
while mnode:
infos = {}
infos['word'] = mnode.surface.decode('euc_jp')
feature = mnode.feature.decode('euc_jp')
array = feature.split(",")
infos['type'] = array[0]
infos['dform'] = array[4]
infos['reading'] = array[5]
if not infos['type'] == "BOS/EOS":
word_array.append(infos)
mnode = mnode.next
return word_array
sentence = u"共焦点レーザ走査型顕微鏡FV1000は、レーザ顕微鏡に求められる基本性能を極限まで追求しました"
print sentence
for w in words(sentence):
print w['word']
Для работы необходимо установить пакеты mecab и python-mecab, например, из The Ubuntu NLP Repository (я использовал самосборный).







