Fork me on GitHub
#clojure-russia
<
2016-03-12
>
az09:03:31

Кто на стачку?

az09:03:47

@nicola: доклад будет?

niquola10:03:18

Звали - наверно будет

delaguardo11:03:53

а работал кто-нибудь с JAXB в clojure?

delaguardo11:03:10

пытаюсь создать маршалер для класса но никак не могу понять что нужно передать в JAXBContext.newInstance() статичный метод

delaguardo11:03:54

(class SomeJAXBAnnotatedClass) возвращает java.lang.Class

mike_ananev11:03:53

@delaguardo: а что за кейс? на первый взгляд JAXB излишен в clojure мире.

andfadeev11:03:51

getName на Class как вариант

delaguardo11:03:47

SOAP сервис настолько огромный что реализация всех методов через простую генерацию xml растянется на пару месяцев

delaguardo11:03:17

@andfadeev: getName помог) спасибо

prepor13:03:53

> выращивать картофель закрывшись от марсианской атмосферы полиэтиленом, учиться надо)) и в чем проблема?

andmed14:03:38

The atmospheric pressure on the Martian surface averages 600 pascals (0.087 psi; 6.0 mbar), about 0.6% of Earth's mean sea level pressure of 101.3 kilopascals (14.69 psi; 1,013 mbar). https://en.wikipedia.org/wiki/Atmosphere_of_Mars

andmed14:03:39

@prepor там по сюжету марсианские бури -- частое явление. герой в частности остается на планете из-за того, что сбит булыжником. плюс, переходную камеру срывает тоже из-за нее. а наш герой закрывает дырку от переходной камеры метра 3 в диаметре полиэтиленом, и живет еще спокойно несколько месяцев. им надо было сразу полиэтиленовый периметр делать

andmed14:03:05

а что такое стачка -- это Питерское?

larhat14:03:36

ульяновское!

larhat14:03:46

фильм, бтв, по книге

prepor14:03:05

@andmed: 1. марсианские бури это действительно фантастика, но 2. вы как-то невнимательно смотрели / читали. сбивает его не булыжником, переходную камеру срывает не из-за бури, а из-за разгерметизации. периметр там и так фактически сделан из полиэтилена (и скорее всего примерно такие не жесткие конструкции и будут использоваться). в фильме / книге действительно довольно много ляпов / условностей, но их концентрация на количество подробностей / фактов невероятно низкая. фильм / книга сделаны с потрясающей любовью к науке и инженерии, сложно представить сколько детей выберут инженерное и научное будущее благодаря нему, а скольким взрослым он слегка вправил мозги. так что нефиг наезжать на него в этом благородном чатике! simple_smile

andmed14:03:06

Публично приношу свои извинения отличной книге и не менее прекрасному фильму.

andmed14:03:11

правда, что за стачка?

prepor14:03:08

ульяновск уже не тот

andmed14:03:17

@larhat круто. спасибо

larhat14:03:36

@prepor: да, чот грят чуть подтухла стачка

prepor14:03:38

с таким названием нынче кстати и забаненым можно оказаться

dottedmag15:03:29

@andmed: В книжке было чуть по-другому, а в фильме подкрутили зрелищность.

niquola16:03:27

@prepor может тебя в спикеры для стачки порекомендовать? Готов?

prepor16:03:23

@nicola: никак нет, еще не готов )

niquola16:03:46

Херово ;)

az17:03:05

@prepor: почему не тот?

prepor17:03:25

@az: пачка контор закрылась, энтузиазм пропал, веры в будущее нет, имха как-то так )

prepor18:03:02

Ребята, а кто-нибудь кроме @asolovyov пробовал rum-ом на сервер сайде рендерить? )

mike_ananev18:03:54

Меня часто спрашивают, когда рассказываю про Clojure - "почему в языке нет типов? Мол было бы гораздо проще переходить., если бы были типы." У кого из присутствующих есть мысли почему Рич их не ввел?

mike_ananev18:03:55

clojure.typed это конечно clojure но трэш какой-то

oxgrouby18:03:25

именно в такой постановке вопрос? "нет типов"

mike_ananev18:03:37

почему создатель не ввел типы

mike_ananev18:03:43

всмысле Рич

mike_ananev18:03:50

какое обоснование

oxgrouby18:03:55

но ведь типы есть, нет их статической проверки :-O

oxgrouby18:03:25

А что не так с core.typed?

mike_ananev18:03:59

ну язык уже не торт. уже нет той красоты что ли. ну и компилится долго очень

oxgrouby18:03:31

Ну на самом деле тот, кто будет говорить что кложур плох по этой причине -- будет прав)

mike_ananev18:03:34

Сегодня случайно я нашел очень сжатое и емкое обоснование. Делюсь: latent typing: In computer programming, latent typing refers to a type system where types are associated with values and not variables

mike_ananev18:03:16

иными словами как можно 42 дополнительно приклеить тип, когда само 42 говорит за себя какого оно типа

oxgrouby18:03:58

а кто-то приклеивает к 42 свой тип? :-O

oxgrouby18:03:02

не понял я

mike_ananev19:03:20

Просто в Clojure есть только значения (values) и есть функции. У значений типы приклеены, что называется "на лбу" и дополнительная типизация не нужна

mike_ananev19:03:00

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

mike_ananev19:03:24

в принципе вещи наверно говорю очевидные, но вот это определение довольно емкое и точное. взял с вики.

larhat19:03:41

> а в языках где есть переменные, нужно помечать то место в памяти, куда будут записаны значения, какого типа будет хранить эта переменная. oO

larhat19:03:52

let x = 2 in let y = 4 in x * y

larhat19:03:58

переменных нету

larhat19:03:00

типы есть

oxgrouby19:03:02

Кажется в обсуждении не хватает определения типа

larhat19:03:05

(окамл)

fxposter19:03:19

простите, но любые динамические языки хранят “типы при значениях"

fxposter19:03:34

где тут “обоснование” и вообще что здесь полезного я не вижу simple_smile

fxposter19:03:52

системы типов нужны чтобы сразу запрещать определенное поведение, т.е. описывать ограничения, переменные каких типов где могут появляться. если ты не будешь этого делать - у тебя просто будет динамическая типизация. и никаких “обоснований” для отсутствия статических типов это не дает.

larhat19:03:14

«Система типов  это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов по- ведения при помощи классификации выражений языка по разно- видностям вычисляемых ими значений».

larhat19:03:18

(тапл)

fxposter19:03:20

что такое тапл?

fxposter19:03:37

очень похоже на определение из Types in Programming Languages

fxposter19:03:43

но тогда тИпл simple_smile

fxposter19:03:11

там “and"

larhat19:03:21

ага, Types and Programming Languages

fxposter19:03:52

я почему-то запомнил там “in” simple_smile

larhat19:03:18

https://en.wikipedia.org/wiki/Talk:Latent_typing — булшитная статья какая-то

larhat19:03:44

"latent typing refers to a type system where types are associated with values and not variables" — типа про такое пишут только Allen B. Tucker (28 June 2004). Computer Science Handbook

fxposter19:03:44

ну не суть. смотря на скалу - я все больше не понимаю смысла в этих типах simple_smile

oxgrouby19:03:02

Так что такое тип то?

larhat19:03:11

"""Иногда слово «статический» добавляется явным образом  например, говорят о «языках программирования со статической типизацией», что- бы отличить тот анализ, который производится при компиляции и кото- рый мы рассматриваем здесь, от динамической (dynamic) или латент- ной (latent) типизации в языках вроде Scheme """

oxgrouby19:03:14

у чего искать смысл?

larhat19:03:17

вот так в переводе у пирса

mike_ananev19:03:21

@fxposter: а что именно не понимаешь в скале?

fxposter19:03:43

например

larhat19:03:43

@oxgrouby: меточка просто, элемент системы типов. про систему типов было выше определения

fxposter19:03:54

я как это вижу у меня взрываются мозги

mike_ananev19:03:02

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

larhat19:03:39

два вроде диалекта %) со scalaz и "как на яве"

fxposter19:03:39

у нее один диалект simple_smile и достаточно мощная система типов, как для популярного языка

fxposter19:03:01

а причем тут диалекты?)

mike_ananev19:03:06

тогда не знаю, про какие они диалекты говорят. наверно сахар имеют ввиду

fxposter19:03:09

ps: есть еще cats и shapeless

fxposter19:03:17

которые вызрывают мозги не меньше

mike_ananev19:03:06

открыл ссылку. код совершенно не читабелен

fxposter19:03:16

но не суть - суть в том, что чем точнее и “красивее” нужно выразить программу в типах - тем сложнее нужна система типов и тем сложнее в итоге становится понимать эту всю хрень

fxposter19:03:18

лично мне

fxposter19:03:35

уровень моего понимания остановился на C++ шаблонах

larhat19:03:42

"открыл ссылку. код совершенно не читабелен" ну вы наверное и голландский не прочитаете не выучив сперва?

larhat19:03:57

кто-то и кложу не может

mike_ananev19:03:23

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

fxposter19:03:48

по-моему наоборот

fxposter19:03:54

но спорить не хочу simple_smile

oxgrouby19:03:26

чуваки, вот я смотрю на диалог и мне кажется проблема его наличия зависит тупо от рассинхронизированной терминологии

fxposter19:03:40

лично меня устраивает система типов а-ля java

mike_ananev19:03:48

да нет, мы не спорим, наоборот мне интересно. потому что часто про эти типы речь заходит

oxgrouby19:03:52

> типизированных языков все языки типизированны, вопрос проверяются ли типы

oxgrouby19:03:56

и когда

niquola19:03:56

Либо тайпчекер, либо динамика

fxposter19:03:10

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

niquola19:03:20

Пока среднего не дано - gradual typing

fxposter19:03:30

не совсем

larhat19:03:43

оно же тоже в рантайме, не?

fxposter19:03:45

есть dart, например

fxposter19:03:00

это не gradual с разделением по модулям

fxposter19:03:16

это скорее optional - что можем прочекать - то будем чекать

fxposter19:03:28

что не можем - оставляем в динамике

niquola19:03:31

Иногда хаскелистов и скалистов жалко ;)

oxgrouby19:03:42

мне чаще им завидно

petr.myain19:03:46

Нубский вопрос по синтаксису: если внутри функции вычисляется несколько форм, как сделать ранний возврат значения из середины и не вычислять последующие формы?

niquola19:03:02

Это две философии, фп vs ооп

fxposter19:03:04

@petr.myain: по-моему в кложуре никак

niquola19:03:30

@oxgrouby ты пробовал?

oxgrouby19:03:49

@nicola: баловался

mike_ananev19:03:55

@petr.myain: if функция не подходит?

fxposter19:03:58

послушайте simple_smile

fxposter19:03:14

ну и вообще - почитайте Гилада за последние 5-7 лет

niquola19:03:51

Где-то читал хорошую статью, где эти два мира хорошо расписали - либо типы часть семантики языка, либо нет

fxposter19:03:12

а как же core.typed? typescript? typed racket?

mike_ananev19:03:12

во! Николай я как раз такую ищу

niquola19:03:26

Гилад троль ( вторую Джава хочет написать)

mike_ananev19:03:27

потому что сам хочу разобраться

mike_ananev19:03:59

@nicola: можешь вспомнить ссылку на статью?

petr.myain19:03:15

Если if, то получится лесенка вложенных if else

fxposter19:03:24

Гилад интересный чувак, тролль или нет - это неважно. Важно то, что он озвучивает уже давно идеи, которые сейчас начинают реализовываться в популярных языках

petr.myain19:03:33

Императивный пример без лесенки: function f () { If (condition1) { return result1 } If (condition3) { return result2 } If (condition3) { return result3 } return result4 }

oxgrouby19:03:40

@petr.myain: а может cond?

petr.myain19:03:46

Как на Clojure написать?

fxposter19:03:01

в общем случае никак

fxposter19:03:06

нет здесь early return

fxposter19:03:29

есть всякие cond, condp

fxposter19:03:39

но early return здесь нет

fxposter19:03:50

это слишком “императивненько"

petr.myain19:03:57

Cond- посмотрю, спасибо

prepor19:03:52

petr.myain: а еще можно все завернуть в монадический интерфейс!

fxposter19:03:35

по сравнению с препором Гилад совсем не тролль!

prepor19:03:38

petr.myain: или эксепшенами бросаться!

oxgrouby19:03:10

@mike1452: > либо типы часть семантики языка, либо нет вангую что суть статьи: ты можешь ортогонально основному ast программы нарисовать свой аст из типов, и проверить что там нет косячков. А если убрать ортогональность -- то можешь юзать типы как деталь логики в первом дереве

niquola19:03:08

Суть статьи, что это ортогональные подходы

niquola19:03:22

у каждого свои плюсы и минусы

niquola19:03:30

в haskell типы уже не просто проверка на ошибки - это выразительная часть языка

niquola19:03:59

type driven development simple_smile

niquola19:03:33

ты конструируешь типы - потом они тебя тащат в правильном или в не правильном направлении

niquola19:03:48

Когда с Кметом разговаривали - он сказал - типа если типы правильные сделал - то программа сама пишется - в определенные type дырочки, как в пазл уже только один тип подходит

niquola19:03:05

Соответсвенно если не правильно продумал - тебе жопа

larhat19:03:08

Как ты смог с кметом говорить?!?!

niquola19:03:20

уведут почище сусанина

niquola19:03:27

На fp conf simple_smile

larhat19:03:38

Ленза комонада хиломорфизм

larhat19:03:56

Ну в смысле, он же мудреный какой-то %)

niquola19:03:29

Ну я пытался на поверхности удержатся - не захлебнутся

niquola19:03:43

У него 3 образования - таким и нужен Haskell

mike_ananev19:03:30

недавно мне один разраб показывал haskell

mike_ananev19:03:44

сказал что толковой IDE для него на текущей момент нет.

mike_ananev19:03:47

это так?

oxgrouby19:03:56

haskell-mode

niquola19:03:03

А когда суперпрограммист Ваня из Эхо- через 5 лет использования Haskell - говорит, что он junior

oxgrouby19:03:19

хотя, откуда мне знать что такое толковое IDE, когда у меня вместо него имакс

niquola19:03:41

в spacemacs отличный haskell слой

mike_ananev19:03:34

"говорит, что он junior" имеется ввиду haskell настолько глубок в своих идеях?

petr.myain19:03:00

Cond - что надо! Exception выбрасывать - тоже вариант, не подумал. Я в этих if условиях как раз хочу проверять ошибки в полученных аргументах функции, как в этом случае более идиоматично сделать, бросать эксепшены?

oxgrouby19:03:32

во первыъ google clojure :pre :post

mike_ananev19:03:40

@petr.myain: посмотри еще case

petr.myain19:03:40

Например, если пользователь ввёл не валидный email

niquola19:03:04

haskell медленно в математику перетекает

oxgrouby19:03:27

> более идиоматично сделать, бросать эксепшены? не суть, главное чтобы везде было одинаково

petr.myain19:03:35

Case сразу посмотрел вместе с cond и condp - это всё мне подходит (cond лучше всего)

niquola19:03:57

по выражению Пейтон Джонса - единственный академический язык который еще можно использовать simple_smile

mike_ananev19:03:48

@nicola: Соответсвенно если не правильно продумал - тебе жопа - имеется ввиду начинай конструировать типы сначала?

niquola19:03:22

ты это можешь через пол-года понять simple_smile

mike_ananev19:03:46

уау - а как заказчики то обрадуются!!!!

niquola19:03:02

вобщем я вижу сходство с ООП (они с одной грядки) - top down design

mike_ananev19:03:23

этого им не объяснить. особенно если сказать что-то про функторы и монады и прочие неизвестные мне вещи )))

niquola19:03:52

да монады это еще самое простое simple_smile

oxgrouby19:03:52

> как заказчики то обрадуются! а куда им деваться -- есть ряд задач которые в любом случае на хаскеллях решатся быстрее или хотя бы просто решатся

mike_ananev19:03:27

это бизнес задачи? или из чистого калькулюса?

niquola19:03:39

А ту статью так и не нашел

niquola19:03:01

Ну на haskell можно и нужно криптовалюту писать

oxgrouby19:03:25

mike1452: в общем случае это задачи в которых контекст такой, что в голову не влезает, поэтому элементарно допустить глупые ошибки

niquola19:03:38

Для безпилотников софт еtc

niquola19:03:24

Писать enterprise на haskell - как общитывать падение яблока уравнением Шредингера simple_smile

mike_ananev19:03:43

да пока про haskell в ынтырпрайзе я не слышал

mike_ananev19:03:11

щас все с этими блокчейнами носятся. пилоты делают. может там хаскель всплывет

thickprogrammer19:03:12

@nicola та же статья с переводом https://habrahabr.ru/post/183150/

artemyarulin19:03:53

да ну бросьте - дофега хаскеля в проде. Ну т.е. это не жава, но ниша у него своя есть. Всякие трейдеры юзают

artemyarulin19:03:30

вот буквально с месяц назад в твитторе увидел, хоть я и далек от хаскеля: https://twitter.com/donsbot/status/702777050030055424

You will use Haskell for almost all tasks: data analysis, market data publishing, database access, web services, desktop GUIs, large parallel tasks, quantitative models, solvers, everything. 

artemyarulin19:03:53

десктоп ГУИ, а, как вам?:)

niquola19:03:51

Я слушал подкаст чувака из facebook - они внедрили и используют несколько лет (спам еще что-то там) - но он был не уверен, что это точно, то что нужно.

mike_ananev19:03:08

Аппликативный функтор наблюдает за тем, как обычный применяет функцию

artemyarulin19:03:19

а ну и конечно https://github.com/Frege/frege, чтоб можно прям завтра в прод тащить вместе с кложурой)

artemyarulin19:03:16

@nicola: Они ж хаскель взяли изначально по какой-то причине?

niquola19:03:38

не думаю - просто евангелист нашелся simple_smile

artemyarulin19:03:57

в хаскеле вроде крутая либа для парсинга есть?

niquola19:03:04

monadic parser combinator simple_smile

mike_ananev20:03:09

понравился коммент к статье про Хаскель на Хабре: Изучи Хаскель во имя добра

artemyarulin20:03:08

Это название классной книжки про хаскель http://learnyouahaskell.com

mike_ananev20:03:59

точняк!

artemyarulin20:03:20

мож она для меня была недостающей каплей - но как книжка по ФП прям ах, много понял “много думал” (с)

niquola20:03:01

Вобщем статью не нашел, но она где-то здесь - http://lambda-the-ultimate.org/

niquola20:03:38

The speaker used data from Github to determine that approximately 2.7% of Python bugs are type errors. Python’sTypeError, AttributeError, and NameError were classified as type errors. The speaker rounded 2.7% down to 2% and claimed that 2% of errors were type related. The speaker mentioned that on a commercial codebase he worked with, 1% of errors were type related, but that could be rounded down from anything less than 2%. The speaker mentioned looking at the equivalent errors in Ruby, Clojure, and other dynamic languages, but didn’t present any data on those other languages.

niquola20:03:05

Стоит ли отказываться от repl ради 1-2%?

artemyarulin20:03:36

ну там чутка лукавство - он искал именно TypeError и прочие, есть же куча производных ошибок которые типы бы поймали, но сообщение было б совсем другим. Возьмите Optional|Maybe тип - по сути убирает NullReferenceException вовсе, которая на скок я помню в некоторых языках самая популярная ошибка.

artemyarulin20:03:18

По мне дак при наличии юнит тестов программа со строгой типизацией или нет имеет тоже самое количество ошибок. Можно еще учесть что без типизации test coverage может быть даже больше - ибо не надо мучиться с типами/интерфейсами/моками. Ну и да - репл это такая мощная штука что я не могу себе представить отказ от нее, слишком тяжелый наркотик 😞

niquola20:03:49

С нулами мне кажется обычно логические ошибки, их maybe не починешь

niquola20:03:52

Тут еще куча релевантных тредов - http://c2.com/cgi/wiki?DynamicTyping

artemyarulin20:03:51

хм, мне казалось Maybe как раз полностью решает проблему null? Там же компилятор тупо не даст выстрелить себе в ногу

mike_ananev20:03:26

по итогам нашей переписки, что я для себя вынес: static typing и dynamic typing два ортогональных мира. видимо в каждом подходе заложены свои механизмы разработки качественного ПО.

artemyarulin20:03:23

а мне как раз кажется что пересечений очень много и это по сути как разные стили, чем разные миры прям

artemyarulin20:03:59

Еще кста с dynamic type все решено и ничего выдумывать не надо - пиши да тестики добавляй. С системой типов же холивар за холиваром. Вон го как все обсирают - генериков нет. Хаскель хвалят - классная система типов, а жаве грят генерики буэ. В скале все сложно и прочее-прочее

niquola20:03:47

maybe помогает ifы не ставить, и реализуема почти везде - @artemyarulin ты вспомни когда ты последний раз null отхватил?

artemyarulin20:03:31

дак то кложура - у нас все продумано

niquola20:03:56

Обычно думаешь - эта херь обязательно есть, вяжешь на нее логику, а ее раз и нету - в haskell - нужно будет other брать и ошибку тащить с собой - считай try/catch

niquola21:03:02

Точнее монаду Either

mike_ananev21:03:34

кложура самая клевая.

larhat22:03:03

Сбертеховцы, хаскель в барклайс используют и ещё в нек-ых банках. Окамл — в блумберге и джейнстрит (арбитраж). Наверное заказчики не такие, гг