All streams
Search
Write a publication
Pull to refresh
44
0
Роман Теличкин @Telichkin

Ленивый тимлид: https://t.me/lazy_lead

Send message

tmin10 shadek dagen и все остальные, если хотите сами поиграться с данными, то я их вытянул с сайта http://www.vybory.izbirkom.ru и сложил в репу: https://github.com/Telichkin/constitution_data


Файл all_data.json

Интересно, а "Радио Свобода", которая получает прямое финансирование от правительства США[1], будет помечена как "подконтрольная властям СМИ"? В 2019 году они получили 124 миллиона долларов, в 2020 — 87 миллионов долларов.


[1] https://web.archive.org/web/20190320121320/https://www.svoboda.org/a/29830353.html

У вас, видимо, медстрах для ЗП в 200 000 неправильно посчитан. Он должен быть 5.1% * 200 000 = 10 200. У медстраха же нет границы, с которой понижается процент, как у ПФР или соцстраха

Экран у 740 PocketBook-а очень нежный. У нас он треснул через месяц использования, причем никаких внешних повреждений не было: он не падал, на него на него ничего не роняли и не садились. Ридер просто лежал в умеренно набитой женской сумочке.


Если экран треснул — это всегда не гарантийный случай, даже если не было внешних дефектов. Замена экрана стоит 9000р.


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


Четвертый kindle живет у нас с 2011 года, и никакие падения и тем более набитые сумки его еще не смогли сломать.

А почему нативно не написать retry, зачем нужно использовать сторонние библиотеки для базовой функциональности, которая пишется один раз на весь проект?


Если хочется настраивать retry перед каждым запросом:


const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

const asyncRetry = async (asyncFn, { times, delayMs }) => {
  const lastTime = times - 1
  for (let i = 0, i < times, i++) {
    try {
     return await asyncFn()
    } catch (err) {
     if (i === lastTime) throw err
     await delay(delayMs)
    }
  }
} 

Если хочется настроить один раз в момент создания fetch-функций:


const retryable = (times, delayMs, asyncFn) => (...args) => 
  asyncRetry(() => asyncFn(...args), { times, delayMs })

const fetchUser = retryable(5, 2000, async (id) => {
  // fetch logic
}

Иногда кажется, что разработчики за модными библиотеками не замечают возможности языка.

По ссылке написано:


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



И потом давно известен феномен — когда целенаправлено работают на позицию в рейтинге, чисто формально соответствуя критериям.

Это в равной степени относится к каждой стране в рейтинге.

А по данным всемирного банка, государство делает все, чтобы бизнес было вести легче. В 2009 году Россия занимала 118 место в мире по легкости ведения бизнеса, а в 2019 уже 31[1]. По этому показателю Россия обогнала Францию, Италию и Швейцарию.


[1] https://ru.m.wikipedia.org/wiki/Рейтинг_лёгкости_ведения_бизнеса

Все комментаторы, которые пишут, что фильм художественный, а не документальный, вам художественный фильм «Движение вверх» тоже понравился? Лайки обзору BadComedian[1] не ставили?

Уже после двух серий появляется столько «почему», что дальше смотреть сложно:

— Почему в сериале все руководители, даже главврач больницы, показаны дегенератами, которые не врубаются в ситуацию?
— Почему вся молодёжь и простые работяги сразу понимают ужас трагедии?
— Почему женщина физик из Минска так быстро понимает причину аварии и неэффективность способа борьбы с последствиями?
— Почему Хомюк на собрании с Горбачёвым намного уверенней Легасова? Легасов во время своей речи мямлит и неуверенно листает отчёт, и на этой неуверенности оператор делает акцент. Хомюк говорит без запинок, никуда не смотрит, оператор показывает только ее лицо и воодушевленное лицо какой-то пожилой женщины на собрании.
— Почему все что-то делают или под дулом автомата, или за деньги?
— Почему эвакуация начинается только после фразы «сегодня в Германии детям запрещают гулять на улице» и последующего переезда камеры на советских школьников, которые бегут домой на фоне дымящейся АЭС?
— Почему зритель за точно восстановленным антуражем не замечает клюквы?
— Почему даже после слов режиссёра «We had a general standing philosophy from the beginning, which was: Accuracy is everything to us.»[2] люди продолжают прикрывать все дыры «художественностью» этого сериала?
— Почему люди думают, что Американцы, которые так радовались смерти коммунизма[3], будут показывать настоящий СССР?

[1] www.youtube.com/watch?v=1nX0kF2UwDc&feature=share
[2] www.vice.com/en_us/article/j5wbq4/craig-mazin-interview-about-chernobyl-hbo-miniseries-on-how-accurate-and-what-really-happened
[3] youtu.be/c0QG_UvLkJo?t=19m

Жаль, что Erlang довольно низкоуровневый в плане реализации ООП. Если в Smalltalk для обработки сообщения объектом достаточно создать метод с нужным селектором, то в Erlang принято сначала писать сервер, который умеет обрабатывать определенные сообщения, а потом клиент для этого сервера.


Но Erlang создавался для решения конкретных инженерных задач, и он справляется с этими задачами на ура. Очень приятный язык.

А лучше не медитировать, а пописать на Smalltalk в котором между написанием программы и ее рантаймом нет никакой разницы.


Вся любовь к типам и непонимание динамики (позднего связывания) происходят, потому что момент написания программы в текущих мейнстрим-языках статический. Перед запуском созданной системы нам сначала необходимо статически (в текстовом файле) описать ее и скомпилировать.


В современных "динамических" языках информация о "типах" доступна только в рантайме. Так как в этих языках динамичность осталась только в рантайме, но момент написания все еще статический (текстовые файлы), то создается mismatch.


Smalltalk — совсем другой фрукт. Он делает динамическим не только способ работы системы как таковой, но и принцип работы человека с системой. В Smalltalk нет файлов. Кент Бек по этому поводу сказал "I mean, source code in files; how quaint, how seventies!". Да, в Smalltalk исходный код — это текст, но он находится не в файлах.

Пробовали клавиатуру Fleksy?

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


Тема развития определенных навыков и влияние этих навыков на все остальные аспекты жизни хорошо раскрыта в книге "Peak: Secrets from the New Science of Expertise". Автор книги является также автором исследования про 10000 часов, и в этой книге он объясняет, что популярная трактовка "10000 часов практики == профессионал" является неверной.

Как только число 3 превращают в объект, к нему гвоздями прибивают какой-то один смысл

оно ограничивает наши возможности по интерпретированию числа 3 каким-то иным образом


Вам ничего не мешает добавлять любой смысл к объекту. Если в вашей ментальной модели число может быть кодом символа, отобразите это в числе:
charCode := 3 asCharCode.
charCode + 1. "Instance of CharCode didNotUnderstand #+"


Это и отличает данные от объектов: у объекта есть «смысл»/интерпретация, пользуясь Вашей терминологией, а у данных этого нет.

Пока это число 3, это просто данные, и мы можем наделять их любым смыслом


То есть данные — это все-таки что-то, что не имеет никакого смысла? Если число «3» и строка «лето» являются данными, значит ли это, что они по-сути равны как друг другу, так и абстрактному «ничего»?
В первом сообщении я задавался вопросом, на который пока что никто не ответил :(
А что такое «данные»? Как «данные» могут существовать без интерпретатора?


Смыслом, как конкретным, так и абстрактным, и числа, и объекты наделяет человек.

Как сделать так, чтобы можно было передать смысл одного и того же объекта без искажений?
Конечно у числа есть собственный смысл, я это не отрицал. Я пытался донести идею о том, что числа — это не «данные», числа — это представление определенного смысла. А компактное представление смысла с возможностью исследовать и понимать смысл через использование доступных методов (операций, возможностей) — это объект.

Предлагаю отвлечься от программирования и подумать о том, как объяснить смысл чисел, например, дельфину.
Ребенку, который не знает чисел и основ математики, будет непонятно число 3. Для такого ребенка в числе 3 нет смысла. Он не сможет интерпретировать сообщение «3 + 2», потому что не знает смысл объектов «3» и «2» и доступных у них методов вроде "+" и "-".

Хоть вы и не ответили на мои вопросы из прошлого сообщения, я все рано задам еще. Вы действительно думаете, что числа — это что-то не имеющее смысла? А если смысл всё-таки есть, то разве методы (операции, возможности) вроде "+", "-", "*", "/" существуют не для пояснения смысла, заключенного в число?
число 3 это не объект, равно как и функция sum(a,b int) не является частью/методом какого-то объекта.


А что такое число 3? Это «данные»? А что такое «данные»? Как «данные» могут существовать без интерпретатора?

Если я напишу вам сообщение «На столе три яблока», или «На столе 3 яблока», или «На столе III яблока», скорее всего, во всех трех случая вы представите себе подобное:


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

Объект — упаковка для смысла. Методы объекта — способ понимания смысла.
"Код на Smalltalk"

tableWithThreeApples := me interpret: 'На столе три яблока'

apple := tableWithThreeApples takeOneApple.
apple isFruit. "true"

numberOfApples := tableWithThreeApple howManyApplesDoYouHave.
numberOfApples = 2. "true"


Но если интерпретаторы разные, то и объекты, а значит и смысл могут быть разными. Вполне возможен такой поворот событий:
tableWithThreeApples := appleFanboy interpret: 'На столе три яблока'

apple := tableWithThreeApples takeOneApple.
apple isFruit. "false"
apple isComputer. "true"

numberOfApples := tableWithThreeApple howManyApplesDoYouHave.
numberOfApples = 2. "true"


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

Микросервис, как и объект, инкапсулирует свое состояние и позволяет общаться с собой только при помощи посылки сообщений. Объект, как и микросервис, позволяет обрабатывать сообщение любым подходящим способом: хоть с помощью функционального подхода, хоть с помощью логического. И объект, и микросервис поддерживают динамический диспатч (полиморфизм):

http get: 'microservice-1.com/apples-count'.
http get: 'microservice-2.com/apples-count'.

object1 applesCount.
object2 applesCount.

Вот здесь хорошо описано различие: https://www.stefankrause.net/wp/?p=342

В моём первом комментарии transform использовался вместо нового синтаксиса в list comprehension во всем проекте. То есть предполагалось переиспользование этой функции, а значит нужно либо вводить новую абстракцию, либо везде использовать последний вариант:

result = list(filter(filter_func, map(long_running_func, data)))


Я согласен, что абстракция не нужна, если проблема, которую решает эта абстракция, не сильно распространена в коде. Просто я исходил из предположения, что проблема сильно распространена.

Жаль, в python у коллекций нет методов map и filter, чтобы пример выше выглядел читабельнее:

result = data.map(long_running_func).filter(filter_func)


Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity