про консольный словарик, сурикатов и точки
Jul. 6th, 2016 03:18 pmДавно заметил, что если нужно перевести слово, вместо рыскания по словарям, дающим сразу десяток значений, часто самый адекватный перевод получается, если открыть по этому слову страницу в википедии и посмотреть, как называется эта страница на русском.

Сейчас сделал себе из этого консольный переводчик. Теперь могу в консоли так делать:
Вот весь исходник с парой занятных моментов:
Старожилы рассказывают, что в древнем наречии Visual Basic было заклинание On Error Resume Next, которое говорило в случае ошибки ее тупо игнорировать и идти дальше. Часто его вспоминаю, когда использую в D другое заклинание -
Другой забавный момент - как точки помогают писать в бесточечном стиле. :) За счет активного использования UFCS (universal function call syntax), методов и свойств, в теле main вообще ни одной переменной. В Окамле, F# или Elm'e это было бы много слов, разделенных |>, а в хаскеле - точками или $ да еще в обратном порядке. D-ивный вариант бесточечной записи через точки мне сейчас субъективно симпатичней.
Если вдруг кому нужно, виндовый бинарник можно взять тут, а можете и на свой любимый язык переложить, там логики-то на две строчки.
Сейчас сделал себе из этого консольный переводчик. Теперь могу в консоли так делать:
>ru meerkat Сурикат >ru sodium Натрий
Вот весь исходник с парой занятных моментов:
import std.stdio, std.net.curl, std.json; auto rus(string s) { version(Windows) { import std.windows.charset, std.conv; return toMBSz(s, 866).text; } else return s; } void main(string[] argv) { scope(failure) return; if (argv.length < 2) return writeln("usage: ru word"); get("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=langlinks&lllang=ru&titles="~argv[1]) .parseJSON["query"]["pages"].object.values[0]["langlinks"][0]["*"].str.rus.writeln; }
Старожилы рассказывают, что в древнем наречии Visual Basic было заклинание On Error Resume Next, которое говорило в случае ошибки ее тупо игнорировать и идти дальше. Часто его вспоминаю, когда использую в D другое заклинание -
scope(failure) return. Конструкция scope заворачивает код до конца скоупа в try-catch и позволяет указать некоторый код, который будет выполнен если вылетело исключение (scope(failure)), если не вылетело (scope(success)) или в любом случае (scope(exit)). Удобно для всяких RAII-подобных вещей, когда лень писать честный try-catch-finally или создавать обертку с деструктором. Так вот, если в scope(..) засунуть return, это приведет к тихому выходу из функции без дальшейшего пробрасывания исключения. В данном примере это означает, что если не удалось сделать запрос или найти в ответе искомое, программа завершается молча.Другой забавный момент - как точки помогают писать в бесточечном стиле. :) За счет активного использования UFCS (universal function call syntax), методов и свойств, в теле main вообще ни одной переменной. В Окамле, F# или Elm'e это было бы много слов, разделенных |>, а в хаскеле - точками или $ да еще в обратном порядке. D-ивный вариант бесточечной записи через точки мне сейчас субъективно симпатичней.
Если вдруг кому нужно, виндовый бинарник можно взять тут, а можете и на свой любимый язык переложить, там логики-то на две строчки.
no subject
Date: 2016-07-06 08:34 am (UTC)no subject
Date: 2016-07-06 08:35 am (UTC)no subject
Date: 2016-07-06 08:37 am (UTC)no subject
Date: 2016-07-06 08:50 am (UTC)no subject
Date: 2016-07-06 11:06 am (UTC)no subject
Date: 2016-07-06 11:22 am (UTC)Понадеемся, что википедия не настолько бдительная.
Либо надо, хотя бы для приличия, подсовывать курлу реферер и юзерагент от настоящего браузера.
no subject
Date: 2016-07-06 11:23 am (UTC)no subject
Date: 2016-07-06 12:00 pm (UTC)Re: get("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=langlinks&lllang=ru&titles
Date: 2016-07-06 12:21 pm (UTC)Просто!
Пришлось в документации к Вики покопаться, чтобы такой запросец составить?
Re: get("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=langlinks&lllang=ru&titles
Date: 2016-07-06 12:30 pm (UTC)Re: get("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=langlinks&lllang=ru&titles
Date: 2016-07-06 12:32 pm (UTC)no subject
Date: 2016-07-06 04:21 pm (UTC)no subject
Date: 2016-07-06 06:39 pm (UTC)что позволено юпитеру... вот сейчас молодая шпана решит, что это нормально.
no subject
Date: 2016-07-06 06:44 pm (UTC)no subject
Date: 2016-07-07 01:29 pm (UTC)no subject
Date: 2016-07-08 11:10 am (UTC)