Skip to content

Разбираем ООП (2016 09 13 14)

thadjbullet edited this page Sep 13, 2016 · 1 revision

#random 5262 membersView member list (69/5262 online) | рандому посвящается - https://www.youtube.com/watch?v=uOtXq1uGbBc

Only paid teams can start calls from channels. Channel SettingsShow Channel Details Show Mentions & ReactionsShow Starred ItemsMore Items rand0m and sanykey are typing bold italics strike code preformatted >quote

CHANNELS (28) frontend general hexlet-volunteers job random

DIRECT MESSAGES (5527) slackbot thadjbullet (you) Quick Switcher⌘K And more...

----- Yesterday September 13th, 2016 ----- kirill.mokevnin [20:26]
ближе но нет

alex_r [20:27]
раньше всё обспагеттивовлось с goto

pny [20:27]
ну дык это с goto связано было не?

kirill.mokevnin [20:27]
да

[20:27]
это исключительно про готу

[20:27]
я писал спаггети код только на бейсике на уроках информатики

alex_r [20:28]
ну да, потом goto из большинства языков повыпиливали или его просто не было :slightly_smiling_face:

kirill.mokevnin [20:28]
в пхп ввели несколько лет назад

fatwebdev [20:28]
говорят он порой хорош, но я так и не уловил грани

kirill.mokevnin [20:28]
:D

alex_r [20:28]
0_о

[20:28]
а чем мотивировали?)

[20:29]
больше гибкости больше говнокода ? (edited)

cannabiscat [20:29]
как гото связать с сообщениями?

[20:29]
и ооп

kirill.mokevnin [20:29]
что продвигал дейкстра в противовес гоуту?

pny [20:30]
циклы?

v.kolesnikov [20:30]
Процедуры

cannabiscat [20:30]
структурное программирование

kirill.mokevnin [20:30]
посмотрите книги того времени

[20:31]
которые его продвигали

[20:31]
чем отличается процедурное от структурного?

alex_r [20:32]
http://hosting.vspu.ac.ru/~chul/dijkstra/goto/goto.htm

[20:32]
в процедурном код выполняется не сверху вниз

[20:33]
точнее не строго сверху вниз)

cannabiscat [20:33]
процедурное разве не разновидность структурного? (edited)

alex_r [20:33]
нет

[20:33]
емнип

cannabiscat [20:33]
структурное - разделённое на подблоки

alex_r [20:33]
вот смотри - сначала была каша с гото и код выполнялся скачками туда-сюда по коду

[20:34]
потом структурное - без гото, сверху вниз

[20:34]
потом процедурное - части кода выделяются в процедуры/функции и используются где надо

cannabiscat [20:35]
или я не догоняю, или я слаб в определениях, но структурное не обязательно сверху вниз, пмсм (edited)

alex_r [20:36]
хм, ок, как ты себе представляешь не сверху вниз, без процедур? :slightly_smiling_face:

[20:37]
ну ладно, в цикле можно покрутиться, а еще?)

[20:37]
goto чтобы внезапно перескочить наверх (или еще куда) у нас нет (точнее есть, но не надо т.к. иначе будет спагетти)) ) (edited)

cannabiscat [20:39]
рекурсия с условиями, чтобы перескочить куда надо, в зависимости от входящих данных перескакиваем на определённый блок внутри

[20:39]
например

alex_r [20:39]
эй, как ты рекурсию без процедур сделаешь?

cannabiscat [20:40]
я ничего против процедур не говорил

alex_r [20:40]
дык в структурном их еще нет :slightly_smiling_face:

[20:40]
процедурное потому и процедурное же

kirill.mokevnin [20:40]
структурное это "без гоуту"

[20:41]
тогда была такая альтернатива

cannabiscat [20:41]
отличие структурного от процедурного - процедурное есть подмножество структурного))

alex_r [20:41]
0_о

kirill.mokevnin [20:42]
тогда и фп подмножество структурного

mikhailtabunov [20:42]
joined #random

alex_r [20:42]
если в широком смысле)

cannabiscat [20:42]
почему бы и нет?

kirill.mokevnin [20:42]
это просто классификация по гоуту признакому

alex_r [20:42]

почему бы и нет? ну просто сейчас больше про историю и решение проблем)

kirill.mokevnin [20:43]
не бывает единой таксономии

[20:43]
структурное/не структурное введено только с одной целью, определять использование гоуту

[20:44]
больше ни к чему его притягивать не надо

cannabiscat [20:44]
ок

kirill.mokevnin [20:44]
окей, что было дальше кто знает?

alex_r [20:45]
модули/пакеты?

kirill.mokevnin [20:45]
я сегодня будц вопросы задавать)

[20:45]
отвечаете вы свси

[20:45]
чертов телефон

cannabiscat [20:45]
после формулирования принципов СП?

alex_r [20:46]
goto фп структурное процедурное модули фп ооп ? (edited)

cannabiscat [20:46]
объекты

pny [20:46]
т.е. ядро линупсов написано не структурно?

kirill.mokevnin [20:47]
фп было до структурного

[20:47]
в каком году первый лисп появился?

alex_r [20:48]
пятидесятые

sashashakun [20:48]
195X

cannabiscat [20:48]
в пятидесятых

[20:48]
56

[20:48]
наверное

alex_r [20:48]
1958

cannabiscat [20:48]
СП в 70-х (edited)

alex_r [20:49]
статья Дейкстры в 1968

kirill.mokevnin [20:51]
ок, другой вопрос, какие языки и в каком порядке создвл вирт

[20:51]
и был соучастником

alex_r [20:51]
паскаль, модула, оберон

pny [20:51]
квиз какой то :smile:

alex_r [20:52]
историческая викторина :smile:

cannabiscat [20:52]
пасквиль

kirill.mokevnin [20:53]
это далеко не весь список

alex_r [20:54]
эйлер 1963 алгол-68 1963-1968 PL/360 1963-1967 процедурный паскаль 1970 модульная модула 1975 модула-2 1979 оберон 1988 ооп/коп оберон-2 1992 (edited)

sanykey [20:59]
не лень же людям запоминать годы

cannabiscat [20:59]
Эйлер - расширение Алгола средствами ЛИСП

[20:59]
это вики))

arslan [21:02]
этот чат простимулировал меня наконец начать читать про парадигмы программирования

cannabiscat [21:04]
с чего у нас здесь всё началось?

[21:04]
сообщения и ООП?

rand0m [21:04]
кто-то задал тупой вопрос

cannabiscat [21:04]
что вызов методов объекта != сообщения

rand0m [21:04]
всегда с этого все начинается

cannabiscat [21:05]
ну, так всегда, тупой вопрос, а потом, даже мудрецы, ломают голову

gr8web [21:05]
https://hexlet-ru.slack.com/archives/random/p1473785997014819 fatwebdev @kirill.mokevnin привет если не сложно проясни, раз ты говоришь что фп + ооп такая сильная связка почему опп завязываю восновном на имеративное в языках? Posted in #randomYesterday at 19:59

arslan [21:06]
У эккеля методы=сообщения

cannabiscat [21:06]
ну, это ж джава

[21:07]
у Кея сообщения - вообще не то, что Эккель думает

[21:08]
но мне пока сложно свести концы с концами, и всё это рассказать самому

alex_r [21:08]
тем не менее то ооп что сейчас повсюду ближке к эккелю, чем к родоначальнику)

cannabiscat [21:08]
это да

kirill.mokevnin [21:09]
я скоро включусь

cannabiscat [21:09]
но что могло бы выйти, если бы Папу все слушали? может что-то лучшее, чем текущее ООП? история не знает сослагательности

[21:10]
о, у грейтвеба всё же есть другие смайлы!!!!!!!

cannabiscat [21:15]
всё, все сидят и читают.. или просто ждут?

kirill.mokevnin [21:16]
найдите плс карту языков и их влияния друг на дрцга

[21:16]
посмотрим

cannabiscat [21:17]
http://www.metodolog.ru/sites/default/files/u5/02644-4.JPG (138KB)

rand0m [21:17]
https://exploringdata.github.io/vis/programming-languages-influence-network/ exploringdata.github.io Programming Languages Influence Network An interactive network graph showing the connections of programming languages based on their influences with language and language paradigm highlighting rendered with sigma.js and preprocessed with Gephi. (33KB)

alex_r [21:19]
прикольный сайт)

gr8web [21:20]
сильно много полосочек на прикольном сайте

alex_r [21:20]
(не совсем, то, просто генеалогическое) ) https://upload.wikimedia.org/wikipedia/commons/2/25/Genealogical_tree_of_programming_languages.svg (edited)

[21:22]

сильно много полосочек на прикольном сайте да, с интерфейсом недоработали

rand0m [21:23]
https://exploringdata.github.io/vis/programmers-search-relations/ exploringdata.github.io Programmers Search Relations Network An interactive network graph showing the relations of programmers based on Google searches as shown in knowledge graph information. (42KB)

kirill.mokevnin [21:23]
такс)

[21:23]
я вроде вернулся

[21:26]
щас начнем от обратного

[21:26]
мы уже про все это тыщу раз говорили, но каждый раз ощущение что в первый раз

[21:27]
давайте сразу договоримся

[21:27]
в этой теме очень много религии

[21:27]
и в вас тоже есть бог

[21:27]
:smile:

alex_r [21:27]
может видео запишите, чтобы кидаться ссылкой сразу? :slightly_smiling_face: пофиг на хейтерство

kirill.mokevnin [21:27]
не, нельзя просто давать это как инфу

cannabiscat [21:28]
договорились

kirill.mokevnin [21:28]
мы тут все находимся в сетах неосознанной некоментентности

[21:28]
как это там называется?

[21:28]
что то типа парадокс какого то крюгера? :smile:

[21:28]
я забываю постоянно

rand0m [21:28]
религия :smile:

cannabiscat [21:29]
Даннинг -Крюгер

[21:29]
https://ru.wikipedia.org/wiki/Эффект_Даннинга_—_Крюгера

kirill.mokevnin [21:30]
елы палы

[21:30]
всегда забываю

[21:30]
короче у нас тут кружок

[21:30]
крюгеров

[21:30]
сначала надо это принять

cannabiscat [21:30]
я знаю, что нифига не знаю

[21:30]
поэтому и любопытно

kirill.mokevnin [21:30]
типа того

[21:31]
теперь, начнем с того, чем ооп не являетяс

[21:31]
щас будет немного капитанства

[21:31]
классы это ооп?

[21:31]
вызов через точку это ооп?

[21:31]
private свойства это ооп?

[21:31]
наследование это ооп?

[21:31]
изменяемое состояние это ооп?

[21:31]
изолированное состояние это ооп?

[21:31]
модульность это ооп?

[21:31]
статическая типизация это ооп?

cannabiscat [21:32]
ооп - современное? меня папа Кей смущает

pny [21:32]
Наследование! Полиморфизм! Инкапсуляция!

alex_r [21:32]

но каждый раз ощущение что в первый раз всё же не в первый раз, раньше я бы хоть на один из этих пунктов ответил "да" :slightly_smiling_face:

kirill.mokevnin [21:32]
аллилуя!

[21:33]
по каждому пункту можно привести тысячу контрпримеров языков и подходов которые дают тот же самый выхлоп (поведение) но эти языки и подходы никто в здравом уме не называет ооп

[21:33]
повторяться не буду, надеюсь вы мне верите и я много раз приводил примеры

[21:35]
теперь несколько важных утверждений, во-первых есть информатика (computer science), где все достаточно строго, есть под этим делом матбаза, которая содержит разные теоремы доказательства и тому подобные вещи

[21:35]
а есть мифология и религия

[21:35]
сейчас мы попробуем разделить эти вещи и формально подойти к вопросу

[21:36]
давайте представим язык в стиле паскаля

[21:36]
точнее даже так, когда мы говорим что появилось структурное программирование, мы все понимаем о чем это против чего это

[21:37]
но далеко не все догадываются, что не было никакого вау и никто не кричал "вот оно, наконец-то, мы все делаем не правильно"

[21:37]
там были батлы похлеще чем сейчас

[21:37]
и куча людей орала "что за говно"

[21:37]
и такое каждый раз происходит

[21:37]
так вот берем паскаль или си

[21:37]
и вот значит все пишут и все хорошо

[21:38]
но дальше появляются проблемы и становится понятно что надо что то менять

[21:38]
вот это ключевая вещь для понимания, почему вещи такие какие есть

[21:38]
давайте теперь накидаем проблем, чтобы понять к чему собственно все двигалось и почему

[21:38]
почему людям на паскале не писалось?

alex_r [21:39]
сложность программ выростала

kirill.mokevnin [21:39]
это стандартный заученный ответ)

[21:39]
она всегда нарастает

[21:39]
дьявол в деталях

alex_r [21:40]
хм, это прям вопрос - почему на Си писалось, а на Паскале не очень)

kirill.mokevnin [21:40]
да и си давай возьмем

[21:40]
вот если бы был си со сборкой мусора скажем

[21:40]
для того чтобы сайты фигачить)

[21:41]
ну норм язык же

[21:41]
почему нужно что то другое?

pny [21:41]
дык есть C#, фигачат же :smile:

rand0m [21:41]
щас и дельфи есть

[21:41]
по сути паскаль)

alex_r [21:41]
это уже ооп

[21:42]
что-то другое - видимо одних только модулей стало недостаточно, для контроля сложности

rand0m [21:42]
ну окна нужны были

kirill.mokevnin [21:42]
"что-то другое - видимо одних только модулей стало недостаточно, для контроля сложности" это ооочень общие слова

rand0m [21:42]
появилось дельфи :smile:

kirill.mokevnin [21:42]
они как раз говорят что в голове туман)

alex_r [21:42]
я паскаль уже плохо помню)

kirill.mokevnin [21:42]
ну си возьми (edited)

[21:43]
представим что у нас есть си, но памятью управлять не надо

gr8web [21:43]
хотели сделать чтобы проще было (edited)

kirill.mokevnin [21:43]
такой язык где есть функции и данные

[21:43]
что там не хватает?

[21:44]
в чем прямо проблема при разработке наступает

[21:44]
хм

alex_r [21:45]
нууу...абстракций маловато, там функции не первого класса)

kirill.mokevnin [21:45]
что то неожиданная тишина)

[21:45]
кхм), ноуп

alex_r [21:45]
судя по всему всем в рандоме сейчас было бы вполне норм кодить на Си со сборщиком :smile:

kirill.mokevnin [21:45]
циклов хватит всем

gr8web [21:45]
пакетов/модулей/библиотек? (edited)

kirill.mokevnin [21:46]
это тыкание на угад

[21:46]
ты проблему опиши сначала

[21:46]
вы же все говорите "рост сложности, управление сложностью"

[21:46]
пока я не увидел чтобы кто-то рассказал во что мы упремся с таким языком

cannabiscat [21:46]
пространства имён нет?

gr8web [21:46]
дублирование кода

kirill.mokevnin [21:46]
да, это одна из первых проблем

[21:46]
пространства имен

[21:46]
в си все глобально

[21:46]
изоляция ноль

alex_r [21:46]
хм, а разве модули не решают?

kirill.mokevnin [21:47]
дело не в том что "модули"

[21:47]
а в том что проблему никто не проговорил

[21:47]
и модули это просто название

[21:47]
а пространство имен это концепция

[21:47]
вы не получите гарантию совместной работы либ это только одна из проблем

[21:47]
в итоге куча префиксов

[21:48]
через это прошел php кстати

[21:48]
раньше всегда было принято именовать либы в стиле DK_Memcache

[21:48]
DK это Дмитрий Котеров)

[21:48]
по имени фамилии

[21:48]
чтобы изолироваться

[21:48]
в общем получается хлам, у вас миллионы функций лежат в одном месте

[21:48]
это сложность и она реальная

[21:48]
и мешает

[21:48]
кто нибудь с этим сталкивался в вашей практике?

[21:48]
или только слышали про это?

pny [21:49]
:smile:

alex_r [21:49]
или сталкивались настолько давно, что про это уже забылось :slightly_smiling_face:

kirill.mokevnin [21:49]
в js это кстати вполне себе еще существует во всю

[21:49]
в браузере

kirillb [21:50]
joined #random

sanykey [21:50]
ну в js как-то не особо ощущается эта проблема.

fatwebdev [21:50]
особо!

kirill.mokevnin [21:51]
потому что всем пришлось приспособиться

fatwebdev [21:51]
если кто то пишет в глобальную область это боль!

kirill.mokevnin [21:51]
и все эти модули реализуют на уровне либ

[21:51]
но всегда можно насрать

sanykey [21:51]
не знаю, просто изначально приучали изолировать код в модули и всё норм пошло сразу (edited)

kirill.mokevnin [21:51]
это у тебя так, но глобально проблема существует

[21:51]
хотя и есть наработанные практики чтобы этого избегать

[21:51]
окей, с этим понятно

[21:51]
давайте дальше

[21:51]
что еще?

cannabiscat [21:51]
прям ipv4

sanykey [21:52]
ну вот эти практики настолько распространены, что эта проблема даже не чувствуется

kirill.mokevnin [21:52]
в твоем окружении

[21:52]
а не у армии битриксоид верстальщиков

alex_r [21:52]
то что вообще можно так сделать - это печалька

cannabiscat [21:52]
:crying_cat_face:

alex_r [21:55]

что еще? проблема с описанием/выражением предметной области?

[21:55]
впрочем это уже куда-то к архитектуре, а не к программированию

kirill.mokevnin [21:55]
язык тут не очень причем да

[21:55]
был такой cobol для бизнеса

[21:55]
как раз язык описания бизнес сценариев

alex_r [21:56]
COmmon Business Oriented Language, круто, не знал откуда его название)

kirill.mokevnin [21:56]
парни ну так что?

[21:56]
мы ведь так до ооп не доберемся

[21:56]
если проблемы не поймем

sanykey [21:57]
что нужно почитать, чтобы быть в теме вот таких бесед? :)

alex_r [21:57]
DDP не оч? :smile:

kirill.mokevnin [21:57]
да ничего, надо просто включить свой опыт и немного смекалки

[21:57]
ты же код пишешь

[21:57]
без чего жизнь не представляешь себе?

gr8web [21:57]
так 0 опыта же

fatwebdev [21:58]
расширяемости )

kirill.mokevnin [21:58]
а чо вы тогда тут друг другу втираете что такое ооп? -)

[21:58]
ок подсказываю

[21:58]
чем плохи глобальные переменные?)

gr8web [21:58]
я молчал в сторонке

sanykey [21:58]
я вообще никогда не понимал тему ООП :)

kirill.mokevnin [21:58]
щас твой шанс

rand0m [21:58]
Засирают программу

gr8web [21:58]
перезаписать легко

kirill.mokevnin [21:58]
втянули вы меня в рандомчаны

[21:58]
придется выложить

cannabiscat [21:58]
ага, все сразу разбежались))

rand0m [21:59]
не уследить

pny [21:59]
нет инкапсуляции

[21:59]
все могут изменять все

cannabiscat [21:59]
инкапсуляции нет

fatwebdev [21:59]
черт знает кто их меняет

cannabiscat [21:59]
должен быть блэкбокс

sanykey [21:59]
они плохи тем, что пересечься из разных модулей могут и могут возникнуть ошибки + это не гибкая хрень (edited)

kirill.mokevnin [21:59]
вот вы так рассказываете что вас в преподы брать нельзя

rand0m [21:59]
память жрут

kirill.mokevnin [22:00]
"нет инкапсуляции" и все, разбежалась аудитория

[22:00]
@sanykey мой герой!

pny [22:00]
нет сокрытия участков программы от других участков программы

kirill.mokevnin [22:00]
во во

[22:00]
пошло

[22:00]
можете же если захотите

[22:00]
что теряется?

rand0m [22:01]
независимость)

kirill.mokevnin [22:01]
модульность теряется

[22:01]
как раз та самая штука

[22:01]
что вам надо программу дербанить на независимые части

alex_r [22:02]
ясно, сегодня на коне JS-еры, как ежедневно преодолевающие то, о чем другие успели забыть :slightly_smiling_face:

sanykey [22:02]
а ну это я имел ввиду, говоря про гибкость

rand0m [22:02]
все все имели ввиду

kirill.mokevnin [22:02]
теперь уже более хитрый вопрос, а какая альтернатива у глобальных переменных?

[22:02]
и собственно в каком случае они вообще нужны и используются

[22:02]
может они тупо не нужны?

[22:03]
и проблемы нет

[22:03]
это чисто проблема си

[22:03]
м?)

sanykey [22:03]
объекты как у js или ассоциативные массивы? Актуально для глобальных конфигов

kirill.mokevnin [22:03]
давайте не использовать локальные термины

[22:03]
чтобы не смущать друг друга

pny [22:03]
они нужны якобы для хранения состояния какого либо

kirill.mokevnin [22:04]
понятие "объект" это js понятие

pny [22:04]
что бы можно было его передавать между частями программы

rand0m [22:04]
для передачи скорее

pny [22:04]
хранения/педерачи ога

rand0m [22:04]
или даже возвращения)

kirill.mokevnin [22:04]
можете какой-нибудь кейс описать типичный

sanykey [22:04]
ну тогда хеш--- как там называется забыл

kirill.mokevnin [22:04]
когда вот они нужны

[22:04]
@sanykey говори просто словарь или мап

[22:05]
но это не имеет отношения к теме)

rand0m [22:05]
в функции обьявил, и надо чтобы снаружи видно было

kirill.mokevnin [22:05]
0_o

fatwebdev [22:05]
начальные накстройки программы

pny [22:05]
эээ, помнится в школе я с помощью глобальной переменной передавал данные между формами :smile:

kirill.mokevnin [22:05]
что это за кейс

[22:05]
чтобы в функции объявил и было снаружи видно

fatwebdev [22:05]
типо где бд лежит как к ней стучать

kirill.mokevnin [22:06]
ну вот вы написали bd = connect();

[22:06]
и дальше передали runApp(bd)

[22:06]
зачем тут глобальное состояние?

cannabiscat [22:06]
в ноде, когда пробовал изучать, сложно было передавать данные от двух асинхронных функций

kirill.mokevnin [22:06]
асинхронность давайте не брать чтобы жизнь себе не усложнять

cannabiscat [22:07]
потом промисы спасли))

kirill.mokevnin [22:07]
там надо еще вводить кучку понятий

fatwebdev [22:07]
ну не обязательно же только главный процесс будет лезть в бд

[22:07]
плагин может какой то тоже полезть

sanykey [22:07]
окружение env удобно юзать вроде

rand0m [22:07]
статика какая-то которая всем нужна)

kirill.mokevnin [22:08]
полезет плагин, ну так ты инициализируй плагин

alex_r [22:08]
любой кейс с передачей инфы между кусками кода ограниченными своими областями видимости

pham_nuwen [22:08]
чтоб этот bd могли использовать другие функции

kirill.mokevnin [22:08]
если он напрямую к данным полезет то вот она потеря модульности

[22:08]
предоставь api этому плагину

[22:08]
вопрос в том, является ли такой способ программирования жизненно необходимым и иначе никак

cannabiscat [22:09]
нет

kirill.mokevnin [22:09]
и вообще возможно ли придумать такой кейс при котором можно только так

[22:09]
через глобальные переменные

[22:09]
при том что в нашем языке пока ничего кроме функций и данных нет

cannabiscat [22:09]
каша будет

kirill.mokevnin [22:09]
ну неймспейсы еще

fatwebdev [22:09]
наверно нет. но глобальные упрощают архитектуру наверно? (много наверно) (edited)

sanykey [22:09]
тогда без api никак, наверное

kirill.mokevnin [22:10]
@fatwebdev мы начали с того что перечислили то почему глобальные переменные это ад и от них надо бежать )

fatwebdev [22:10]
и круг замкнулся у меня в голове Оо

kirill.mokevnin [22:10]
кто может скинуть откуда нибудь из вики?

[22:10]
почему они зло

cannabiscat [22:10]
это спираль, рассмотри лучше

sanykey [22:11]
нужно глобальные переменные юзать как точки доступа к api модулей?

rand0m [22:11]

глобальная переменная может быть изменена в любой точке программы (если она не находится в защищённой памяти или объявлена как переменная только для чтения (англ.)), что может повлиять на работу других частей программы[2]. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы. Однако в некоторых случаях бывает полезно использовать глобальные переменные. Например, они могут быть использованы, чтобы избежать необходимости прохода часто используемых переменных через несколько функций. Глобальные переменные также затрудняют интеграцию модулей, поскольку код, написанный ранее, может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.

cannabiscat [22:12]
нет контроля доступа, так как глобальная

sanykey [22:12]
ну к api надо же обратиться с одного модуля в другом, откуда один модуль будет знать, где искать другой модуль?

cannabiscat [22:13]
пусть спросит

pny [22:13]
апи для поиска апи

rand0m [22:13]
у кого)

fatwebdev [22:13]
у главного модуля ) который регестрирует подключение дочерних Оо (edited)

rand0m [22:14]
как может младший модуль узначать у старшего

sanykey [22:14]
ну главный модуль - он же и глобальный как бы.

kirill.mokevnin [22:15]
ноуп

[22:15]
нет глобального вообще ничего

[22:15]
каждый модуль в себя вгружает то что надо и работает с этим

[22:15]
es6 так и работает кстати, там нет глобального объекта

[22:16]
у вас есть некий код который занимается инициализацией

[22:16]
он создает необходимые структуры данных

[22:16]
и прокидывает их во внутрь приложения

[22:16]
а дальше какой нибудь while(getNextConnect()) { ...} (edited)

[22:16]
и дальше пошла работа

natalm [22:16]
joined #random

rand0m [22:17]
кластерно воркерный подход)

pham_nuwen [22:18]
от глобальных одни минусы, и можно что угодно сделать без них:joy:

sanykey [22:18]
не, мне точно надо что-то прочитать )

kirill.mokevnin [22:18]
в общем не нужно оно

[22:19]
но да, программы надо строить немного по другому,а именно модульно)

rand0m [22:19]
модульно надо все строить)

fatwebdev [22:19]
а чтож не делают так?

kirill.mokevnin [22:19]
делают

[22:19]
не в си

[22:20]
вот у нас есть ide на js

[22:20]
в хекслете

[22:20]
там нет глобальных переменных внутри

rand0m [22:20]
т.е чистые функции должны быть

[22:20]
одна внутри другой?

kirill.mokevnin [22:20]
нет

[22:21]
побочные эффекты могут быть разными

[22:21]
можно в файл писать

[22:21]
это не связано с глобальными переменными

[22:21]
ну и функции часто меняют свои аргументы

[22:21]
это тоже сразу не чистота

[22:21]
сорт в почти любом языке программирования так делает

[22:22]
любая функция которая принимает на вход ваш объект и меняющая его, меняет свой аргумент

alex_r [22:23]
однако, вот с этой стороны подвоха точно не ожидал)

kirill.mokevnin [22:23]
а ты как думал?

cannabiscat [22:23]
а как же рекурсивный вызов с другими данными?

alex_r [22:23]

а ты как думал? честно говоря, я вообще не думал вот об этом (edited)

kirill.mokevnin [22:24]
как это связано с глобальными переменными?

cannabiscat [22:24]
не, с глобальными никак

kirill.mokevnin [22:24]
окей, давайте чтобы нить не терять

[22:24]
ну собсно

[22:24]
а дальше то что?

[22:24]
чего нам еще не хватает?

[22:25]
ну да круто иметь функциональные фишечки, фвп и так далее

[22:25]
добавили, пользуемся хорошо

[22:25]
что дальше?

fatwebdev [22:25]
за памятью не хотим следить ! или это другая степь? ) (edited)

alex_r [22:25]
было

pham_nuwen [22:25]
абстракции

kirill.mokevnin [22:25]
это было изначально в нашем си)

pny [22:25]
уже не следим

cannabiscat [22:25]
масштабируемость?

fatwebdev [22:26]
было

cannabiscat [22:26]
не, не так

fatwebdev [22:26]
тегируемые данные?

abbath [22:26]
Пишу на языке с функциями и данными, брат жив

sashashakun [22:27]
зависимость есть?

abbath [22:27]
:batya:

sanykey [22:27]
меня сбили с толку чёт.

cannabiscat [22:27]
хей, здесь рандом, а не cs!

alex_r [22:27]
слабая связанность была

kirill.mokevnin [22:28]
@sanykey ?

[22:28]
давайте зафиксируемся чтобы дальше идти

alex_r [22:28]
нить потеряна, надо перечитать)

kirill.mokevnin [22:28]
мы придумали язык, описали типичные проблемы

[22:28]
и придумали их решение

[22:28]
получился неплохой тьюринг полный язык с функциональными фишечками (для любителей)

[22:29]
без глобальных переменных, с неймспейсами

[22:29]
тут понятно все?

cannabiscat [22:29]
мы молодцы. однако..

sanykey [22:29]
вроде да

kirill.mokevnin [22:29]
а вот дальше уже сложнее думать в стиле "а чего не хватает"

[22:29]
потому что пошли ньюансы

[22:29]
представим что в нашем языке есть ассоциативный массив

[22:29]
мап словарь (edited)

abbath [22:29]
Пока вы здесь переизобретаете ООП я дочитал до метатеории подтипов

kirill.mokevnin [22:30]
подхватишь тогда меня когда я закончу :wink:

abbath [22:30]
:kolobok:

kirill.mokevnin [22:30]
кстати вы в курсе что за структура данных словарь?

[22:30]
(вопрос с подвохом) :smile:

cannabiscat [22:30]
ассоц.массив))

kirill.mokevnin [22:30]
это синонимы

fatwebdev [22:31]
объект!

[22:31]
шлем сообщение что хотим получить он отдает

alex_r [22:31]
звучит логично

cannabiscat [22:31]
там с хешами замут

fatwebdev [22:31]
большой большой switch это )))

abbath [22:32]
Функция же :troll: (edited)

kirill.mokevnin [22:32]
такс), ну начнем с того что это не структура данных

pham_nuwen [22:32]
интерфейс к хранилищу данных:)

kirill.mokevnin [22:32]
это абстрактный тип данных

[22:32]
@pham_nuwen типа того

sanykey [22:32]
хеш-таблица?

cannabiscat [22:32]
у аббата всё функция, хаскель хороший язык

kirill.mokevnin [22:32]
вот прямо нет

rand0m [22:32]
дерево

alex_r [22:32]
угм, а особенности реализации - как кто хочет

rand0m [22:32]
раз уж все гадают :smile:

kirill.mokevnin [22:33]
Абстра́ктный тип да́нных (АТД) — это множество объектов, определяемое списком компонентов (операций , применимых к этим объектам, и их свойств). Вся внутренняя структура такого типа спрятана от разработчика программного обеспечения — в этом и заключается суть абстракции. Абстрактный тип данных определяет набор функций, независимых от конкретной реализации типа, для оперирования его значениями. Конкретные реализации АТД называются структурами данных.

sashashakun [22:33]

это абстрактный тип данных и тут сразу вопрос, в чем разница между АТД и СД?:wink: (edited)

kirill.mokevnin [22:33]
в том что это именно тип данных, оно определяет способ доступа, но ничего не говорит о структуре

cannabiscat [22:33]
список

abbath [22:33]
Конкретные реализации АТД называются структурами данных.

kirill.mokevnin [22:33]
мапу можно и на массивах и на деревьях и на чем хочешь построить

[22:33]
хоть на списках

rand0m [22:34]
как угодно можно назвать при желании

[22:34]
обьект база наддных)

cannabiscat [22:34]
монаду не наливайте

thadjbullet [22:35]
не будем

kirill.mokevnin [22:35]
теперь поехали дальше, вот у вас есть ассоциатвный массив

[22:35]
и вы такие решили разработать систему работы с чем?

[22:36]
хм, давайте представим что макдак

[22:36]
система эмулирующая работу макдак (edited)

[22:36]
и значит вам надо внутри бургеры создавать

[22:36]
что из себя будет бургер представлять?

alex_r [22:36]
словарь?

fatwebdev [22:36]
функцию

thadjbullet [22:36]
я сразу о свободной кассе подумал

kirill.mokevnin [22:36]
ну другого у нас нет)

rand0m [22:36]
список)

kirill.mokevnin [22:36]
словарь какой нибудь да

[22:36]
напишите пример

[22:37]
словари в нашем языке описываются как json

[22:37]
для простоты

alex_r [22:39]

'состав' : ('хлеб', 'мясо')
'цена' : '12'}```

kirill.mokevnin [22:39]  
хм, мы вроде не 1c пишем

[22:39]  
ну ок

[22:39]  
а еще в макдаке есть продавцы

alex_r [22:39]  
я старался, раскладку переключал :slightly_smiling_face:

fatwebdev [22:39]  
```{
  "котлетыГриль": 2,
  "специальныйСоус": 1,
  "сыр": 1,
  "огурцы": 1,
  "салат":1,
  "лук": 1,
  "булочкаСКунжутом": 1
}

kirill.mokevnin [22:39]
0_o

rand0m [22:39]
:batya:

kirill.mokevnin [22:39]
вот она разница в мышлении пошла

fatwebdev [22:39]
я есть просто хочу (

kirill.mokevnin [22:39]
@fatwebdev с таким бургером далеко не уедем

rand0m [22:39]
кто-то больше любит макдаки

alex_r [22:40]
ключи у выдра - нифига не апи)

kirill.mokevnin [22:40]
ну ок, а как продавца мы представим?

alex_r [22:40]
как функцию

kirill.mokevnin [22:40]
ноуп

pham_nuwen [22:40]
весь макдак — огромный словарь :slightly_smiling_face:

kirill.mokevnin [22:40]
у нас всегда есть данные

[22:41]
продавец это тоже данные

sanykey [22:41]
так продавец может быть не один, на каждого функцию херачить? )

kirill.mokevnin [22:41]
даже через функцию вы бы представляли данные (edited)

fatwebdev [22:41]
бургер тоже не один!

alex_r [22:41]
хм, значит ничего не остаётся кроме словаря

sanykey [22:41]
дык он и не функция

kirill.mokevnin [22:41]
данные можно и функциями представлять

[22:41]
кто проходил курсы тот знает

[22:41]
короче как продавца представим?

fatwebdev [22:42]
json писать?

kirill.mokevnin [22:42]
угу

[22:42]
щас самый цимес пойдет

[22:43]
и ооп и все столкнется в едином экстазе

[22:43]
если не уснем

[22:44]
ребят, давайте продавца в студию) (edited)

pham_nuwen [22:44]
продавец это касса или конкретный сотрудник?

kirill.mokevnin [22:44]
сотрудник

pham_nuwen [22:44]

    position: "cashier"
    name: "Ivan"
}```
(edited)

kirill.mokevnin [22:44]  
еее, родили

[22:45]  
теперь, как будут оформлены в нашем языке функции для работы управления продавцом?

sanykey [22:45]  
хм, наверное в словарь с продавцом нужно добавить ссылку на функцию продажи )

kirill.mokevnin [22:46]  
0_o

[22:46]  
тяжелое js наследие

sanykey [22:46]  
ну ладно, фэйл

fatwebdev [22:46]  
```{
  'имя': 'Катя',
  'доступККассе': true,
  'заказ': {},
  'статусВыполнения': 'готовка',
  'статусОплаты': 'оплаченно'
}

kirill.mokevnin [22:46]
мы в язык вводили модули

[22:46]
неймспейсы тоесть

[22:46]
у нас будет модуль burger

rand0m [22:46]
кому то жсоны понравилось писать :smile:

kirill.mokevnin [22:47]
модуль cassier

[22:47]
или как там оно пишется

sashashakun [22:47]
cashier

kirill.mokevnin [22:47]
теперь сложное задание, покажите пример с псевдокодом который создает кассира, после чего этот кассир формирует заказ

[22:48]
посмотрим как вы можете без языка мыслить

[22:48]
вашего любимого

[22:49]
:smile:

[22:49]
ты чо все портишь

fatwebdev [22:49]
а заказ что не передал!

kirill.mokevnin [22:49]
ладно, немого подсказал, но надо еще показать импорт из модулей

[22:49]
и наполнение заказа

abbath [22:49]
Божество какое, кассиров создавать

sashashakun [22:49]
ничо не было

[22:49]
:eyes:

abbath [22:49]
Пулл кассиров нужен :troll:

kirill.mokevnin [22:50]
давайте договоримся что к функциям измодуля нужно обращаться через точку

[22:50]
burger.make()

[22:50]
в таком духе

[22:50]
а не, давайте через /

[22:50]
как в кложе

[22:50]
чтобы у вас щас не случился блок на объектах

[22:50]
а то вы парни резкие

[22:50]
сразу про ооп вспомните

[22:51]
если вам щас сложно, то значит вы очень сильно на язык ориентированы

[22:51]
а не на процессы

sanykey [22:52]
пожалуй я точно на язык ориентирован, мне тяжело воспринимать этот слаконар :)

pham_nuwen [22:52]

cashierIvan = cashiers/createCashier('Ivan')
cashiers/createOrder(cashierIvan,  burgers/select('Big King'))```
(edited)

kirill.mokevnin [22:53]  
воу воу

[22:53]  
слишком круто для первого раза

sanykey [22:53]  
хм, этот пример я понял. Так вот о чём вы

kirill.mokevnin [22:53]  
но, давайте разберем что тут не так

pham_nuwen [22:53]  
понял, в 3 строке ошибка

kirill.mokevnin [22:53]  
какая?)

alex_r [22:54]  
select?

kirill.mokevnin [22:54]  
нет

pham_nuwen [22:54]  
надо `cashiers/createOrder(cashier,  burgers/select('Big King'))`

kirill.mokevnin [22:54]  
но и это тоже не совсем

[22:54]  
заказ то не только из бургеров состоит

rand0m [22:55]  
:smile:

pny [22:55]  
Заказ принимает кассир, кассир получает деньги

kirill.mokevnin [22:55]  
речь про том что в заказе всегда список

pny [22:55]  
куда без денег то?!

kirill.mokevnin [22:55]  
а не конкретный продукт

sanykey [22:56]  
нужен цикл, который создаст объекты из списка заказов? А потом всё это передать а заказ?

alex_r [22:56]  
не объекты)

kirill.mokevnin [22:56]  
нам цикл сейчас не нужен, мы создаем конкретный заказ

abbath [22:56]  
Делаем функции, а потом композицию :troll:

kirill.mokevnin [22:56]  
надо просто показать что там список

pny [22:56]  
[burgers/select('Big King')]

kirill.mokevnin [22:56]  
да

[22:56]  
можно конечный вариант сюда?

[22:56]  
щас обсудим

[22:57]  
@sanykey как же жестко тебя js деформировал то

sanykey [22:57]  
ну я же на php дольше работаю :(

rand0m [22:57]  
а де иван

kirill.mokevnin [22:58]  
:smile:

[22:58]  
ивана потеряли

pny [22:58]  
тьфу, ну да

alex_r [22:58]  
у меня что-то завтык с select - это что?)

pny [22:58]  
added a Ruby snippet 
import cashiers, burgers;
cashierIvan = cashiers/createCashier('Ivan')
cashiers/createOrder(cashierIvan,  [burgers/select('Big King')])
Add Comment

pny [22:58]  
это выбрать бургер из меню

alex_r [22:58]  
да, но что это - функция, словарь словарей?

[22:59]  
туплю уже)

kirill.mokevnin [22:59]  
@alex_r какая разница?

sanykey [22:59]  
>@sanykey как же жестко тебя js деформировал то
А что мне с этим делать то?

sashashakun [22:59]  
страдать

alex_r [22:59]  
да разницы то нет, просто)

kirill.mokevnin [22:59]  
здесь отличная абстракция

[22:59]  
которая изолировала особенности кишок

[22:59]  
все читается

[23:00]  
все понятно

[23:00]  
есть ваши любимые действия

sanykey [23:00]  
ладно. надо java изучить тогда )

kirill.mokevnin [23:00]  
сейчас отвлечемся на секунду от повествования

[23:00]  
потому что тут уже переход в мощные темы

[23:01]  
и немного вернемся к вашему вижену ооп

[23:01]  
с вашей точки зрения и понимания ооп, что в этом коде не так? чего не хватает? и какие есть проблемы, которых не было с использованием вашего понимания ооп

[23:01]  
конечно же при условии что вы действительно считаете что там есть проблемы, искать их специально не надо если вы их не видите

fatwebdev [23:02]  
ивану вроде по идее должны слать заказ ( по привычке) (edited)

alex_r [23:02]  
угм, +1 за ивана, а в остальном всё ок
хотя и это не критично (edited)

kirill.mokevnin [23:02]  
а вы заметили что тут как раз не будет дилеммы кто кого есть собака еду или еде передается собака?

[23:03]  
все однозначно и четко

[23:03]  
и куча батлов просто срезается

gr8web [23:03]  
ответственность. Ivan/работник отвечает за заказы. (edited)

rand0m [23:03]  
вроде все очевидно

[23:03]  
я бы так и сделал :troll:

kirill.mokevnin [23:03]  
и все же, зачем тогда нужно то ооп, которое у вас в голове прямо сейчас

[23:03]  
какую проблему оно решает

[23:03]  
вот код выше

[23:04]  
где мы оперируем понятиями сущностей

[23:04]  
говорим что кассир создает заказ

[23:04]  
и это видно в коде

pny [23:04]  
Более программисто-ориентируемо

kirill.mokevnin [23:04]  
или может этот код и есть ооп? :wink:

fatwebdev [23:04]  
пользовательские типы данных?

alex_r [23:04]  
хм, тут кассиры принимают заказ и выделяют ивана и бургеры
можно батл что бургеры должны, а не кассиры :troll:

rand0m [23:04]  
это вроде и есть ооп)

fatwebdev [23:04]  
нет не ооп

sanykey [23:04]  
функция изменяет аргумент?

kirill.mokevnin [23:04]  
тут кассиры не принимают заказы

rand0m [23:04]  
у меня это отторжения не вызывает

kirill.mokevnin [23:05]  
заказ всегда привязан к кассиру и тут это отражено

rand0m [23:05]  
ну иван это свойство заказа

[23:05]  
что тут такого :smile:

kirill.mokevnin [23:05]  
да, это свойство заказа, но в общем смысле этого слова

alex_r [23:05]  
я к тому, что можно привязать и к меню/бургеру

kirill.mokevnin [23:05]  
зависит от модели да, можно было бы и чуть по другому по модулям разложить

[23:06]  
в конце концов раскладка по модулям не имеет одного верного решения, это очень сильно зависит от ваших кейсов использования системы

[23:06]  
но выше я уже увидел что мы поплыли

[23:06]  
кто то говорит что это ооп

[23:06]  
кто то что не ооп

[23:06]  
кто то что надо вызов через точку делать

[23:06]  
и тогда станет ооп

[23:06]  
но все вдруг сразу забыли про три кита

[23:06]  
вообще ни слова

[23:06]  
:smile:

[23:07]  
кстати тут есть инкапсуляция?

gr8web [23:08]  
да

alex_r [23:09]  
нет

[23:09]  
¯\_(ツ)_/¯

rand0m [23:09]  
как нет

[23:10]  
у нас есть иван

[23:10]  
и бургер)

gr8web [23:11]  
мы не знаем как Иван или бургер будет сделан.
в этом же и есть инкапсуляция?

kirill.mokevnin [23:11]  
вообще это называется абстракция

[23:12]  
то чему мы учим на хекслете

rand0m [23:12]  
ну у нас же конкретные

kirill.mokevnin [23:12]  
строить абстракции

rand0m [23:12]  
экземпляры

kirill.mokevnin [23:12]  
функции вас изолировали от структур данных внутри

rand0m [23:12]  
заранее созданные

kirill.mokevnin [23:12]  
вы оперируете абстракцией, и для этого вам дали интерфейс/api

cannabiscat [23:13]  
Барьеры абстракции != инкапсуляция

kirill.mokevnin [23:13]  
@alex_r под инкапсуляцией понимает кое что совсем другое

[23:13]  
он понимает data protection

[23:13]  
то что вы не можете ходить менять данные в обход апи/интерфейса (edited)

[23:13]  
да ведь?

alex_r [23:14]  
угм

sanykey [23:14]  
ну я так же это понимаю.

kirill.mokevnin [23:14]  
тогда скажите мне, js/python/ruby ооп языки?

[23:14]  
во всех этих языках вы всегда можете пойти в обход

alex_r [23:14]  
угм, "по соглашению")

kirill.mokevnin [23:14]  
а java? я тоже там могу через reflection пойти

[23:14]  
в обход

[23:14]  
более того, все ORM так делают

rand0m [23:15]  
джава ооп

kirill.mokevnin [23:15]  
они идут в обход

rand0m [23:15]  
а другие не ооп

kirill.mokevnin [23:15]  
:smile:

rand0m [23:15]  
:batya:

sanykey [23:15]  
в js соглашения просто.

kirill.mokevnin [23:15]  
а у программистов значит нет соглашения без привязки к языкам что нельзя абстракции обходить?

rand0m [23:15]  
рефлекшен это обход а в тех языках скорее обьекты это обход

kirill.mokevnin [23:15]  
)

[23:15]  
чем js такой особенный в этом смысле?

[23:16]  
для любого дева очевидно что нельзя напрямую менять сущность, для которой есть интерфейс

[23:16]  
потому что можно нарушить инварианты

[23:16]  
для этого не нужно иметь соглашений на уровне языка

[23:16]  
так работает наш мир

[23:17]  
как минимум, я надеюсь, вы поняли насчет того что такое абстракция

[23:17]  
и что делает хекслет) (edited)

[23:18]  
и как видите абстракция на функциях делается прекрасно

[23:18]  
а вот data protection это тема неоднозначная

[23:18]  
оно где то есть, но везде можно обойти и часто нужно обходить

[23:18]  
в случае создания либ

sanykey [23:18]  
так что же такое инкапсуляция?

alex_r [23:18]  
еще настораживает, что мы можем скормить не тот словарь не той функции...т.е. вопрос типизации

kirill.mokevnin [23:19]  
@alex_r зришь в корень, мы к этому идем

[23:19]  
давай только с инкапсуляцией закончим

[23:19]  
и так, если считать что инкапсуляция это защита от дурака программиста, то js/ruby/python не ооп языки

[23:19]  
потому что не выполняется одно из базовых условий

[23:20]  
с чем, конечно же, мало кто согласится

[23:20]  
про руби вообще сказано это ваще самый ооп язык

[23:20]  
все объект!

[23:20]  
но почему то не написано "все наследуется!"

[23:20]  
вы не находите смешным и странным что про объекты в определении ооп ни слова

[23:20]  
в том определении к которому вы привыкли

[23:21]  
окей, возвращаемся к нашим баранам

[23:21]  
"еще настораживает, что мы можем скормить не тот словарь не той функции...т.е. вопрос типизации"

[23:21]  
вот это супер наблюдение

[23:21]  
действительно, мы в любую функцию передаем любую сущность (edited)

[23:21]  
и что будет?

fatwebdev [23:21]  
я же писал я тегируемых данных ( (edited)

kirill.mokevnin [23:21]  
)

[23:22]  
что то было да

[23:22]  
пропустил(

[23:22]  
так вот это реальная и серьезная проблема

fatwebdev [23:22]  
упадет все если не умеет обрабатывать то что мы кинем, и никакой еды ( (edited)

kirill.mokevnin [23:23]  
почему упадет?

[23:23]  
вот есть у тебя функция getName которая из структуры имя берет

[23:23]  
вот она и возьмет имя

[23:23]  
у бургера

[23:23]  
хотя ты у кассира хотел взять имя

pham_nuwen [23:23]  
в нашем языке мы можем создавать собственные типы данных? (edited)

kirill.mokevnin [23:23]  
и все работает)

fatwebdev [23:23]  
да но это если у нас похожие сущности

cannabiscat [23:23]  
Бургер принесет Ивана

kirill.mokevnin [23:23]  
так к чему мы пришли?

[23:24]  
чего еще не хватает в языке?

[23:24]  
чтобы оно было надежнее и предсказуемее

rand0m [23:24]  
строгой типизации

alex_r [23:24]  
типизации или совмещения данных и поведения

rand0m [23:24]  
:trollface:

cannabiscat [23:24]  
Тестов

kirill.mokevnin [23:24]  
пользовательских типов

[23:24]  
так)

[23:24]  
вы проблему прочувствовали? (edited)

naphaso [23:25]  
все реализованные на практике системы типов ограничены, чрезмерный перфекционизм обязательно утыкается в очень шероховатую стену ограничений, утыкаясь в эту стену, порождаются проблемы, которые очень сложно решаются. примеры ограничений навскидку - нельзя ввести тип “непустой массив”, “число от 100 до 200”, “массив целых чисел в сумме образующих 100"

cannabiscat [23:25]  
Про пользовательские типы можно подробнее

kirill.mokevnin [23:25]  
@naphaso в agda можно :wink:

naphaso [23:25]  
угу, но dependant types тоже имеет свои ограничения

[23:25]  
нельзя его назвать совершенной системой типов (edited)

kirill.mokevnin [23:25]  
да, это серьезная история

naphaso [23:26]  
да и dependant types очень далек от эффективной реализации, разве что теоремы формулировать

kirill.mokevnin [23:26]  
alex_r [11:18 PM]  
еще настораживает, что мы можем скормить не тот словарь не той функции...т.е. вопрос типизации

[23:26]  
@cannabiscat вот смотри

[23:26]  
так как у нас все сущности это внутри просто мапа

[23:26]  
то любая функция может в принципе работать с любой функцией

[23:26]  
хотя мы так не очень хотим

[23:26]  
мы же сделали набор функций для бургера

[23:26]  
и нам хотелось бы что бы оно работало только с бургерами

[23:26]  
и ругалось если мы туда отдаем не бургер

[23:27]  
иначе очень сложно отлаживать

[23:27]  
и можно получать фантомные ошибки

abbath [23:27]  
dependent types

kirill.mokevnin [23:27]  
@naphaso @abbath вы только пока эфир этими штуками не зафигчьте), дайте закончить плс

[23:27]  
мы тут по лезвию идем

[23:28]  
ну так что, пороблема всем понятна?

[23:28]  
@sanykey @cannabiscat ?

gr8web [23:28]  
да, кажется (edited)

cannabiscat [23:28]  
Да

kirill.mokevnin [23:29]  
окей, все поняли что словарей недостаточно

[23:29]  
мы хотим нечто такое что не просто словарь, а такой спец словарь

[23:29]  
бургер-словарь

[23:29]  
кстати это можно сделать и без языка, чисто на функциях реализовать

[23:29]  
но считаем что мы хотим это в самом языке

[23:29]  
теперь внимание вопрос!

[23:30]  
как создавать свой тип?

[23:30]  
в нашем случае бургер

[23:30]  
покажите пример

sanykey [23:30]  
тяжко идёт

[23:30]  
но проблему более менее понимаю

kirill.mokevnin [23:30]  
ну смотри cashier/getName(burger)

sanykey [23:30]  
я в js с ней сталкиваюсь постоянно

kirill.mokevnin [23:31]  
мы хотим чтобы оно упало с ошибкой "гетнейм хотел работать с кассиром, но мне дали бургер, где мои кассиры?"

[23:31]  
выше писали json которым мы создаем бургер внутри createBurger

[23:32]  
теперь давайте придумаем как сделать это не просто словарем а новым типом данных (edited)

george-a [23:32]  
new генерирует новые объекты

kirill.mokevnin [23:32]  
нуууу?

[23:32]  
где тут фейспалм? :smile:

[23:32]  
@george-a прочитай плс с самого начала и попробуй понять каждую строчку)

alex_r [23:33]  
добавим в функцию проверку на наличие необходимых полей

pny [23:33]  
{type: ‘burger’
egg: 1
souce: 2
}

pham_nuwen [23:34]  
если создавать на основе того что имеем, нужен модуль для работы с своими типами (edited)

gr8web [23:34]  
```define burger {
  ….
}

kirill.mokevnin [23:34]
то что вы описываете это ручная история

pny [23:34]
так себе бургер

kirill.mokevnin [23:34]
а я про то что в язык

[23:34]
@gr8web во, похоже

sanykey [23:34]
ой у меня интернет отваливался щас

cannabiscat [23:34]
Выдр, мне кажется, или мы сегодня это проходили?))

kirill.mokevnin [23:34]
вы именно это и проходили

alex_r [23:34]
мимо)

kirill.mokevnin [23:34]
так, а как внутри функции сказать что она только бургер на вход принимает?

[23:35]
и давайте все вместе соберем: 1) напишите определение типа бургера 2) покажите как из этого типа мы создаем конкретный бургер 3) как этот бургер принять внутрь функции

[23:36]
ребят, давайте поднажмем, мы почти вошли в новый дивный мир

sanykey [23:37]
alex_r попробуй че нить, ты же сыпался умными словами

gr8web [23:38]
как проверить, хмм (edited)

kirill.mokevnin [23:39]
мы считаем что это реализовано на уровне языка

[23:39]
нужно просто определиться как это в синтаксисе будет видно

naphaso [23:39]
реализуем надежные контракты уровня языка, которые в дальнейшем могут быть использованы для оптимизации при компиляции

sanykey [23:39]
вообще не знаю, каким образом определить, какого пользовательского типа переданный объект

naphaso [23:40]
проверка типов аргументов при каждом вызове

pham_nuwen [23:40]

    ingregients: map;
}

bigking = burger([ingregients])```

kirill.mokevnin [23:40]  
неплохо, а что насчет функций которые принимают этот бургер?

[23:41]  
нужна просто сигнатура функции

[23:41]  
ну придумайте что нибудь)

sanykey [23:41]  
а как функция будет знать, какие вообще пользовательские типы есть, чтобы сравнить переданный аргумент

kirill.mokevnin [23:41]  
это не функция будет знать, а твой компилятор

pny [23:41]  
added and commented on a Ruby snippet 
define burger {
  name: ‘King’,
  ingregients: {}
}
​
должен создавать бургер
{
  name: ‘King’,
  type: burger,
  ingregients: {}
}
1 Comment Click to expand inline 11 lines
А функция принимающая в свою очередь должна проверять этот тип

rand0m [23:41]  
createOrder(CashierIvan, burger(BurgerFactory.createBurger())) :troll:

kirill.mokevnin [23:41]  
который до определения этой функции увидел что было определение типа burger

alex_r [23:41]  
в аргументах указываешь принимаемый тип и вуаля

kirill.mokevnin [23:41]  
покажите пример

[23:41]  
многие не понимают о чем речь

[23:42]  
@pny странно что у типа burger уже есть имя (edited)

pham_nuwen [23:42]  
`isBurger(burgerName)`

kirill.mokevnin [23:42]  
эх

gr8web [23:42]  
не такая сигнатура)

naphaso [23:42]  
у функции будет сигнатура принимаемых аргументов, каждый аргумент в сигнатуре имеет ссылку на описание типа - его название. при компиляции будет проверяться передаваемый тип и принимаемый тип

alex_r [23:42]  
`foo(b: burger)`

kirill.mokevnin [23:42]  
во!

[23:42]  
наконец то

sanykey [23:42]  
ааааа

gr8web [23:42]  
alex_r спаситель

sanykey [23:43]  
где-то я такое видел

alex_r [23:43]  
в типизированных языках :troll:

kirill.mokevnin [23:43]  
если у вас есть самоирония, то могу кое что скинуть послушать

[23:43]  
про текущую ситуацию)

gr8web [23:43]  
конечно есть

kirill.mokevnin [23:43]  
акустическое техно слышали?

sashashakun [23:43]  
lol

alex_r [23:43]  
буратино был тупой! :slightly_smiling_face:

sanykey [23:43]  
ну я и так понимаю, что не смыслю в этом ничего

kirill.mokevnin [23:43]  
:smile:

[23:44]  
да, понятно что сложно, особенно текстом

[23:44]  
я иногда сам не понимаю что пишу :trollface:

sanykey [23:44]  
ну это издевательство уже )

kirill.mokevnin [23:44]  
теперь делаем ход конем и переходим кое куда

[23:44]  
а как вы определяете собственные типы в ваших любимых языках, а? :wink:

[23:45]  
вам ничего  define Burger не напомнил?

[23:45]  
любители ооп

alex_r [23:45]  
нам нужны классы :ploho:

gr8web [23:45]  
классы

[23:45]  
тоже самое как бы

kirill.mokevnin [23:45]  
так что такое класс то?

alex_r [23:45]  
описание типа

pny [23:45]  
описание пользовательского типа

rand0m [23:46]  
ну какой же это тип

kirill.mokevnin [23:46]  
"Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию."

[23:46]  
это в вики

[23:46]  
написано

[23:46]  
именно так и есть

[23:46]  
одна из функций класса (и главная) это описание пользовательского типа

[23:46]  
надо это прочувствовать хорошо

[23:46]  
что классы это про систему типов

[23:46]  
а не про ооп

naphaso [23:46]  
давайте развивать тему, принимаемый и передаваемый тип не обязательно должны быть одним и тем же типом, должен быть путь преобразования первого во второе в системе типов (edited)

kirill.mokevnin [23:46]  
(дальше будет кое что про ооп, но пока не берем это во внимание)

[23:46]  
погоди погоди погоди)

[23:47]  
ты щас спалишь тему

[23:47]  
мы сейчас одну фундаментальную вещь должны были понять

[23:47]  
что класс это способ описать тип

[23:47]  
часто классы называют структурами данных

[23:47]  
потому что они описывают именно структуру наших данных

[23:48]  
в java кстати есть data class

abbath [23:48]  
@naphaso TaPL читал?

rand0m [23:48]  
это ближе к реальности

kirill.mokevnin [23:48]  
это особенности самой java

naphaso [23:48]  
ну структура это только структура, это именнованный тип являющийся декартовым произведением его составляющих

rand0m [23:48]  
скорее структура данных с методами)

gr8web [23:48]  
ДТО?

naphaso [23:48]  
@abbath увы, нет

kirill.mokevnin [23:48]  
погодите, не надо сейчас к методам привязыфваться

[23:48]  
это совершенно другая история решающая другую проблему

[23:48]  
она не связана с тем что классы это типы данных

[23:49]  
классы нужны в том случае если у вас есть типы

[23:49]  
и ооп тут вообще не причем

abbath [23:49]  
А я читаю

rand0m [23:49]  
но питон

kirill.mokevnin [23:49]  
аналоги таких пользовательских типов есть почти во всех языках программирования так или иначе

[23:49]  
что питон?

rand0m [23:49]  
разве там это тип

[23:49]  
класс

kirill.mokevnin [23:49]  
класс это везде тип

abbath [23:50]  
Срыв покровов

kirill.mokevnin [23:50]  
о господи)

[23:50]  
https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

[23:50]  
Класс — это элемент ПО, описывающий абстрактный тип данных

rand0m [23:50]  
это абстрактное же понятие

[23:50]  
а в частностях немного иное везде

[23:51]  
в зависимости от системы типов

kirill.mokevnin [23:51]  
при этом оно везде определяет тип данных

[23:51]  
и его связь с тем что может быть вызвано применительно к нему

[23:51]  
типы данных вводят ограничение на операции применимые к ним

[23:51]  
и на диапазон возможных значений

[23:51]  
в этом суть типов

[23:53]  
готовы идти дальше?

[23:53]  
кстати, давайте я еще пару пруфов

[23:53]  
в паскале вроде были прямо типы

[23:53]  
да?

[23:53]  
и посмотрите язык симула

naphaso [23:53]  
я вижу немного с другой стороны - не типы вводят ограничение на операции, а в определение операций включены ограничения на принимаемые типы

[23:54]  
типы не знают ни о каких операциях

kirill.mokevnin [23:54]  
ну ты тут тоже больше про реализацию, надо @abbath спросить, как там в теории типов?

naphaso [23:54]  
система типов это целостная сущность, операции приделаны к ней сверху

abbath [23:54]  
Captain America : Civil War

sanykey [23:55]  
abbath, что с тобой нынче?

abbath [23:55]  
uploaded an image: Slack for Android Upload 
Add Comment

abbath [23:55]  
А что не так?

naphaso [23:56]  
кхм. какое-то очень прикладное утверждение

sanykey [23:56]  
я вот читаю то что на фото, и у меня вывих мозга случился

kirill.mokevnin [23:56]  
аббат просто тапла начитался и теперь троллит нас всех

naphaso [23:56]  
я предпочитаю HoTT :slightly_smiling_face:

cannabiscat [23:56]  
Да там лучше сразу рассматривать совокупность типов, операторов и область значений, как алгебру, как в теории групп.

kirill.mokevnin [23:56]  
In 1966 C. A. R. Hoare introduced the concept of record class construct, which Dahl and Nygaard extended with the concept of prefixing and other features to meet their requirements for a generalized process concept. Dahl and Nygaard presented their paper on Class and Subclass Declarations at the IFIP Working Conference on simulation languages in Oslo, May 1967. This paper became the first formal definition of Simula 67. In June 1967 a conference was held to standardize the language and initiate a number of implementations. Dahl proposed to unify the type and the class concept. This led to serious discussions, and the proposal was rejected by the board. SIMULA 67 was formally standardized on the first meeting of the SIMULA Standards Group (SSG) in February 1968.

[23:56]  
вот кстати

naphaso [23:56]  
пошли в гомотопии

kirill.mokevnin [23:57]  
ок, давайте дальше

[23:57]  
я надеюсь что вот то что мы уже проговорили, сорвало покровы

[23:57]  
потому что, класс - это тип, для большинства приверженцев ооп это что то из разряда фантастики

[23:57]  
тех кто матчасть не знает

[23:58]  
ну и типы в наш язык мы ввели по вполне утилитарным целям

naphaso [23:58]  
uploaded an image: Slack for Android Upload 
Add Comment

kirill.mokevnin [23:58]  
добавить надежности

[23:58]  
опасные вы ребята)

[23:58]  
с такими книгами

abbath [23:58]  
uploaded an image: Slack for Android Upload 
Add Comment

kirill.mokevnin [23:58]  
kirill.mokevnin [11:58 PM]  
добавить надежности

[23:58]  
так вот смотрите ситуацию

[23:58]  
вот мы значит сделали заказ

[23:59]  
у нас в заказе лежат бургеры

cyril [23:59]  
@abbath покажешь пример противоречия из первой цитаты?

kirill.mokevnin [23:59]  
а теперь внезапно мы кладем туда колу, картошку, нагетсы

[23:59]  
и встает вопрос

[23:59]  
мы хотим посчитать стоимость заказа

[23:59]  
как это сделать?

[23:59]  
(понимаю что не все сейчас осознают в чем фишка вопроса, поэтому спрашивайте)


----- Today September 14th, 2016 -----
alex_r [00:00]  
подтипы и полиморфизм подтипов? или параметрический полиморфизм? (edited)

rand0m [00:00]  
обратиться ко всем) чтобы отдали нам цену

kirill.mokevnin [00:00]  
ну елы палы

naphaso [00:00]  
а как мы их кладем? :slightly_smiling_face: операция класть у нас только для бургеров определена

pham_nuwen [00:00]  
сделать родительский ползовательский тип :slightly_smiling_face:

abbath [00:00]  
@cyril факториал на лямбдах в простом типизированном лямбда исчислении

kirill.mokevnin [00:00]  
@naphaso ха, тоже верно

[00:00]  
но типа положили уже, на этом примере проще

[00:00]  
когда надо вычислять по ним

[00:00]  
давайте начнем с проблемы

cannabiscat [00:00]  
Как будет считаться цена каждого?

kirill.mokevnin [00:01]  
почему у нас так не получится?

[00:01]  
для подсчета цены каждого у нас есть функция в каждом модуле

abbath [00:01]  
uploaded an image: Slack for Android Upload 
Add Comment

kirill.mokevnin [00:01]  
burger/getPrice(<сюда передаем бургер>) (edited)

pham_nuwen [00:01]  
функция для расчет должна принимать несколько типов данных

kirill.mokevnin [00:01]  
cola/getPrice(<сюда колу>) (edited)

cyril [00:01]  
@abbath сложно

kirill.mokevnin [00:01]  
@pham_nuwen в данном случае нет, у каждого внутри своя реализация

[00:02]  
параметрический полиморфизм тут не применим

[00:02]  
даже если вы не знаете что это такое)

abbath [00:02]  
@cyril в бесконечный тип упираемся

kirill.mokevnin [00:02]  
@pham_nuwen слово родительский тут лишнее

[00:02]  
чего в итоге мы хотим?

[00:03]  
чтобы как работала система?

[00:03]  
у нас для каждого типа своя функция

[00:03]  
если это делать в лоб, то мы будем ифами внутри рулить

naphaso [00:03]  
скатываемся на интерфейсы. давайте оторвемся от иерархии. есть типы - кола, бургеры, нагетсы. определяем операцию приведения их к типу числа. определяем её таким образом, чтобы для каждого экземпляра каждого типа она отображала его в его стоимость

kirill.mokevnin [00:03]  
в зависимости от типа вызывать разнуе функции

naphaso [00:03]  
теперь у нас есть путь преобразования всех товаров в числа

kirill.mokevnin [00:03]  
ну чо ты людям учиться не даешь

sanykey [00:03]  
оо это напоминает щас то, что Кирилл рассказывал на собрании в Мск, когда я приходил

kirill.mokevnin [00:04]  
это тоже самое один в один

rand0m [00:04]  
так тебе это повторяют и ты не запомнил?

[00:04]  
:batya:

pham_nuwen [00:04]  
надо пройтись по массиву заказа и просуммировать

kirill.mokevnin [00:04]  
@cannabiscat @alex_r @gr8web @rand0m вам же проблема понятна?

alex_r [00:04]  
>определяем операцию приведения их к типу числа
как нарисовать сову.jpg

sanykey [00:04]  
rand0m, ну я тупой просто

rand0m [00:04]  
я же говорю запомнил

[00:04]  
а не понял

sanykey [00:05]  
это невозможно запомнить не поняв

kirill.mokevnin [00:05]  
в общем мы бы хотели, чтобы язык сам определял что если тип A то надо вызывать функцию A/getPrice

[00:05]  
понятна идея?

[00:05]  
а не так чтобы мы сами ифы ставили

sashashakun [00:05]  
щас будет самая мякотка чую

cannabiscat [00:05]  
У меня накладывается на сегодняшний урок

fatwebdev [00:05]  
один в один урок

kirill.mokevnin [00:06]  
и вот мы такие радостные определяем модуль food

[00:06]  
и там делаем функцию getPrice

[00:06]  
и дальше происходит магия

[00:06]  
food/getPrice(burger)

[00:06]  
проверка на то что вы поняли

[00:06]  
что произойдет в этом случае?

[00:06]  
с учетом сказанного выше

alex_r [00:07]  
burger/getPrice)

kirill.mokevnin [00:07]  
ага, вызовется бургерский getPrice

[00:07]  
тоже самое food/getPrice(cola)

[00:07]  
и никаких ифов

[00:07]  
самое прикольное чтомы еще можем расширять функциональность не переписывая кишки

[00:07]  
добавили новый тип и оно само заработало

[00:07]  
(в этом расширяемость этого подхода) (edited)

cannabiscat [00:08]  
Таблица соответствия и все такое

kirill.mokevnin [00:08]  
и вот это и есть то самое ООП и его ценность и его смысл

[00:08]  
в теории типов оно называется полиморфизм подтипов

sanykey [00:08]  
ааааа так вот что надо было сделать. Можно немного псевдокода на эту тему?

kirill.mokevnin [00:08]  
и это не ПАРАДИГМА, это просто способ заюзать полиморфизм подтипов (edited)

[00:08]  
который нужен в реальной жизни в не более чем 20% случаев

[00:09]  
(где то статистику видел)

[00:09]  
и оно никак с фп не связано

[00:09]  
и не противоречит

[00:09]  
и не сравнимо

[00:09]  
мутабельность это все отдельно

cannabiscat [00:09]  
Саники, купи подписку

naphaso [00:09]  
по мне так слишком в практику уходим. интерфейсы и иерархия классов это просто абстракции для удобства. интерфейс - это набор отображений, каждая функция в интерфейсе это отображение одного типа на другой. это автоморфные отображения - для функций, которые ничего не возвращают, но меняют объект, неавтоморфные - для функций, которые не меняют объект, но что-то возвращают, отображение на декартовых произведениях - для функций, которые делают и то и другое

sanykey [00:10]  
я давно хотел, но на математике сильно застрял. Хотя чую надо уже после отпуска сразу брать подписку.

kirill.mokevnin [00:10]  
и реализуется этот вид полиморфизма большим количеством способов

[00:10]  
не только на классах

[00:10]  
теперь то как это происходит в реальной жизни

[00:10]  
когда вы делаете obj.getName()

rand0m [00:10]  
а зачем нужны автоморфные

kirill.mokevnin [00:10]  
внутри происходит так называемая динамическая диспетчеризация

rand0m [00:10]  
если ничего не возвращают)

kirill.mokevnin [00:11]  
поиск соответствующего типа для того чтобы определить, какую операциюприменить

[00:11]  
и на самом деле ваш вызов будет таким Burger.getName(burger)

[00:11]  
и вот этот параметр это this

[00:11]  
который вы внутри получаете нулевым аргументом

naphaso [00:11]  
@rand0m они преобразуют бургер в бургер, но уже другой бургер

kirill.mokevnin [00:11]  
что в питоне подчеркивается

[00:11]  
он не появляется внутри функции из ниоткуда

[00:11]  
просто вы не пишите этого руками

[00:12]  
и для простоты функции определяются внутри класса, что как раз дает эту привязку

[00:12]  
при этом, в подобных языках используется одиночная диспетчеризация по типу

[00:13]  
в противовес этому существуют мультидиспатч системы

[00:13]  
типа clojure

[00:13]  
оно позволяет не только по типу, но и по любому аргументу/набору аргументов, а так же по кастомной функции определять то куда идти

[00:13]  
и какую функцию вызывать

[00:14]  
@alex_r м?

[00:14]  
а наследование это просто припарка сбоку, которая чуть расширяет возможности этой системы

[00:15]  
причем если говорить про ооп по алану кею, то все что есть в современных языках (мейнстрим) и то что мы обсудили, мало имеет отношения к тому

[00:16]  
то ооп про late binding и send messages

[00:16]  
что из языков ближе всего к языку self (edited)

[00:16]  
который стал прототипом js

[00:16]  
в js все плохо с посылкой сообщений

[00:16]  
ее нет)

[00:16]  
хотя за счет Proxy в es6 ее можно сделать

rand0m [00:17]  
все стало еще запутанней

kirill.mokevnin [00:17]  
так наоборот же

[00:17]  
все разложили

[00:17]  
система типов + полиморфизм подтипов

[00:17]  
про алана кея думать не надо)

[00:17]  
это для тех кто хочет в глубь истории

alex_r [00:18]  
вот только как работает "мультидиспатч" не понятно)

fatwebdev [00:18]  
так на мой то вопрос и не ответил

kirill.mokevnin [00:18]  
причем мы все эти понятия ввели через проблематику

[00:18]  
с обоснованием (edited)

[00:18]  
http://clojure.org/reference/multimethods

[00:18]  
Clojure eschews the traditional object-oriented approach of creating a new data type for each new situation, instead preferring to build a large library of functions on a small set of types. However, Clojure fully recognizes the value of runtime polymorphism in enabling flexible and extensible system architecture. Clojure supports sophisticated runtime polymorphism through a multimethod system that supports dispatching on types, values, attributes and metadata of, and relationships between, one or more arguments.

sashashakun [00:18]  
http://risovach.ru/upload/2016/09/mem/nelzya-prosto-tak-vzyat-i-boromir-mem_124224048_orig_.jpg (45KB)

kirill.mokevnin [00:18]  
вчитайтесь в эти строки

sanykey [00:18]  
Кирилл, а можно просто видео урок на эту тему с задачами/опросником? такое надо несколько раз пересмотреть.

fatwebdev [00:19]  
@sanykey ты не поверишь

cannabiscat [00:19]  
Это мы сколько лет развития языков пробежали?

kirill.mokevnin [00:19]  
@sanykey у нас есть курс называется "программирование управляемое данными"

[00:19]  
это оно

[00:19]  
подробно с примерами и практикой

sanykey [00:19]  
о это шикарно.

kirill.mokevnin [00:20]  
@fatwebdev и @cannabiscat прямо щас его проходят

[00:20]  
и секут фишку

[00:20]  
а вообще все это написано в сикпе

naphaso [00:20]  
interface бургер {
 void добавить_помидоры();
 число количество_помидоров();
 число добавить_помидоры_и_вернуть_количество_помидоров();
 деньги стоимость();
}

это будет набор преобразований:
добавить_помидоры: бургер -> бургер, построенное таким образом, что каждому бургеру c N помидоров соответствует бургер с N+1 помидорами
количество_помидоров: бургер -> число, построенное таким образом, чтобы каждому бургеру соответствовало количество помидоров в нём
добавить_помидоры_и_вернуть_количество_помидоров: бургер -> (бургер X число) = добавить_помидоры * количество_помидоров
стоимость: бургер ->  деньги, построенное таким образом, чтобы отобрать бургер в объект денег соответствующий его стоимости

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

thadjbullet [00:20]  
как-то поверхностно уловил

[00:20]  
если уловил)

sanykey [00:20]  
до сикп надо вырасти, наверное

kirill.mokevnin [00:20]  
именно он и поможет вырасти

[00:20]  
если практику делать из книги (edited)

fatwebdev [00:20]  
так если закончили

sashashakun [00:21]  
да там мозг выворачивается в этой книге

kirill.mokevnin [00:21]  
собсно все, я очень хотел чтобы @alex_r все понял)

[00:21]  
а то слышу тут от него постоянно)

gr8web [00:21]  
))

fatwebdev [00:21]  
мой вопрос то, ты говоришь ооп и фп друзья и это хорошо, но почему тогда опп языки в императивщину больше чем в фп?

sanykey [00:21]  
alex_r наказан )

kirill.mokevnin [00:22]  
и ты @gr8web

[00:22]  
а то ересь распространяете в святом месте

[00:22]  
:smile:

alex_r [00:22]  
kirill.mokevnin  после такого я даже если снова забуду - пойду почитаю опять, чтобы меньше ереси :smile: (edited)

gr8web [00:22]  
да ладно, я никогда никому здесь за ооп не обьяснял :slightly_smiling_face:

abbath [00:22]  
Сначала читаю TaPL потом ATTaPL потом Барендрегта

kirill.mokevnin [00:22]  
в общем то что я вам выше рассказал это не "теория не про жизнь"

fatwebdev [00:22]  
@alex_r оформи в гит хороших бесед

abbath [00:22]  
А уже потом HoTT

kirill.mokevnin [00:23]  
вы просто если будете так смотреть на вещи, вы действительно увидите что зачем и почему

[00:23]  
и поймете как проектировать ваши программы

[00:23]  
и ради чего вводятся какие то абстракции

[00:23]  
@fatwebdev теперь ответ на твой вопрос

sanykey [00:23]  
abbath, напиши пожалуйста, какую литературу стоит почитать, начиная от азов? :) ну в довесок к тому, что советуют на hexlet (edited)

kirill.mokevnin [00:23]  
наш мир императивен а состояние изменяемо

naphaso [00:23]  
наследование рассматривается как “нативная”, главная и встроенная в язык связь между типами, но связей между типами может быть сколько угодно. это ориентированный граф, а не дерево типов

abbath [00:23]  
@sanykey на какую тематику?

sashashakun [00:24]  
sanykey может стоит начать с code.stepik.org? (edited)

kirill.mokevnin [00:24]  
@naphaso вот да да, эту мысль нужно всем с пеленок заносить

sanykey [00:24]  
хм, хороший вопрос )

kirill.mokevnin [00:24]  
мне еще понравилось как в сикпе авторы отозвались про наследование

sanykey [00:25]  
@sashashakun, начну

alex_r [00:25]  
sanykey так сикп с азов и начинается

rand0m [00:25]  
naphaso ужасные вещи говоришь)

kirill.mokevnin [00:25]  
"множество неадекватных онтологических теорий вылилось во множество неадекватных языков программирования"

[00:25]  
как то там они еще трактором проехались по всему этому

abbath [00:25]  
Могу посоветовать справочник зубореза

sanykey [00:25]  
abbath, грубо говоря, чтобы без проблем понимать о чём тут говорят )

naphaso [00:25]  
с деревом просто удобно работать, но оно ограничивает гибкость системы типов.

rand0m [00:26]  
дерево уже в голове

kirill.mokevnin [00:26]  
поэтому классы типов)

naphaso [00:26]  
там нет циклов, есть единственный путь вверх и вниз по дереву

rand0m [00:26]  
граф там не поместится

kirill.mokevnin [00:26]  
это кстати мега штука

abbath [00:26]  
@naphaso на практике приходится рвать анус чтобы имплементировать что-то)

[00:26]  
В Haskell нет сабтайпинга

kirill.mokevnin [00:26]  
@fatwebdev я знаю что ты ждешь, но невозможно отвлечься )

[00:27]  
а стоп, я же выше отписал

fatwebdev [00:27]  
где ? я прошляпил?

kirill.mokevnin [00:27]  
короче фп прямо во все поля это перебор, вам будет больно и сложно

[00:27]  
kirill.mokevnin [12:23 AM]  
наш мир императивен а состояние изменяемо

abbath [00:27]  
Толсто

kirill.mokevnin [00:27]  
знаете что такое мультипарадигменный язык?

[00:27]  
это не тот в котором ооп и фп

[00:27]  
эта постановка ущербна сама по себе

[00:28]  
язык должен давать удобные примитивы для работы с императивщиной и функциональщиной

abbath [00:28]  
Вот запилят пацаны Timeless Physics, вот тогда посмотрим какой мир императивный)

kirill.mokevnin [00:28]  
плюс к этому возможности для разных видов полиморфизма

[00:28]  
вот собственно

cannabiscat [00:29]  
если ооп это не наследование и не инкапсуляция, то полиморфизм?

kirill.mokevnin [00:29]  
так вот язык ориентированный на массовость должен быть императивным, но с хорошей поддержкой и возможностями писать в фп стиле там где это надо

cannabiscat [00:29]  
или вся троица

kirill.mokevnin [00:29]  
по сути да, объект как данные управляет тем что будет работаь

[00:29]  
это и есть программирование управляемое данными

[00:29]  
данные определяют функциональность

[00:29]  
но делать это можно не только через классы

[00:30]  
и инстансы

[00:30]  
можно и как в js, функцию добавить в "объект"

naphaso [00:30]  
императивная основа сегодня работает эффективнее, но врядли это будет продолжаться долго, скорее я склоняюсь к тому что языки через N лет станут чисто функциональными, но позволяющими поверх функциональности писать и в императивном стиле

kirill.mokevnin [00:30]  
и это более ооп по алану кею

cannabiscat [00:30]  
вот сейчас уже сложно))

naphaso [00:30]  
так же как в хаскелле можно писать императивно, при желании

[00:30]  
хотя по сути это все преобразуется в функциональный вид

kirill.mokevnin [00:31]  
да, оно где то по середине сойдется

[00:31]  
посмотрите на современные языки

[00:31]  
в kotlin офигенные возможности по написанию фп кода

[00:31]  
там даже есть оптимизация хвостовой рекурсии

cannabiscat [00:31]  
круто!

kirill.mokevnin [00:31]  
из всех языков (промышленных) мне кажется они ближе всех подошли к идеалу

[00:31]  
для продакшена массового

abbath [00:31]  
Можно писать императивно, но по ощущениям может быть butthurt

cannabiscat [00:32]  
надо на котлин посмотреть

kirill.mokevnin [00:32]  
кстати возьмите лиспы

[00:32]  
это не функциональные языки (edited)

[00:32]  
я видел просто сверх императивный код на лиспе

[00:32]  
прямо с циклами и всем таким

sashashakun [00:32]  
пруф?

kirill.mokevnin [00:33]  
set!

sashashakun [00:33]  
посмотрел бы

naphaso [00:33]  
ну в лиспе даже извращаться не надо, чтобы писать в императивном стиле

[00:33]  
в common lisp всмысле

[00:33]  
там все для императивщины уже есть

kirill.mokevnin [00:33]  
да, там тривиально писать как в js/ruby

abbath [00:34]  
@naphaso а HoTT уже прочитал?

beaverden [00:35]  
joined #random

fatwebdev [00:35]  
ппц мозг курс взрывает

naphaso [00:35]  
@abbath не всю, мне её только неделю назад доставили. заказывал три года назад первое издание - его потеряла почта россии. в электронном читать пытался, но было тяжело. а на бумаге идёт неплохо

fatwebdev [00:35]  
спасибо за ответы Кирилл

abbath [00:35]  
У меня есть kindle

kirill.mokevnin [00:35]  
@sashashakun прямо куски кода найти не могу, но реально просто берешь и цикл фигачишь с переменными

[00:35]  
просто в лиспе нет операции присваивания в виде знака равно

[00:35]  
есть set!

[00:36]  
а циклы пожалуйста

[00:36]  
еще и несколько видов

sashashakun [00:36]  
ну окей, я сам попробую

abbath [00:36]  
http://www.gigamonkeys.com/book/loop-for-black-belts.html

naphaso [00:36]  
делайте скриншоты, как кирилл учит плохому

kirill.mokevnin [00:36]  
@sashashakun https://clojuredocs.org/clojure.core/set!

[00:38]  
фух

[00:38]  
нежданно получилось

sashashakun [00:38]  
давненько не было такого)

sanykey [00:38]  
как всё сложно :(

kirill.mokevnin [00:38]  
сложно было до этого момента

[00:39]  
если бы тебя спросили про ооп)

sanykey [00:39]  
в голове такая каша, что я бы не смог ответить толком

cannabiscat [00:40]  
Саники, купи подписку, а то хуже будет!!

sanykey [00:40]  
ну , полагаю, что посмотрев видео - всё встанет на свои места

[00:40]  
да я же сказал, что куплю

naphaso [00:40]  
спрашивают что такое ооп - два часа рассуждаешь, час споришь и дерешся с интервьюером

sashashakun [00:41]  
просто когда на работе ты начнешь писать if чтобы определить в какую сторону повернуть код, в зависимости от того что пришло на вход, сразу вспомнишь то что тебе тут рассказали

sanykey [00:41]  
лучше сразу в драку

alex_r [00:41]  
туда же и про полиморфизм, ad-hoc не полиморфизм - "мы вам перезвоним"

[00:43]  
kirill.mokevnin большое спасибо, побольше бы такого и почаще)

[00:43]  
в этот раз почти с самого низа начали)

kirill.mokevnin [00:43]  
пожалуйте на курсы :trollface:

[00:43]  
давно мы не делали слаконаров кстати

sashashakun [00:44]  
alex_r читал беседы на гитхабе?

kirill.mokevnin [00:44]  
@naphaso помнишь раньше мы чаще делали? Может замутишь тоже?

abbath [00:44]  
uploaded an image: Slack for Android Upload 
Add Comment

kirill.mokevnin [00:44]  
я знаю что тебе есть что рассказать

[00:44]  
просимо

alex_r [00:44]  
после сегодняшнего мы как порядочные люди просто обязаны подписаться :smile:

naphaso [00:44]  
"ооп - это жалкая попытка прилепить карикатуру на теорию типов к языкам програмиирования" (edited)

kirill.mokevnin [00:44]  
в пятницу например

alex_r [00:44]  
sashashakun читал, но из головы многое вылетает...читаешь думаешь - элементарно же, а как спросят/задумаешься - ¯\_(ツ)_/¯

naphaso [00:45]  
не уверен что найду время в эту пятницу, но интересно

fatwebdev [00:45]  
> "ооп - это жалкая попытка прилепить карикатуру на теорию типов к языкам програмиирования"
господи это 10 из 10, я теперь знаю что отвечать на вопрос что такое ооп

sanykey [00:45]  
не могу подписаться до 19 числа. Я в Мск приеду - там хоть норм инет будет - смогу нормально смотреть видео

[00:46]  
со здешним инетом, смотреть видео - издевательство

fatwebdev [00:46]  
а ты не смотри

[00:46]  
просто плати

sanykey [00:46]  
а сколько стоит нынче?

sashashakun [00:46]  
а сколько есть?

sanykey [00:46]  
60к лишних

sashashakun [00:47]  
пойдет (edited)

gr8web [00:47]  
сколько не жалко

alex_r [00:47]  
просто плати все

cannabiscat [00:47]  
14 $/month

sanykey [00:47]  
хм, да не дорого впринципе

naphaso [00:47]  
я год преподавал в универе, оглядываясь на свои лекции, могу утверждать, что хоть мне и есть что рассказать, мои преподавательские скиллы оставляют желать лучшего )

sashashakun [00:48]  
так тут же не преподавание

[00:48]  
просто рассказ

sanykey [00:48]  
смотря кто слушать будет )

cannabiscat [00:48]  
ладно, доброй ночи доброму рандому, сегодня рандом постарался, а выдр ещё выпиливаться из него пытался, наивный))

sanykey [00:48]  
если рассказывать таким как я - преподавание )

[00:49]  
alex_r, кстати, тоже пытался выпилиться

fatwebdev [00:49]  
да кудаж я от вас, вы моя семья. доброй ночи надо востановится завтра нужно добить ddp (edited)

sashashakun [00:49]  
ШОК ВИДЕО! Найдет человек, в котором интернет воспитал выдру! Смотреть бесплатно без смс и регистрации!

naphaso [00:49]  
из рандома выпиливаются только посмертно

alex_r [00:50]  
это угроза? :smile:

sanykey [00:50]  
я боюсь спать ложиться. ощущение, что я завтра проснусь и всё забуду

sashashakun [00:50]  
так и будет

[00:50]  
теперь можешь спать спокойно

naphaso [00:50]  
можно трактовать на свой вкус)

gr8web [00:52]  
главное про ооп задвигал @alex_r а приписали и мне

alex_r [00:53]  
лес рубят, щепки летят...в джавистов :troll:

gr8web [00:53]  
:rage:

someone [00:54]  
а когда джавистов рубят - щепки летят? (edited)

thadjbullet [00:54]  
я так понимаю, джаваскриптеров даже не замечают?)

someone [00:54]  
джаваскриптеры - не люди

thadjbullet [00:54]  
Во

sashashakun [00:54]  
нормально же общались

[00:54]  
че ты

arslan [00:54]  
о нормальный рандом вернулся

[00:55]  
наканецта

thadjbullet [00:55]  
Норм

alex_r [00:55]  
остановитесь!

arslan [00:55]  
:batya:

someone [00:55]  
http://risovach.ru/upload/2015/09/mem/astanavites_92504530_orig_.jpg (39KB)

sashashakun [00:55]  
ооо

[00:55]  
мемасики

thadjbullet [00:56]  
А верстальщики вообще не причисляются к формам жизни?

someone [00:56]  
https://hexlet-ru.slack.com/archives/random/p1473803738016265
https://hexlet-ru.slack.com/archives/random/p1473803681016255
 sashashakun
мемасики
Posted in #randomToday at 00:55 
  sashashakun
нормально же общались
Posted in #randomToday at 00:54 

kirill.mokevnin [00:56]  
@someone только не говори что ты все это время отсутствовал)

someone [00:56]  
пришел в середине

[00:56]  
я ниндзя!

sashashakun [00:58]  
someone зачем ты меня цитируешь?) (edited)

[00:58]  
:thinking_face:

someone [00:59]  
а я вот вспоминаю, что у меня в универе был курс липо сапр

[00:59]  
надо было на него ходить :slightly_smiling_face:

sanykey [00:59]  
ну всё. я купил подписку. короче я теперь тип правильный стал )

sashashakun [00:59]  
я ходил на сапр, курс был крутой

someone [00:59]  
на что ты ходил?

sashashakun [01:00]  
но к сожалению через минут 15 после начала лекции препод скатывался в том какой был совок говно

[01:00]  
сапр

someone [01:00]  
ты ходил на систему автоматизированнго проектирования?

sanykey [01:00]  
а как расшифровывается аббревиатура?

[01:00]  
а всё

sashashakun [01:00]  
>ты ходил на систему автоматизированнго проектирования?
трололо, ты понял о чем я

someone [01:01]  
если честно - нет

abbath [01:03]  
У меня специальность САПР, посоны

sashashakun [01:03]  
я ходил на курс «системы автоматизированного проектирования»

someone [01:03]  
у меня тоже ¯\_(ツ)_/¯

sashashakun [01:03]  
а у меня нет

[01:03]  
¯\_(ツ)_/¯

abbath [01:03]  
В AutoCAD умеешь?

sashashakun [01:03]  
ну и то

someone [01:03]  
в автокад не умею

sashashakun [01:04]  
даже в юниграфикс когда то мог

abbath [01:04]  
А в SolidWorks?

sashashakun [01:04]  
тоже немного могу, но это для детей

someone [01:04]  
у нас на электронику направление было

abbath [01:04]  
Eagle?

[01:04]  
P-CAD?

someone [01:04]  
угу

sashashakun [01:04]  
такое не знаю

abbath [01:04]  
MicroCap

kirill.mokevnin [01:04]  
расскажите человеку без вышки (edited)

abbath [01:05]  
@sashashakun а что не для детей?

kirill.mokevnin [01:05]  
что делают со специальностью сапр

[01:05]  
проектируют детали?

abbath [01:05]  
Ничего)

kirill.mokevnin [01:05]  
дома?

someone [01:05]  
бургеры продают в основном

kirill.mokevnin [01:05]  
изучают хаскель?

sashashakun [01:05]  
abbath юниграфикс жи

kirill.mokevnin [01:05]  
:smile:

[01:05]  
сегодня ты гуманитарий, а завтра моешь планетарий?

abbath [01:05]  
И чем он такой хороший?

sashashakun [01:06]  
не знаю, опираюсь на выбор более опытных товарищей

thadjbullet [01:06]  
а много тут народу без вышки?

sanykey [01:07]  
Кирилл сегодня необычно долго в рандоме) (edited)

someone [01:07]  
на нашей кафедре упор был на разработку электроники и вот это вот всё - алгоритмы, применяемые в сапрах, сами сапры, основы проектирования сбис

kirill.mokevnin [01:07]  
я сижу тут потягиваю брагу яблочную, подаренную другом

abbath [01:07]  
@someone ты откуда?

kirill.mokevnin [01:07]  
семья спит, а рандом нет

[01:07]  
ощущение что пью бальзам битнер

[01:07]  
вкусняха

[01:07]  
18%

someone [01:08]  
@abbath ты про то, где  учился? Таганрогский радик

kirill.mokevnin [01:08]  
@abbath это же казаки разбойники

[01:08]  
что @someone что @sashashakun

someone [01:08]  
:smile:

[01:08]  
так-то я не отсюда :slightly_smiling_face:

[01:08]  
понаехал

abbath [01:08]  
@someone известные на весь союз епт

sashashakun [01:08]  
А я понауехал) (edited)

someone [01:09]  
@abbath чего?

kirill.mokevnin [01:09]  
@sashashakun я записал это слово

abbath [01:09]  
Виктор Михайлович Курейчик

someone [01:09]  
знаем такого

abbath [01:09]  
Так вот его много где знают

thadjbullet [01:09]  
Я знаю где не знают

someone [01:10]  
его сын - мой завкаф и дипломный руководитель

abbath [01:10]  
У меня вспоминали на теории проектирования какой-то херни

[01:10]  
Мир тесен

someone [01:10]  
а сам он у меня только дискретку вроде вел

[01:11]  
@abbath а ты откуда?

abbath [01:11]  
Издалека

someone [01:11]  
огонь

abbath [01:14]  
Такие дела

naphaso [01:15]  
ты спалился на инвайте в гуглмьюзик пять лет назад

[01:15]  
https://plus.google.com/+DanyloLizanets
 plus.google.com
Danylo Lizanets (iamweasel) - Google+
Danylo Lizanets (iamweasel) - student - Львів - Львів - Львів - Fifth year student in Lviv National Polytechnic University 

abbath [01:15]  
Чертяка)

naphaso [01:15]  
деанон

abbath [01:15]  
Дианон, дианон :smile:

[01:16]  
Да ладно, я людей на goodreads добавляю

eye [01:17]  
а я дома :slightly_smiling_face: рандом, тусня, какой сейчас сабж?

sashashakun [01:17]  
ты все пропустил:simple_smile:

abbath [01:17]  
Ты пропустил эпик о ООП?

someone [01:18]  
а в чем эпик был-то?

[01:18]  
в том, что класс - это тип?

eye [01:18]  
я не пропустил, 10к продержатся еще пару дней )

[01:18]  
видел, что Кирилл прям просвещал в рандоме

[01:18]  
поделитесь конспектом ) (edited)

someone [01:19]  
мужик, у тебя есть конспект?

[01:19]  
на, мужик, конспект

naphaso [01:19]  
и изоленту

eye [01:19]  
а изоленту зачем? там же маркеры цветные нужны

someone [01:20]  
https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSYFt7qQ18zdD-xkhG6gX4W59LVVMWl6uD1bBtrh95aJMaIR9w-1g (11KB)

[01:20]  
шакалы передают привет

abbath [01:31]  
:jackal:

ivarm [01:35]  
joined #random

someone [01:35]  
@fatwebdev https://pp.vk.me/c543108/v543108215/23f98/L65f9oMa3cM.jpg (102KB)

naphaso [01:37]  
в современных рассылках не хватает чекбокса - шлите мне всё в plaintext

kirill.mokevnin [01:37]  
@naphaso а чем твоя контора занимается?

naphaso [01:37]  
впн-сервисы разрабатываем

[01:37]  
обходим блокировки в странах третьего мира

[01:38]  
теперь и в россии тоже

someone [01:38]  
ну хз, когда мы делаем расссылку - шлем 2 версии, текст и html. а там уже как клиент отобразит, наверное

kirill.mokevnin [01:38]  
то есть ты на сетях специализируешься?

naphaso [01:39]  
сети, джава, голанг и си

abbath [01:39]  
Звучит как орудия пыток

rand0m [01:39]  
о, халявные тестовые впны завезли

[01:40]  
:trollface:

cyril [01:40]  
@naphaso где почитать как работает электронная почта?

abbath [01:40]  
@cyril в сорцах sendmail

rand0m [01:40]  
ты его с гуглом перепутал

naphaso [01:40]  
@cyril  подробнее всего в RFC спецификациях протоколов SMTP, POP3, IMAP итд

abbath [01:40]  
@cyril только конфиги не читай там, глаза выест

naphaso [01:41]  
ну что ты, конфиги sendmail это произведение искусства

[01:42]  
их стоит изучать хотябы потому что они небанальны :slightly_smiling_face:

[01:42]  
и m4 заодно

[01:42]  
тоже тот ещё срыв парадигмы

cyril [01:43]  
@naphaso мне бы иметь общее представление. Пока что почта – тёмный лес для меня.

naphaso [01:43]  
главное после прочтения забыть и не пытаться применять на практике, быть забитым насмерть коллегами это не лучший конец

rand0m [01:44]  
т.е ты предполагаешь что авторов забили коллеги

abbath [01:44]  
Вопрос: Какой пидорас изобрёл ебанутый формат конфигов Sendmail? 
Ответ: Eric Allman.

naphaso [01:46]  
@cyril в общем представлении ничего сложного, есть почтовые сервера, которые шлют между собой письма по протоколу SMTP, клиенты через них отправляют почту по тому же протоколу. поверх прикрутили веб-интерфейсы для чтения почты, всевозможные хранилища почты на серверах, возможность получать из этих хранилишь почту клиентам, всю накопившуюся по протоколу POP3, забирая и удаляя с сервера, или просто читать, оставляя на сервере по протоколу IMAP

kirill.mokevnin [01:47]  
и главное не слать почту самим

[01:47]  
aws ses как минимум

naphaso [01:47]  
потом на это накрутили кучу примочек для борьбы со спамом, подписи, SPF, DMARC итд, в которых сейчас черт ногу сломит. актуальная реальность - используем крупные публичные почтовые сервисы вроде гугловского, яндексового, для отправки рассылок используем сервисы вроде sendgrid, amazon SNS итд

someone [01:48]  
а вот интересно, большие сервисы ведь как-то добавляются в белые списки?

kirill.mokevnin [01:48]  
sns это немного другое

naphaso [01:48]  
сделать свой почтовый сервис с которого письма не будут отправляться в спам нынче это адово сложная задача

[01:48]  
но он умеет отправлять письма :slightly_smiling_face:

[01:48]  
правда без особо продвинутых плюшек

kirill.mokevnin [01:48]  
ты путаешь с ses

[01:48]  
sns это точка обмена

naphaso [01:48]  
там можно email subscriptions добавлять

[01:48]  
прямо в SNS

kirill.mokevnin [01:49]  
а, ну это оповещалки на события

[01:49]  
так то рассылка через ses

[01:49]  
и просто письма

abbath [01:49]  
Книга по sendmail - 1300 страниц

kirill.mokevnin [01:49]  
мы недавно съехали на sparkpost

[01:49]  
после того как mandrill слился с мейлчимпом

[01:49]  
туда все рванули резко

cyril [01:50]  
@naphaso вот а если взял себе VPS и отправляю с помощью sendmail – что происходит? Как получатель знает, что я – это я? Почтовый сервер получателя сравнивает хост в адресе почты и хост с которого отправили?

abbath [01:50]  
Там написано от кого

rand0m [01:50]  
вручную законекться

abbath [01:50]  
Тебе когда обычный конверт приходит

rand0m [01:50]  
увидишь)

abbath [01:50]  
Он же с буквами

rand0m [01:50]  
есть же описание

naphaso [01:51]  
у нас sendgrid сжирает $15к в месяц на рассылку почты

[01:51]  
@cyril в отправляемых письмах можно указывать любой адрес отправителя. правда есть много технологий которые позволяют проверить его достоверность уже потом

rand0m [01:52]  
сейчас такое в большинстве мест просто не примут

[01:52]  
если не сопадет

someone [01:52]  
@naphaso ~1кк писем в день?

naphaso [01:52]  
в спам скорее отправят

rand0m [01:52]  
раньше можно было к любому подрубиться и написать письмо

[01:53]  
с любым обратным)

naphaso [01:53]  
@someone примерно 20-30млн в месяц, ага

someone [01:54]  
странно, что они оптовые цены не делают за такие количества :slightly_smiling_face:

naphaso [01:55]  
делают, но они все равно высокие

kirill.mokevnin [01:55]  
а почему столько писем если vpn?

[01:55]  
или вы b2c и у вас армия пользователей?

abbath [01:56]  
Спам шлют)

sashashakun [01:56]  
кстати хз, мне не приходят

[01:56]  
письма от вас

[01:56]  
хотя может гугль фильтрует)

rand0m [01:57]  
хекслет в последние дни вроде ежедневно шлет чето

[01:57]  
:batya:

kirill.mokevnin [01:57]  
ого, что?

sashashakun [01:57]  
у меня ничего не было

rand0m [01:57]  
Живой чат и полезные ссылки

[01:57]  
Бесплатные курсы и вебинары

[01:57]  
Что и в каком порядке изучать?

[01:57]  
:kolobok:

[01:58]  
13,11,12

kirill.mokevnin [01:59]  
ты только что зарегистрировался чтоли?

rand0m [01:59]  
ну это мыло я подписал не 11

[02:00]  
чет хотел зайти, и пароль не вспомнил от старого

[02:00]  
новый зарегал а там с мейлру траблы)

kirill.mokevnin [02:00]  
а

rand0m [02:00]  
видимо отложеный пакет)

kirill.mokevnin [02:00]  
ну да, там тем кто с нуля приходит писем 5 шлется

[02:00]  
за первую еделю

rand0m [02:01]  
а ну тогда все понятно)

ivarm [02:01]  
а в слаке можно как-то запинить для себя часть беседы про ООП или только copy/paste? :slightly_smiling_face:

sashashakun [02:01]  
копипаст

[02:01]  
можешь сам себе отправить пасту

rand0m [02:01]  
вообще  что там про почту спрашивали это же основы

kirill.mokevnin [02:01]  
@ivarm https://github.com/Hexlet/hexlet-slack-archive
 GitHub
Hexlet/hexlet-slack-archive
hexlet-slack-archive - Архивы хороших бесед из Слака Хекслета 
 
 

arslan [02:02]  
это же есть в курсе

kirill.mokevnin [02:02]  
о, тут же у вас есть ярый джавист с ником на m

[02:02]  
ему полезно будет почитать сегодняшний толк

arslan [02:02]  
он и щас тут

rand0m [02:03]  
чет развилось ярых

[02:03]  
устроили тут жс вс жава

naphaso [02:03]  
“с ником на М” - звучит малость оскорбительно :slightly_smiling_face:

kirill.mokevnin [02:03]  
я просто не помню

[02:03]  
а автокомплит не подсказал (edited)

sanykey [02:03]  
Монад?

someone [02:03]  
m0nad === rand0m

kirill.mokevnin [02:03]  
не, недавно парень появился (edited)

rand0m [02:03]  
не я

someone [02:03]  
makdenis

kirill.mokevnin [02:03]  
о, точно)

rand0m [02:03]  
он про другого)

sashashakun [02:04]  
makdeniss

someone [02:04]  
инвентаризация джавистов на складе

rand0m [02:04]  
я тут вообще очень давно :smile:

kirill.mokevnin [02:04]  
я его даже как то цитировал кому то

sanykey [02:04]  
это его мы в рандоме мурыжим за джаву? :)

kirill.mokevnin [02:04]  
он в java такой текст выдал

sashashakun [02:04]  
sanykey  ты уже не следишь кого мурыжишь?))

kirill.mokevnin [02:04]  
на тему паттернов

sanykey [02:05]  
память плохая, я больше по аватаркам запоминаю

new messages
rand0m [02:05]  
с тех времен когда все было бесплатно :smile:
Clone this wiki locally
You can’t perform that action at this time.