Короче, я пришёл <s>нести свет истины</s> рассказать о важном для меня опен-сорсном проекте, с целью получить интеллектуальных инвестиций (то есть идей, советов, субъективных оценок и т.д.). Ща пока расскажу на пальцах, потом что-нибудь покажу. #reality
Проект, надо понимать, называется Reality. Вот тут был маленький скриншотик: https://mokum.place/zverok/352814. Вот тут гитхабик: https://github.com/molybdenum-99/reality (написанное в Ридми для master уже неактуально, более актуально написанное скажем тут: https://github.com/molybdenum-99/reality/wiki, а вот код там короч самый наиактуальнейший, сегодня запушенный) ‎- новомодная имитация мышления
Что такое проект Reality? Это такая штука, построенная из зависти к Wolfram Language, в котором «данные обо всём на свете являются частью самого языка». Я хочу, в пределе, сделать то же самое, только с открытыми исходниками и только на открытых источниках данных. ‎- новомодная имитация мышления
Какой прицел? Должно быть очень, невероятно, невообразимо просто сделать штуки типа «все страны мира → столицы → количество населения» или там «планеты солнечной системы → расстояние от солнца» или «рок-группы → топ-10 → (год создания; сколько участников ещё живы)» и т.д. и т.п. по всем «общеизвестным» областям человеческого знания. ‎- новомодная имитация мышления
Некоторая часть из этого уже работает! Напр. Reality.countries.map(&:capital).map(&:population) кажется вполне себе сработает. Вообще много чего работает, я потихоньку буду набивать тред примерами. ‎- новомодная имитация мышления
В первую очередь, работает Reality.entity(название-чего-угодно) — получается такой объект (а, да это Ruby, если вдруг кому ещё было неочевидно), у которого некоторое количество прикольных данных. Почти для любого хорошоизвестного чегоугодно — данные почти наверняка будут. Хотя бы чучуть. ‎- новомодная имитация мышления
Как оно работает? 1) по «название-чего-угодно» вытаскивается статья англ.википедии; 2) вытаскивается соответствующий ей набор данных из wikidata.org; 3) всё это парсится и по небольшому количеству разных правил превращается собственно в данные; 4) в некоторых случаях подключаются дополнительные модули — например, тянущие погоду с OpenWeatherMap, или корректную таймзону для данной точки с GeoNames, или (в будущем) другие данные из источников открытых данных. ‎- новомодная имитация мышления
Как оно НЕ работает? На самом деле, многими способами — когда данные в Википедии/Викидате тяжело распарсить, когда длинные списки сущностей, когда всякие человеческие вещи (например, Reality.continents выдаст — в соответствии с Википедией — список континентов, где есть Австралия, но нет «Океании», зато «континент Австралия», оказывается, стран не имеет — в соответствии с классификацией Википедии, есть т.н. «страны Океании»). Я буду с этим работать. ‎- новомодная имитация мышления
Там много всяких handcrafted штук, а будет ещё больше (то есть например в коде въявную прописано, что для всех стран список городов есть на странице List of cities in %countryname%, а для США — страница называется по-другому), но базовая цель — простым «обобщённым» кодом+конфигами давать доступ ко всему вообще. То есть Википедия (а позже и не только она) как «оглавление», а потом все данные мира с тобой. В виде простых объектов-словарей, которые хоть в JSON сохраняй, хоть на график выводи, и будет хорошо. ‎- новомодная имитация мышления
Оно, конечно, небыстрое (ну то есть вытянуть «все страны мира» из википедии — это не то совсем, что «выбрать несколько полей из БД»), но я стараюсь, чтобы было разумно быстрое (то есть скажем данные из Википедии тянуло батч-запросом, а не двумя сотнями отдельных). Плюс в следующих версиях будет суровое кеширование, то есть если вы тыщу раз тестируете скрипт «красиво вывести на график население всех столиц», вам же не оч.хочется, чтобы оно каждый раз за всеми странами и страницами по интернетам лазало? Ну, вот. ‎- новомодная имитация мышления
Зачем оно надо, вообще? (Учитывая, что не сильно быстрое и не супер-точное) Мне представляется, что: а) для обучения (то есть можно демонстрировать студентам _всякоэ_ на живых примерах Reality.tv_series(2016).map(&:actors).group_by... и т.д.; б) для демок — то есть вы сделали какой-то новый крутой алгоритм визуализации, а чо б так визуализировать, чтоб понятно было?.. да говно-вопрос, берёшь вот соотношение ВВП стран к их площади, разбиваешь по континентам, и .... в) «для науки», всяких исследований и инфографики — то есть на самом деле, даже сейчас (в состоянии 0.0.2.pre-alpha) оно уже приспособлено добыть всяких смешных данных больше, чем любой известный открытый датасет, типа «по списку рок-групп возраст их участников и кто из них ещё жив и выпускает ли сольные альбомы» и ты пы ‎- новомодная имитация мышления
Короче, вот! Я пока сделаю паузу, со мной тут можно разговаривать дальше просто, чё-то я устал писать. Потом я буду потихоньку подкидывать в этот тредик чо оно умеет — смешные примеры однострочного кода, которые дают осмысленный результат. ‎- новомодная имитация мышления
Reality.entity('Cambodia').cities.sample(10).map(&:area).reduce(:+) — напр, сумма площадей 10 случайных камбоджийских городов :) ‎- новомодная имитация мышления
Мне не так давно приснился сервис для метеопатов, который подбирает идеальное место для проживания (температуру, влажность, давление, предпочитаемая еда etc). ‎- very lovely tea
Reality.entity('Beatles').parts.select(&:alive?).map{|m| m.albums.last} — напр., последние альбомы тех участников Битлз, которые ещё живы (NB: я чучуть упрощаю код для понятности, о чём я, в реальности нужны пара доп.проверок) ‎- новомодная имитация мышления
@teavera: а кстати это смешной кейс. моя убер-идеальная Reality пожалуй даже это должна бы типа в пару строк делать :) ‎- новомодная имитация мышления
Reality.entity('Yukihiro Matsumoto').birth_place.population там например. ‎- новомодная имитация мышления
Reality.entity('Elbrus').elevation / Reality.entity('Eiffel Tower').height # => 17.4 напр. Плохо, штоле?.. ‎- новомодная имитация мышления
Меня одно смущает: в любом реальном, не развлекательном кейсе будут требоваться ссылки на источники данных (не на вики, понятно). Но концептуально очень клёво. ‎- несомненный злоумышленник
Ну наше дело маленькое. То есть там дальше будет (один чувак делает) скажем подключение всяких экономических точных датасетов. И вот там и данные будут точнее, и к ним будут референсы встроенные, серьёзнее чем википедия. А моё пока дело — «всё по периметру» (никому непонятная цитата) охватить. ‎- новомодная имитация мышления
Reality.entity('Hyde Park, London').coord.sunrise # => 2016-02-27 06:51:07 UTC ‎- новомодная имитация мышления
Зверёчек, а как поставить ту версию, по которой документация в вики (или это пока какой-то внутренний документ)? gem install reality ставит версию 0.0.2, в которой нет Reality.entity. gem specific_install -l https://github.com/molybdenum-99/reality.git ставит версию, которая тоже помечена 0.0.2, в ней есть entity, но Reality.entity('Eiffel Tower') имеет properties == nil и description == nil (height, coord и country при этом работают). ‎- крадецът на ябълки
@mindszenty эээ gem install ставит версию соответствующую, я так мыслю, ридме (то есть там будет Reality.country('Ukraine') работать, напр., но так себе.). В штуке из мастера должно бы работать так (вики тож врёт): et = Reality.entity('Eiffel Tower'); et.values; et.height, например ‎- новомодная имитация мышления
Да, specific_install как раз из мастера ставит. Но некоторые твои примеры (.select(&:alive?), sunrise, Reality.entity('Yukihiro Matzumoto')) у меня не работают - это я делаю что-то не так или это ещё не выложено? ‎- крадецът на ябълки
Примеры немного условные. alive? ещё не выложил, про матца в примере опечатка, он должен быть Matsumoto, но я вот сейчас попробовал — в одном из последних коммитов я кажется чот сломал, починю. ‎- новомодная имитация мышления
Fixed both, though, check it now ‎- новомодная имитация мышления
Спасибо! Я сейчас уже стремительно засыпаю, продолжу изучение завтра. ‎- крадецът на ябълки
↑↑ Количество изменений в этом коммите, в идеале, должно говорить о том, какой крутой и чистый у меня код. Ну, или нет: https://github.com/molybdenum-99/reality/commit/b5410502474a8.... Зато это юбилейный, сотый, коммит! ‎- новомодная имитация мышления
А где мой код пройдёт — не растёт трава! http://i.imgur.com/1lODPVv.png ‎- новомодная имитация мышления
^ why the question marks? ‎- 9000
@9000: незагруженные ещё entities, просто указатели/ссылки. после загрузки у неё например может оказаться чуть другое название, или вообще окажется что не существует такой entity, это мёртвая ссылка. ‎- новомодная имитация мышления
а что получится, если спросить про Reality.entity("Bush")? вообще интересно, как literal превращается в entity, если можно в двух словах. ‎- marat
@marat на данный момент — тупо чз википедию. то есть как в википедии Bush резолвится в disambig page — так и в reality резолвится в энтити без свойств в нынешней версии (и в специальный тип DisambigList в будущей, от которого можно будет одним вызовом можно узнать «а какие варианты» и перейти к нужному варианту). я завтра выложу более информативный ридми, который все эти вопросы будет проговаривать. ‎- новомодная имитация мышления
/* задумался, как это всё могло бы выглядеть в статически типизированном языке. забавно! */ ‎- 9000
Так. Я полностью с нуля переписал РЕАДМЕ! Пожалуйста-пожалуйста, если вдруг у кого-то хватит сил и желания — почитайте его и скажите мне что-нибудь. Понятно ли, что за штука описывается? Понятно ли какие у неё бенефиты и проблемы?.. Прикольно ли и весело ли?.. https://github.com/molybdenum-99/reality (там два раздела под конец у меня уже рука колоть устала, завтра добью). Спасибо! ‎- новомодная имитация мышления
↑ бамп в прайм-тайм! need halp! ‎- новомодная имитация мышления
ну фсё. гем зарелизен, отчёт отправлен, трогательный блог-пост (http://zverok.github.io/blog/2016-03-02-reality.html) выложен. ‎- новомодная имитация мышления
теперь ожидаем что скажут суровые ниппонские грантодатели (что, в принципе, не очень важно, потому што я это делал по зову сердца, а не за грантовые деньги, которых пока не видел) ‎- новомодная имитация мышления