Fork me on GitHub
#clojure-russia
<
2017-03-17
>
artemyarulin09:03:25

чота поигрался в репле с clojure1.9-альфа15 которая вышла 3 дня назад. Я надеялся что вся стандартная либа будет покрыта спекой, но чота в clojure.core нету вообще ничо со спекой. Пeчалька 😢

lens09:03:57

Привет, подскажите пожалуйста, получил response от API, получил мапу с помощью clojure.data.xml. Есть ли короткий способ достать от корня где-то там глубоко вложенный элемент, вместо того чтобы городить огород вроде такого

(-> somexml
    :content
    :tag :sometag
    :content
    : tag 
...

lens10:03:54

<rss>
       <tag>
          <item>
             <link>
нужны все линки

artemyarulin10:03:33

зипперы самое то, получиться (xml-> node :rss :tag :item :link)

artemyarulin10:03:17

http://clojure.github.io/data.zip/ документация тока говно, не могу найти примера нормального

lens10:03:18

вот я зипы видел, но тоже не нащел толкового объяснения, хочется еще понять кроме простого примера.

lens10:03:45

особенно мне нравится дескрипшн для xml->

artemyarulin10:03:56

сча накидаю, там просто на самом деле

artemyarulin10:03:08

ну или вот этот всеобъемлющий туториал возьми http://blog.korny.info/2014/03/08/xml-for-fun-and-profit.html

lens10:03:28

пробовал еще xml-sax использовать, но так и не въехал почему она кидает Exception если прошу вернуть мне в виде :json ли :clj-map. Мол missing ; видимо когда встречает такие штуки &utm в строках...

lens10:03:57

во, в блоге прям мой случай

(use 'clojure.data.xml)
(parse-str xml) ; as above

artemyarulin10:03:03

неа, лень накидывать, но там просто, реально. Добавляешь [org.clojure/data.zip “0.1.2”], затем из своего XML объекта делаешь зиппер через (def node (clojure.zip/xml-zip (parse-str xml))) ну а дальше уже делаешь запросы какие надо по типу (clojure.zip/xml-> node :rss :tag :item :link)

lens10:03:33

Cпасибо! Там доходчиво про zip и xml-> Помогло 😃

artemyarulin10:03:19

полный пример получится вот так (clojure.data.zip.xml/xml-> (clojure.zip/xml-zip (parse-str xml)) :rss :tag :item :link clojure.data.zip.xml/text)

artemyarulin10:03:28

я все явно указал ибо очень часто по началу ошибки с неймспейсами. parse-xml как я помню реализован в 2 неймспесах, по началу можно час потерять пока раздуплишь чо да как

lens10:03:20

да вроде нет проблем с неймспейсами, я их как :as написал, и использую типа xml/parse-str и zip/xml-zip

artemyarulin10:03:49

или xml-zip вроде. Ну если не наступишь на грабли дак это тока хорошо 🙂

artemyarulin10:03:41

в общем всячески рекомендую зипперы для работы с XML. XPath после него кажется ужасной поделкой, уже год все парсю тока ими 🙂

lens10:03:34

я уже ощущаю их мощь 🙂

lens10:03:56

но на грабли напоролся ))

lens10:03:14

zip/xml-> no such var ахахах

artemyarulin10:03:38

второй уровень зипперов это когда надо создавать/менять XML, тут я вообще хз с чем сравнивать, мега круто. Ну и опять же они могут работать с любой древовидной структурой, у меня парсинг больших JSON на нем, иногда просто мапы мапов удобно с ними обрабатывать и прочее

lens10:03:04

блин и правда упоролся с неймспейсами )) конфликты

lens10:03:40

почему-то отказывается работать с xml->

[clojure.data.zip :as datazip]
...
(datazip/xml-> :rss :channel :item :link)

artemyarulin10:03:42

ты забыл зиппер ноду первым аргументом

lens10:03:20

(defn get-links
    " Get/Parse link from XML "
    [response]
    (-> response
        :body
        (xml/parse-str)
        (zip/xml-zip)
        (datazip/xml-> :rss :channel :item :link)))

niquola10:03:46

@misha привет, а твой auth сервер auth2.0 поддерживает?

niquola10:03:57

и ты его уже выложил в открытый доступ

misha11:03:36

@nicola какой-такой аус-сервер? kappa

niquola11:03:30

@misha наверно перепутал тебя с @mike1452

artemyarulin11:03:02

@lens покажь require

misha11:03:40

наверное, я всё что делал - на коленке бадди использовал, год назад

(ns foo.auth
  (:require
    [buddy.hashers :as ha]
    [buddy.sign.jws :as jws]
    [buddy.sign.util :as bu]

artemyarulin11:03:06

@lens а все, надо clojure.data.zip.xml/xml-> а у тебя clojure.data.zip/xml->

lens11:03:18

ага уже нашел, спасибо еще раз, выручил!

a.espolov11:03:44

Парни, так и должно быть с re-frame'мом 2мб весит скомпиленый js в advanced режиме?

seryh12:03:59

у меня 751kb весит

a.espolov12:03:20

все равно много

a.espolov12:03:28

хотя смотря че за апп

mike_ananev12:03:39

@nicola давай в личку

fevral1312:03:48

Народ, есть вакансия Re-frame разработчика (удаленка, full-time). Проект типа shoppify, clickfunnels. Бекенд Django, фронтенд Reagent/Re-frame. Обязательно: - уровень скилла Reagent/Re-frame — миддл и выше (джун уже есть); - наличие более одного проекта по специальности - pet, commercial — не важно, главное, чтобы можно было потрогать; - письменный английский. Опционально: - знание или опыт с Python/Django; - разговорный английский. Заказчик импотрный (Америка), оплата через Upwork. Начинаем сразу же, длительность от 2 мес. Подробности в личке.

misha12:03:13

@seryh 715 - это только рефрейм? или и проект тоже?

seryh12:03:51

Весь проект на рефлекс

seryh12:03:00

Рефрейм*

seryh13:03:16

Там у меня re-com для ui, он довольно легкий

dottedmag18:03:09

@fevral13 Закинь в #remote-jobs

fevral1318:03:26

@dottedmag спасибо, закину. написал сюда, чтобы охватить только русскоговорящих девов

dragoncube23:03:49

@niwinz а bide решает как-то проблему с двойным navigate событием? (https://github.com/google/closure-library/issues/681)