Fork me on GitHub
#clojure-russia
<
2016-08-01
>
lowl4tency07:08:28

чот я застряд

lowl4tency07:08:54

вот есть у меня вектор в нем IP адреса, как мне получить другой вектор где будет ["https://$IP:PORT/blabla"]

seryh07:08:28

вроде норм

lowl4tency08:08:57

спасибки

lowl4tency08:08:12

Роботает

maxim08:08:40

Парни, а разве слэш должен быть экранирован? Ruby

"a/".to_json 
"\"a/\""
Clojure
(json/write-str "a/")
"\"a\\/\""

maxim08:08:12

Баг или мне кажется?

niwinz08:08:43

print the result of (json/write-str "a/")

niwinz08:08:47

using println or something similar

niwinz08:08:08

"\"a\\/\"" is just a repl representation of that I think...

kxepal08:08:20

http://json.org/

char
    any-Unicode-character-
        except-"-or-\-or-
        control-character
    \"
    \\
    \/
    \b
    \f
    \n
    \r
    \t
    \u four-hex-digits 

kxepal08:08:48

По спеке - должен, по факту - можно и нет.

kxepal08:08:38

у современных json либ своеобраное понимание стандарта в плане слешей, utf-8 и прочих мелочей.

maxim08:08:47

@niwinz: you are probably right, that's the output "a\/"

maxim08:08:47

у меня есть ruby код, который аплоадит файлы на s3, он работает переписал его на clojure, амазон говорит, что signature неправильная

maxim08:08:58

уже все проверил, а signature разные на выходе получаются

maxim08:08:56

@niwinz:

(defn sha1-hmac [key data]
  (mac/hash data {:key key :alg :hmac :digest :sha1}))
аналог
def s3_signature
  Base64.encode64(
     OpenSSL::HMAC.digest(
     OpenSSL::Digest.new('sha1'), ENV['S3_SECRET'], s3_policy)).gsub("\n", "")
end

maxim08:08:08

Правильно же?

niwinz08:08:03

the clj version misses the base64?

niwinz08:08:52

and the clj version (I'm supposing that you are using buddy-core) does not generates the \n line endings so that should be skiped

maxim08:08:15

(defn signature []
  (-> (g/sha1-hmac (:s3-secret env) (policy))
       g/base64))

niwinz08:08:16

OpenSSL::HMAC.digest What output has, bytes or just hex encoded?

niwinz08:08:21

this can be the difference

niwinz09:08:33

can you paste the full clj code that is analogous to the ruby one?

niwinz09:08:34

at quick view they seems correct :S something not very evident is happening

maxim09:08:15

thank you for your help

niwinz09:08:44

Hmm I think that I found the "mistake" (maybe)

niwinz09:08:02

I'm wrong xD

maxim09:08:45

Well, I think I found it: if I remove "/" from my path in both ruby and clojure versions then signatures are the same. If I add it back then they are different 😞

niwinz09:08:32

try to use cheshire

niwinz09:08:38

in order to encode json

niwinz09:08:09

maybe is a bug in the data.json

maxim09:08:09

I was thinking about that

maxim09:08:13

заюзал chesire

artemyarulin12:08:01

кстати народ, вот в мире хаскеля принято pointfree style писать, в кложуре кто-нить так делает?

(defn parse-args [args] (zipmap [:type :name :task :src :out] args))
;; vs
(def parse-args (partial zipmap [:type :name :task :src :out]))

niwinz12:08:50

In reallity the both approaches that you are montioning they are the same

artemyarulin12:08:45

ага дада, я знаю что оно одно, т.е. тут больше к стилю относится

niwinz12:08:23

we are using that a lot in httpurr

niwinz12:08:27

as example 😄

artemyarulin12:08:03

а ну значит ок, пример как раз мне был нужен) А то просто иногда проще partial написать чем тратить 5 секунд чтоб название параметра придумывать 🙂

lowl4tency12:08:09

а slurp может мне показать http response code?

lowl4tency12:08:13

404 там или 200

lowl4tency12:08:00

зафигачил через try catch

ilshad14:08:41

@artemyarulin: я участвовал в проекте, в котором значительная часть кода была в point-free стиле. Целью было упрощение кода (проект оч большой и запутанный). В итоге тысячи строк кода в таком аппликативном стиле. Это потребовало написания целой библиотеки, которая позволила выражать большую часть идей композициями комбинаторов. Один из минусов - сильное увеличение “ежедневного словаря” функций. В итоге, лично я не считаю что это какая-то сильно удачная стратегия для упрощения кода и предпочитаю другие, и такой подход использую в ограниченных объемах. Когда это одна функция, можно считать, что это то же самое и просто другой стиль. Когда их две и более и они сочетаются, это уже в корне другой подход.

savelichalex14:08:07

так это разве не суть карринга?

artemyarulin15:08:40

@ilshad: О вау, а либа случаем не опер сорс? Или может сам проект можно посмотреть?

ilshad15:08:42

@artemyarulin: нет, к сожалению. Чтобы заопенсорсить, нужно там порядок наводить, а так она заинлайнна в проекте.

misha16:08:28

@artemyarulin: процентик жеж еще! 🙂

(def parse-args #(zipmap [:type :name :task :src :out] %))

shinych20:08:35

всем привет, а datomic к db2 умеет ходить?