Monthly Archives: March 2012

QObject auto-disconnect in destructor

It is pretty nice that QObject::~QObject() automatically disconnects everything connected to the object's slots. However, it would be pretty unwise to always rely on this useful feature. Here's one good example how it can screw up a seemingly harmless code.

Suppose you have some kind of networking class, say, MyProtocol. This class is a descendant of QObject that incorporates several fields, including a custom MyStream object. MyProtocol is also connected to the disconnected() signal of the socket used for network communication. Now MyStream has a destructor that sends some sort of "goodbye message" to the other end using the same socket. When this happens, the socket could realize that the connection is broken and emit disconnected(). Which would call the appropriate slot in the half-destructed MyProtocol:

This could be a source of rather subtle bugs. Since MyStream destructor is called from the MyProtocol destructor, it can’t be guaranteed that the MyProtocol object is still usable. And ~MyStream() doesn’t use it directly! Instead, it works with the socket, which in turn can emit some signals, and some slots will get called, some of them possibly in the half-destructed MyProtocol!

How to deal with this? Easy. Disconnect all the signals as soon as you don’t need them any more. Writing a custom destructor for MyProtocol that does it would work too. Too bad Qt doesn’t provide a way to disconnect every signal connected to a particular object, only the other way around (all slots connected to the object signals). The hardest part of this kind of bugs is to figure out what happens, as the program could break at any point later due to memory corruption.

Иврит через жопу – IV: учимся читать

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

Иврит через жопу – III: основы грамматики

Третья часть "Иврита через жопу" вышла самой полезной. Благодаря ей у меня наконец в голове уложились такие понятия как "гизра" и "биньян", а то они меня всё время в ступор вгоняли. Работаю теперь над четвёртой частью, разбирая детскую песенку. Уже получается что-то понять.

Мнемонический словарик иврита

О что я нашёл:

http://zhurnal.lib.ru/c/cherfas_s/slovarik.shtml

Обожаю такие мнемонические выверты. Как у Адиля Талышханова я сразу запомнил "рыбу" ("Семь полей огнём объяты…"), так и тут нечто похожее, только для иврита.

Иврит через жопу – II: огласовки

Довольно легко осилил и вторую часть "Иврита через жопу": огласовки. Это признак того, что пора мне всерьёз браться за грамматику. В третьей части, наверное, изложу основы морфологии, чтобы прочувствовать, что происходит при добавлении окончаний и при стыковке корней с моделями в простейших случаях.

Иврит через жопу, часть I

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

Виртуальный ульпан

Ну наконец-то я нашёл толковый вводный курс в иврит, без натуральной дезинформации, с изрядной долей грамматики, но не перегруженный рафинированной логикой, как "Иврит через мозг", а разбавленный наглядным материалом. "Виртуальный ульпан" называется. Одна беда – похоже, он не закончен. Что неудивительно, создание полного курса потребовало бы долгой и кропотливой работы. Тут не только времени много надо, но и определённое упорство требуется. Тем не менее, для начала очень и очень неплохо. Глядишь, после него и "Иврит через мозг" будет нормально усваиваться.

Google не отстаёт от Яндекса

Я уже писал, что Яндекс обзавёлся дурной привычкой игнорировать слова при поиске? Что ж, прогресс не стоит на месте. Google туда же: по запросу "ударение в слове מאה" находит кучу ударений в каких угодно русских словах. Постановка кавычек пока помогает. Если их ухитриться расставить правильно, что в двунаправленном тексте непросто. Казалось бы, надо их поставить в начале и в конце слова מאה. А где у него конец? Правильно, после буквы ה, то есть слева от неё. А где начало этого слова? С одной стороны, вроде как перед буквой מ, то есть справа от неё, но с другой стороны – после пробела, следующего за словом "слове", то есть… слева от буквы ה! О, мой мозг!… Расстановка лишних пробелов с последующей их ликвидацией помогла.

Иврит через мозг и японский через Sailor Moon

Есть такой учебник по ивриту, "Иврит через мозг" называется. Хороший, в общем-то, учебник. Но очень скупой на примеры. Сами авторы по этому поводу пишут, что источником примеров для обучающегося должен служить окружающий иврит, благо этого добра в Израиле предостаточно. Я, конечно, не в Израиле, и поэтому у меня с окружающим ивритом обстоит далеко не так радужно, однако в Интернете "окружающего иврита" тоже немало, было бы где искать. Так вот, толку от этого "окружающего иврита" – нуль. Чтобы в нём хоть что-то понять, даже если все никудоты проставлены по классической орфографии, нужно сначала осилить учебник целиком, и хотя бы запомнить, где там что искать. То есть, чтобы найти в учебнике правило образования того или иного слова, мне надо понять, какая это часть речи, какая модель, нет ли предлогов или окончаний. А как я это всё пойму, если я иврит знаю лучше китайского только в том смысле, что по-китайски я даже до десяти не досчитаю, а на иврите аж до 99 могу?

Вот и получается, что вопреки заявлением авторов, "иврит через мозг" – это и "мозг через иврит" тоже. Другими словами, нужно всё-таки не только иметь натренированный мозг, но и "натренированный" иврит тоже немножко нужен. С натренированным мозгом у меня всё в порядке, но освоить такой объём информации без практики нереально. Ну, то есть реально, конечно, но сил на это придётся положить невероятно много, так что теряется сам смысл такого подхода. Получается, так называемый "учебник" по сути является справочником, и учить по нему иврит – всё равно, что изучать .Net по MSDN. Конечно, тому, кто знаком с самим принципом подобных платформ, MSDN будет вполне достаточно. А для кого это всё вновь, MSDN – не более, чем свалка разрозненной информации.

Простой пример, чтобы было понятнее. В японском языке прошедшее время для глаголов некой группы образуется путём замены -ru на -ta. Вроде бы предельно просто. А теперь, если вы совсем не знаете японского, попробуйте найти примеры для этого правила в Интернете. Да вы вряд ли поймёте по мешанине незнакомых символов, где там одно слово начинается, и другое заканчивается (внезапно: в японском нет пробелов), не говоря уж, где там глаголы. А теперь представьте, что я вывалил на вас несколько сотен таких правил (хотя наберётся ли столько правил в японском?) – что, японский язык стал понятнее? Ну хоть чуть-чуть? Хотя бы представиться сможете? Кстати, тут уже начинаются грабли, которые ни в одном справочнике по грамматике вы не найдёте. По-русски мы говорим: "Меня зовут Вася" или "Я – Вася", по-английски – "Моё имя есть Вася" или "Я есть Вася", по-японски – "Про меня говорят: 'Вася'" или просто "Говорят: 'Вася'". "Окружающий японский" вам тоже не поможет. Вряд ли современные анимешники на нём могут сказать что-либо сложнее itadakimasu или yokatta. Конечно, при наличии "мозга", если аниме смотреть лет 8 (я как раз где-то столько и смотрю), и при этом периодически лазить в словарь за незнакомыми словами, что-то научиться понимать можно. И после этого грамматические справочники читаются на ура. Но можно те же 8 лет потратить на толковое изучение языка, и выучить его практически в совершенстве.

Конечно, авторам кажется, что их учебник прост и понятен для любого человека с развитым логическим мышлением. Неудивительно, они-то иврит знают. Когда я с некими фундаментальными знаниями японского кинулся читать руководство Таэ Кима по грамматике, мне тоже всё было понятно – ведь я все эти "da yo" и "wakatteru" слышал много раз, поэтому вместо реакции "Что за хрень?" у меня была реакция "А, так вот что это было!" Однако, перед этим я не только несколько лет смотрел аниме, но и почитывал всякие халтурные вводные материалы. Халтурные – потому что не нашёл материалов приличней, хотя у того же Таэ Кима таковые имеются. Разница в построении двух материалов, написанных одним человеком, огромна – один из них просто излагает грамматические правила от простых к сложным (как-то похоже написан и "Иврит через мозг"), а другой – учит самому языку. Прочитав руководство Таэ Кима по грамматике, я если и буду знать, как сказать по-японски "Меня зовут Васёк", то только если попадётся соответствующий пример – кстати, ими Таэ Ким не брезгует даже в справочнике. Прочитав же "Иврит через мозг" я вряд ли смогу сказать хоть одно предложение на иврите, ибо примеры сводятся к детальным (и толковым) разборам отдельных слов – осилив немалую часть учебника, ни одного предложения на иврите я там не увидел. Сочетания слов припоминаются только в разделе про смихут, где без них ну никак нельзя было обойтись. В результате – не помню ничего из прочитанного, кроме отдельных понятий.

Такой вот получается парадокс. Количество информации, подлежащей запоминанию, было сведено к минимуму, поэтому для её усвоения требуется очень хорошая память. Надо было назвать учебник "Иврит через память", что ли. Хотя даже если зазубрить весь учебник, толку будет чуть. Вот попадётся вам слово, написанное, как все нормальные люди пишут, без никудотов и чего вы с ним делать будете? Модель и корень угадывать? Не зная языка? Сам учебник велит в такой ситуации восстановить написание слова в классической орфографии, однако с этим даже в словарях напряжёнка, как же это может проделать человек, языка не знающий? Так что правильнее всего было бы говорить о грамматике иврита через мозг. Вот это учебник даёт, и даёт хорошо. Вот только толку от одной грамматики без языка…

К этому "учебнику", то есть справочнику, нужен ещё какой-то курс, подающий язык как единое целое постепенно, от простых фраз типа "Меня зовут Васёк" до более сложных конструкций. Что-то похожее я нашёл под названием "Иврит с нуля", но там самое-самое начало. Нужен объёмный, толковый, провязанный курс. Чтобы он был проработан как "Иврит через мозг", в идеале – даже ссылался на него, но подавал не справочную информацию, а более практическую. Нужны не описания всех операторов и функций стандартной библиотеки, а основные понятия и примеры, начиная с "Hello World". А встретив в курсе новую конструкцию, можно всегда посмотреть в справочнике, что это такое, и уже тогда усвоить её внутреннюю логику "через мозг".

В принципе, есть один ход конём, позволяющий несколько повысить полезность "окружающего иврита". Если смотреть какой-нибудь Steins Gate, из псевдонаучной абракадабры вряд ли многое сможете разобрать. Если смотреть Saiunkoku Monogatari, то живо рехнётесь от обилия каких-то чуть ли не китайских политических терминов, которые и на русском языке-то понять сложно (хотя я как-то ухитрился посмотреть второй сезон без субтитров, и даже понять там больше половины). Однако, можно посмотреть что-нибудь а-ля Sailor Moon, поменьше слушая, что там лопочет Ами-чан (тем более что она таки часто несёт бред похлеще Усаги). Также, теоретически, можно поступить и с ивритом. Беда только в том, что Sailor Moon почему-то родом из Японии, а не из Израиля. Но можно найти что-нибудь простенькое, детское может быть. Хотя всё равно некий начальный уровень, потому что с нулевым японским вы даже вряд ли поймёте в каком классе учится Усаги, хотя она по-моему чуть ли не в каждой серии в начале об этом сообщает. Да и то, что Усаги – это имя, а не глагол какой-нибудь в хитрой форме, тоже вряд ли поймёте.