« first day (1543 days earlier)      last day (1783 days later) » 

3:38 AM
@Qwertiy прям Date.Now умеют мокать?
Покажете пример кода?
 
 
1 hour later…
4:49 AM
@PashaPash Я надеялся он придёт в чат и расскажет,, зачем ему это =) Пинг вроде проошёл. Но теперь вижу что в чате у него тоже бан. Это на всякий случай?
 
5:10 AM
Коллеги, может кто-то понимает этот непостижимый дата сайенс для меня в обсуждении meta.stackoverflow.com/q/386178/1548895 и до это в блоге stackoverflow.blog/2019/06/18/…? У меня такое ощущение, что авторы данного труда много чего напутали в причинах и следствиях, получили ложные выводы, приняли непонятные решения и т.д.
Кстати, забавно, что они обсуждение опубликовали на мете enSO, а не на главной мете, хотя изменение коснулось всех сайтов. Это демонстрация насколько "остальные сообщества" второсортны?
2
 
5:29 AM
 
 
1 hour later…
6:47 AM
@VladD Есть ли смысл рассуждать о всеприменимости строгой типизации в общем? Любое языковое средство — это всего лишь инструмент. В одних случаях она действительно сильно помогает структурировать работу над данными. В других же случаях она больше вредит из-за опасных костылей (навроде уже упомянутого насходящего преобразования). В этом случае приходится переходить к горизонтально кастуемым интерфейсам (как в COM).
А в отдельных случаях наличие контракта на типы в принципе вредит, и приходится прибегать к языкам с утиной типизацией. И это не издержки низкоуровневости, а вопрос лёгкости понямания получившегося кода.
@VadimOvchinnikov Возможно, по запарке написали не туда. Бритва Оккама подсказывает мне, что это скорее невнимательность, чем интриги и злой умысел.
@VladD Хотя, отбой. Интерфейсы, boost::variant и boost::optional - это тоже строгая типизация.
 
7:23 AM
@ߊߚߤߘ Что-то не уверен про "невнимательность":) Кстати, а что думаете насчёт содержимого?
 
@АндрейNOP насколько я знаю, да, но сам никогда не использовал, так что вряд ли пример приведу
@АндрейNOP вот что-то такое:
0
A: Unit Testing: DateTime.Now

SamuelOne clean way to do this is to inject VirtualTime. It allows you to control time. First install VirtualTime Install-Package VirtualTime That allows to, for example, make time that moves 5 times faster on all calls to DateTime.Now or UtcNow var DateTime = DateTime.Now.ToVirtualTime(5); To m...

но всё-таки немного другое
 
7:53 AM
@VadimOvchinnikov Для меня любой знак не по метке и не за модерацию выглядит не особо-то и нужным. Первые показывают компетентность, вторые нужны на модераторских выборах, а остальное максимум радует глаз.
Что думаете насчёт содержимого — гиперсмайликоз первой стадии.
@VadimOvchinnikov По статистике же сказать ничего не могу — очень легко словить ложную коррелляцию между нежеланием писать вопросы и фактом назначения знака. В посте это подаётся как причинно-следственная связь, но это надо сравнивать время последнего захода и назначения знака, а также предысторию участника (первый ли это его вопрос, и если нет, каково качество предыдущих). Не исключено, что дело не в знаке (получатель его больше не увидит), а в плохом качестве задаваемых вопросоы.
Ответ можно будет дать только по фактическим изменениям в статистике, накопленной после упразднения знака.
 
8:19 AM
@ߊߚߤߘ Тут качество не при чём, так как чаще всего плохие вопросы минусуются и/или получают комментарии, что с ними что-то не так. Знак "Бродяга" получают проигнорированные вопросы. Обычно это узкоспециализованные вопросы.
@ߊߚߤߘ Вообще меня удивляет метод решения проблемы — люди непоявляются после полного игнорирования их вопроса — а давайте просто снесём метку. Я просто удивлюсь если будут значительные изменения в статистике для людей, вопрос которых заслужил данную метку.
 
8:31 AM
Можно ли удалять метки с [вопроса](https://ru.stackoverflow.com/q/995216/339283) после того как ответы по ним уже даны?
Мне кажется, что это недопустимо. Люди потратили время и силы, дали ответы, а потом пришёл [участник](https://ru.stackoverflow.com/users/237223/alexander-semikashev) 2k+, который не давал ответов, и убрал их, в связи с другими вопросами участника. Но как это касается конкретно этого вопроса? В будущем это могло бы кому-нибудь помочь. Я внёс правку на откат, но этот же участник отклонил её. Я вообще правильно сделал? Как стоит поступать в подобных ситуациях?
Забавно, что отклонена она в связи с тем, что "Правка не соответствует исходному содержанию сообщения. Даже правки, которые призваны изменить сообщение в корне, должны быть выполнены с соблюдением идей автора сообщения." Но ведь это и было ИСХОДНОЕ содержание.
Пояснил он это тем, что существует вопрос дубликат (заданный около часа назад) и что там нет речи про Js...
 
8:48 AM
@nomnoms12 моё мнение такое: я убрал и отклонил. Вернут правку пусть так. НО если вы хоть откатили правку, то хотя бы убрали метку HTML, зачем она там?
 
@AlexanderSemikashev Я просто сделал откат. Насчёт метки html, да, её стоит убрать. Думаю, вопрос исчерпан.
 
9:40 AM
С двух аккаунтов задан одинаковый вопрос.
 
10:40 AM
@Qwertiy Это те, которые подменяют host, и грузят свои библиотеки вместо системных? Потому что я не вижу другого надёжного метода подмены статической функции.
@ߊߚߤߘ Нет, конечно. Существуют ситуации, в которых строгая типизация скорее вредит. Но тут вопрос скорее в том, (1) какая у нас типизация по умолчанию, и (2) насколько легко переключаться между видами типизации? Мой пойнт в том, что в большинстве случаем жёсткая типизация — благо.
В JS самом по себе жёсткой типизации вовсе нету, верно? Там даже нельзя контролировать, сколько аргументов передаётся в функцию (что немедленно приводит к проблемам вида .map(parseInt)). Возможно, есть какие-нибудь фреймворки, которые помогают? Или руками, всё руками?
 
@AK семейство Смирновых?
 
А шо за проблемы с .map(parseInt) ?
 
И почему именно объединить, а не просто удалить марионеток? Это ведь обычно практикуется?
 
A K
@АндрейNOP Ага. Сначала двоих увидели, а приглядевшись - ещё одного.
@ʞɔᴉNɹǝꓥ Их даже трое, а не двое.
 
@VladD Ну и что значит нельзя контролировать сколько аргументов передается в функцию. Просто функции принимают сколько угодно аргументов, типа списка, который можно измерить, проитерировать и все такое, це фича жи
 
A K
11:18 AM
@АндрейNOP Я ещё молодой модератор, только учусь
 
@VladD а в этих ваших шарпах, если понадобится новый аргумент - придется менять сигнатуру функции и ВСЕ переписывать =)
 
@VladimirGamalyan Менять сигнатуру функции — разумеется. И при этом все те куски кода, которые до сих пор передают неправильное количество аргументов, перестанут компилироваться. Таким образом, вы просто не сможете запустить неправильный код.
Менять сигнатуру функции придётся и в js, если что
 
@VladD Не обязательно же
 
@VladimirGamalyan ну вот по-вашему, что возвращает код ['1', '7', '11'].map(parseInt)? он компилируется и выполняется без ошибки. чур не пробовать
 
@VladD Да, здесь вы выиграваете на обнаружении ошибки (плюс), проигрываете на цене сопровождения/модификации (разницу пускаем на доп. тесты)
@VladD это на каком изыке?
 
11:27 AM
@VladimirGamalyan через массив аргументов в подавляющем большинстве случаев никто не обращается
@VladimirGamalyan на js, конечно
@VladimirGamalyan цена сопровождения? это дописать один аргумент в список аргументов? это большая цена, вы серьёзно?
 
@VladD в подаваляющем большинстве случаев такими извращениями на js занимаются только лишь йуниоры
 
@VladimirGamalyan тем не менее, количество wtf на js зашкаливает
а сениоры пишут цикл фор?
но всё же, что возвращает код?
 
@VladD не могу найти подвоха ))
@VladD через лямду скорее и map
 
@VladimirGamalyan тогда выполните его и скажите, ожидали ли вы такой результат
 
@VladD а, типа что два аргумента parseInt принимает?
 
11:33 AM
@VladimirGamalyan ага, а map принимает функцию с тремя
внезапно :)
 
типизация, проверка количества аргументов... и так сойдёт!
 
@АндрейNOP ну я ж говорю, был бы опыт написали бы как ['1', '7', '11'].map(x => parseInt(x)) )
 
@VladimirGamalyan т. е. даже для таких вещей нужен опыт?
вы считаете это нормой?
 
@АндрейNOP ну конеш, один раз тест не прошел, следующий раз будешь знать )
 
тогда у C# куда более низкий порог входа: он отлавливает такие проблемы самостоятельно
 
11:36 AM
@VladD это понятно, но какой ценой
 
хотя, проблема, в этом конкретном примере, конечно, раздута и фиксится за пару минут чтением документации
 
@VladimirGamalyan ценой невозможности запустить некорректную программу?
 
@VladD ценой долгой и нудной проработки архитектуры, иерархии классов и интерфейсов
 
@АндрейNOP проблема в том, что то, что должен отловить компилятор. он не отлавдливает. часто это «и так сойдёт». за исключением тех случаев, когда не сойдёт
 
@VladD стат. анализаторы не считаются?
 
11:37 AM
@VladimirGamalyan зачем? передать вргумент в функцию — никакой архитектуры не нужно
@VladimirGamalyan не-а
 
@VladD ну как бы этот язык заявляет, что компилятор схавает всё, так что это нормальное поведение
 
они отлавливают процентов 10 проблем
 
да и компилятора как бы нет вообще
 
@АндрейNOP поведение компилятора — да, он соответствует спеке. но спека неадекватна
 
@VladD так мы же про вообщем говорим, а не про контроль аргументов (который в том же js неплохо реализован внешними инструментами)
 
11:39 AM
@VladimirGamalyan а что, стат. анализатор отлавливает map(parseInt)?
это ж с точки зрения js законный код
@VladimirGamalyan и вообще для простых программ на C# архитектура не нужна, а что? ну и контроль аргументов не требует никакой архитектуры, так что не знаю, откуда тема архитектуры появилась в обсуждении
 
ви просто на питоне не писали )
 
@АндрейNOP проблема в подходе (точнее, его отсутствии) pit of success. хороший язык делает сложным написание неправильного кода
@VladimirGamalyan грешен!
 
@VladD да, согласен, но здесь мы имеем некомпилируемый скриптовый язык, который должен работать быстро, поэтому много проверок интерпретатор просто не делает ради производительности
Имхо, должны быть инструменты для проверки кода на странность до его публикации
 
Кстати, на шарпе разве не так работало бы? (если бы map принимал ф-ию с тремя аргументами, а parseInt позволяла бы неограниченое кол-во аргументов задавать)
 
они наверное и есть, не знаю
что-то вроде тех же стат. анализаторов
@VladimirGamalyan неограниченое кол-во аргументов — это как?
 
11:47 AM
@АндрейNOP ну список например, или через перегрузку
 
@VladimirGamalyan ок, зачем?
я могу представить 2 перегрузки: с одним и с двумя параметрами
 
@АндрейNOP не важно, в js ведь сделали, значит кому то нужно было (хотя и спорное решение конечно)
 
@VladimirGamalyan что в js сделали?
parseInt с неограниченным числом аргументов?
 
@АндрейNOP агась
 
нет не сделали, это подстава от платформы
 
11:49 AM
с тремя вернее
 
если бы было возможным ограничить, наверняка ограничили бы
 
@АндрейNOP в легкую можно было бы на входе в parseInt поставить assert( arguments.length == 3)
или 2, не суть, просто принцип хотел описать
тоже и в реализации map
 
можно, да
 
или вообще undersore/lodash использовать, где эти архаичные болячки полечены
 
но это не оч. в каждой функции делать assert
 
11:54 AM
@АндрейNOP вариант с аннотацией сигнатуры функции map и parseInt для стат анализатора устроит? (чуть больше писанины чем просто тип прописать в шарпе, да)
 
12:23 PM
@АндрейNOP как скриптовый — да. но это плохо масштабируется, поэтому для больших приложений типа gmail'а нужен более подходящий язык
@VladimirGamalyan ... и то же в начале каждой функции, и ещё и ассерты с типами
и получим как в C#, только проверка всё равно во время выполнения
 
12:43 PM
Ну как бы понятно что с типизацией аргументов и фиксированной сигнатурой бесплатно получаем некоторые проверки на этапе сборки. Но этих ошибок настолько мало (если специально из не искать), что имхо овчинка выделки не стоит (постоянного подпиливания чтобы круглое в квадратное просунуть).
Опять же, в том же js/python опционально можно задействовать проверки типов аргументов ДО выполнения.
 
A K
1:21 PM
@VladimirGamalyan типизация аргументов - думаю, это значительная часть всех типизаций, если не вся. Т.е. фактически ваш тезис, что типизация не нужна.
 
1:42 PM
@AK всего лишь хочу сказать, что по опыту и того и сего, на питоне гораздо быстрее и проще короткие/средние прожки писать и отлаживать.
 
 
5 hours later…
6:32 PM
@АндрейNOP Может это вообще три брата помогают друг другу ))
 
6:53 PM
@VladD не знаю, как оно устроено, но вроде вызов функции можно перехватить и что-то там сделать
 
7:15 PM
@Qwertiy Хм, странно. А можно ссылку? Без IL-weaver'а или нестандартного хоста не представляю себе, как такое сделать.
 
7:47 PM
Тоже сомневаюсь, проще метод переписать так, чтобы он дату извне получал
 
@VladD к сожалению, не помню
 

« first day (1543 days earlier)      last day (1783 days later) »