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

A K
1:48 AM
Никто не пробовал создавать личное облако? Неспешно подумываю о том, что пора подымать своё облако, но не уверен, что есть какие-то продукты, которые сумеют честно собраться в распределённый кластер. Много видел каких-то инструкций и how to на хабре "как настроить ownCloud", но ни разу не видел, чтобы в подобных инструкциях собирали одну машину дома, одну в Америке, одну у русского хостера - и чтобы все три держали одно и то же облако и синхронизировались друг с другом.
 
 
7 hours later…
avp
9:13 AM
Путь в ад. tproger.ru/translations/cpp-surprising-features/… -- хороший обзор С++ 11-17. Замечательно показывает с чем вы столкнетесь при попытках модифицировать чужие (или свои через несколько лет) программы
@AK что и как именно синхронизировалось?
 
A K
@avp ну, файлы а-ля дропбокс - это минимум, остальное некритично.
 
avp
@AK а-ля дропбокс, это те, которые через http-сервер меняют?
Если так, то при выполнении локально надо переслать тот-же запрос на остальные узлы (остался момент с выключенным узлом)
Но это не честная синхронизация
Честная требует установки блокировок на доступ к данным по всем узлам, обновление по всем узлам, потом снятие. И поехали.
Для межконтинентального кластера очень медленно.
У HPE есть решение на уровне DataArray-ев и выделенных каналов (точно не помню, но где-то от 100K$)
 
9:55 AM
@Athari просто нужно опрашивать не на Хабре. Там ссылка на тостер прямо в меню, естественно у него узнаваемость будет выше.
 
 
2 hours later…
11:30 AM
@AK Я никогда не воспринимал сайты Тематических Медиа как жёстко связанные платформой. Хабр в Рунете вне конкуренции как технический сайт. Его читают все, а не поклонники Тостера и Тематических Медиа.
@PashaPash Вопрос был не про узнаваемость ("знаете ли вы, что это такое"), а про использование ("задаёте ли вопрос там, когда не гуглится").
 
avp
11:44 AM
@Athari но голосовать же могут только зарегистрированные на хабре?
 
@avp Да. Порог на голосование в опросах, насколько я понимаю, ниже, чем на голосование за посты и карму. Похоже, голосование доступно даже R/O аккаунтам. Но что из этого следует, по-вашему?
 
avp
@Athari из этого следует, что 99% читателей даже не пытались там кликать
 
@avp Ну да, опрос среди тех продвинутых читателей, кто в состоянии нажать кнопку регистрации на Хабре. Как регистрация должна коррелировать с предпочтениями, на каком сайте задавать вопрос?
@avp 95%, если быть точнее. 639 проголосовало, 86 воздержалось, 15 600 посетило страницу.
 
avp
@Athari ага, из этого следует, что я оценивал популярность хабра в 5 раз выше, чем показало данное измерение
@Athari зачем человеку это надо?
 
@avp Обычно на сайте регистрируются, чтобы получить доступ к большему числу функций.
@avp Не уловил вашу мысль. Разверните её, пожалуйста.
 
avp
12:00 PM
@Athari вот мне, например, зачем это? Читать я и так могу. Писать? Когда я представляю, сколько усилий требует оформление статьи на хабре, у меня сразу желание пропадает
@Athari перед этим я написал -- 99% (1 из 100). По вашим подсчетам 95% (5 из 100). Вот и 5 раз
 
@avp Комментировать можно. Добавлять в избранное. Голосовать. Вести личную пересылку. Ну ОК, вам это неинтересно. Но как это коррелирует с предпочтением Toster vs RuSO?
 
avp
@Athari предпочтение среди зареганных на хабре (и все)
@Athari хотите сказать, что можно зарегистрироваться и дальше без всяких ограничений писать во всех комментариях?
 
@Athari статью на хабре толком не читал, но мелькнула мысль, что на Lurkmore было бы веселее описать все эти драмы (на манер lurkmore.to/%D0%A5%D0%B0%D0%B1%D1%80)
 
@avp Э... Не уверен, что точно уловил логическую цепочку, но отмечу, что на количество просмотров статьи влияет её оценка. Оценка моей статьи была на грани захабренности, потому что подобный жанр не пользуется популярностью среди хабравчан, поэтому статья не вышла на главную страницу, поэтому её увидело меньше народа, чем могло бы. Впрочем, они светилась в сайдбарах за счёт просмотров и комментариев. Мне сложно понять новую систему популярности статей.
 
@avp Не, там надо караулить статью, иначе по истечении некоторого времени не дадут коментировать..
@Athari опять же, читать было не так интересно, ибо действующие лица были обезличины, это, кстати, требования хабра?
 
12:08 PM
@avp В целом — да. Ваши первые комментарии будут проходить премодерацию, насколько я понимаю (одобрить комментарии могут модераторы и авторы статей), но потом можно комментировать свободно. Если уйти в минусы по карме, то возникнут ограничения на частоту, с какой можно постить комментарии.
@avp Выборка программистов среди читателей Хабра — это не выборка русскоговорящих среди посетителей Яндекса. Не вижу причин для заведомой перекошенности в пользу Тостера.
@VladimirGamalyan Для Лурка подобные разборки слишком локальны, по-моему. Если бы там была статья про SO, можно было бы добавить раздельчик про драмы, а писать про драму на пустом месте не выйдет.
 
@Athari Ага, тож поискал, не нашел отдельной ruso статьи (
 
avp
@Athari вполне вероятно, что такой же опрос в другом месте даст тот же результат. Осталось проверить -)
 
@VladimirGamalyan Я не называл имён модераторов, но я просто не видел в этом смысла. Ну и зазывать вооружённые вилами толпы в профили конкретных людей я не считаю уместным. Любой участник драм и так поймёт, о ком речь, а остальным читателям имена ничего не скажут. Николаса я назвал по имени, но он и так виден из всех блогов.
 
12:24 PM
@Athari Мне казалось что вы как раз боролись с подходом "не обсуждаем конкретных участников, обсуждаем абстрактные действия".
 
@VladimirGamalyan Это имеет смысл, когда действительно происходит какая-то борьба, спор по существу, обсуждение среди участкников — на Мете ли, в чате ли. А статья — так, фастфуд для масс и крик души. Я не воспринимаю её как средство на что-то повлиять.
2
Слушайте, я тут читаю один пост на англомете, и там упомянули главную страницу большого SO. Я открыл анонимное окошко в браузере, ввёл адрес... и у меня отвисла челюсть, если не сказать больше. Кручу страницу туда-сюда — и не могу понять, что это такое.
6
 
@Athari А шо там. Обычный лендинг, так же и было вроде?
 
@VladimirGamalyan Я всегда думал, что на главной странице список вопросов. А не список цен для ынтырпрайза.
 
avp
@Athari в самом деле, странно. Чтобы добраться до списка вопросов пришлось покликать (причем, я-то примерно представлял на что, а новый человек ... наверное просто закроет окно и уйдет)
 
@avp Может они замерили приходы с гугла против поиска с главной
 
12:39 PM
Что-то у меня ощущения, что скоро придётся писать вторую статью — уже про большой SO...
 
@Athari что, и там нет демократии? :)
@Athari продались за деньги корпорациям?
 
@PashaPash Не, там народ не про демократию пишет. Много текста, я ещё не вник в новый виток драмы.
 
12:58 PM
@Athari поделитесь ссылкой?
 
@PashaPash Выше ссылку кинул, дальше по ссылкам в комментариях хожу.
 
@Athari или вы про пост на англомете выше?
А, ок
 
avp
@VladimirGamalyan не знаю, кто что и как меряет, но чувствую, пора закрывать всю эту лавочку (интернет) и делать новую (то же, но для своих)
 
@avp аминь )
 
avp
1:15 PM
@VladimirGamalyan осталось придумать, как использовать помехи в канале для передачи данных...
 
1:26 PM
@VladimirGamalyan Это да, этого стоило ожидать.
@VladimirGamalyan О, это классно! Всё-таки js даёт экстремальные возможности по отстрелу собственных конечностей.
@VladimirGamalyan А какой в этом профит? Ну можно случайно скормить одной и той же функции объекты, в которых есть метод draw() с семантикой «нарисовать», метод draw() с семантикой «объявить ничью» и метод draw() с семантикой «вытаскивать» (пистолет, например) :-P
Если я планирую нужные методы для объекта, добавление интерфейса — вопрос одной минуты, тут я особых выгод по скорости не вижу, а выразительность страдает.
Вот где Питон даст фору C#, это, например, идиоматически реализованный метод MultiZip (который тупл последовательностей превращает в последовательность туплов).
 
@VladD в шарпе на этот случай нет какогото "any" типа? ну или чтото вроде женериков (не силен)
 
@avp Классная мысль, кстати. Потому что длину кода нужно измерять не в строчках, а в идеях.
2
@VladimirGamalyan Интерфейсы с генерик-ограничениями :-\ Ну или нетипизированный object (но как с ним работать?)
 
@VladD в простом случае - да, не много профита, а когда данные куда то еще будут пропихиваться по цепочке вызовов, через несколько библиотек разных авторов, тут уж начинаются пляски когда нужно знать типы заранее
 
2:29 PM
@VladD В плюсах есть variadic templates, которые, подозреваю, позволят реализовать MultiZip относительно идиоматически. Правда, насколько я слышал, компиляция variadic templates — закат солнца вручную (рекурсия на стадии компиляции и прочее), и по этой причине всё не так радужно.
 
 
2 hours later…
4:52 PM
К чему такая агрессия? И по поводу стака: chabanovsky.com/2015/10/… - "Stack Overflow – самоорганизующееся сообщество профессиональных разработчиков". В связи с этим тогда возникает много вопросов: например почему вопросы подобные текущему допускаются? Это же не проф. И могу вам сказать - что своим текущим поведением и ответом ведёте себя не профессионально. — Сергей Мишин 2 hours ago
Скажите мне, в чём я неправ? С каких пор у нас отвечать на вопросы - это плохо?
 
avp
5:08 PM
@vp_arth imho правы. Просто еще один вахтер, желающий всех построить по своему ранжиру завелся на наших просторах
 
5:46 PM
@VladimirGamalyan простите, а почему в C# придётся наследовать от DrawInterface? Такое ощущение, что реализация интерфейса - это что-то плохое...
 
5:59 PM
@PavelMayorov интерфейсы плохо работают в языках без утиной типизации. Всё время приходится писать адаптеры для одинаковых интерфейсов из разных библиотек.
 
@vp_arth и почему это плохо? Это ведь и есть суть статической типизации и назначение интерфейсов в ООП?
 
@PavelMayorov не то, чтобы совсем уж "плохое" (некоторые плюсы в этом определенно есть, в частности проверки во время сборки), но все таки лишняя писанина (теряем время), с последующим неукоснительным следованиям (теряем гибкость)
 
@vp_arth одинаковыми интерфейсы в разных библиотеках могут стать только в тривиальных случаях
А в таких ситуациях можно вместо интерфейсов вообще делегаты использовать...
 
@PavelMayorov в основном проблемы возникают с логгерами) У каждого первого свой интерфейс логгера, под который приходится адаптировать используемую логирующую библиотеку)
 
@VladimirGamalyan ну не знаю. Для меня implements Drawable - часть самодокументации кода. Если ее не писать - потеряется информация что это за класс и что он тут вообще делает.
 
6:10 PM
@vp_arth иметь свой интерфейс логгера - это нормально же, какие с этим проблемы?
 
@vp_arth у логгеров интерфейсы совпадают тоже только в тривиальных случаях...
 
@tym32167 да нет, всё нормально. Просто меня напрягает, что абсолютно одинаковые контракты(интерфейсы) не совместимы. Утиной типизации хочется в этом плане)
 
6:35 PM
Львиная доля паттернов из банды четырех также становится бессмысленной и беспощадной ненужной, стоит только отказаться от статической типизации
 
@VladimirGamalyan неудивительно, они ведь для статически типизированных языков придуманы :)
 
@VladimirGamalyan да ладно... Как вы откажетесь от фабрики? А от Строителя? А от Фабричного Метода? В общем, найдите хоть один "ненужный" паттерн - я не нашел.
 
@PavelMayorov итератор :)
 
Вот от чего можно отказаться - так это от части абстрактных классов / интерфейсов внутри этих паттернов.
@tym32167 И чем же вы его замените?
 
@PavelMayorov адаптер ещё например
 
6:42 PM
@tym32167 а чем вы замените адаптер в ситуации, когда у методов разные сигнатуры?
 
@PavelMayorov в JS вроде нет IEnumerable, а в плане адаптера - если разные сигнатуры, то придется применять, если одинаковые, то не придется, это ж очевидно
кстати, в C# же таки есть немного утизны с foreach или await, но это больше исключения
 
@tym32167 ну так раз паттерн придется применять, значит он нужен?
Кстати, Symbol.iterator в JS таки есть.
 
@PavelMayorov ну с адаптером я имел ввиду конечно только случаи одинаковыми сигнатурами
 
@tym32167 это слишком частный случай.
 
@PavelMayorov ну и пусть :)
@PavelMayorov ну в смысле, я с вами не спорю, вы для меня авторитет, я потому если вы говорите, что я не прав, я лучше ещё раз над своей позицией подумаю, чем сразу возражать )
 
6:55 PM
@VladimirGamalyan Библиотеки — да, обычно не умеют делать хорошие интерфейсы. Вот в WPF решили привязки делать «утиными» — по имени.
@Athari думаю, там получится ещё длиннее, чем на C#
Шаблонная магия ужасно многословна
 
@VladD Длинно и нечитаемо — да. Но в шарпе вообще понадобится копипаста, не?
 
@Athari кодогенерация, благо T4 имеется. Правда, тут еще вопрос что менее читаемо...
 
@PavelMayorov Это внеязыковое решение.
 
@Athari ну, шаблоны T4 все же основаны на C#, так что нового языка учить не понадобится. Для сравнения, попытка применить T4 к программе на C++ потребует знать два разных языка...
 
@PavelMayorov Т4 в той же мере основан на VB. Ну и ничто не мешает писать шаблоны на JS, например.
 
7:05 PM
@vp_arth Хм, а как они работают в языках с утиной типизацией? Одна библиотека хочет функцию Draw(), другая ожидает OutputToContext(LibraryContext ctx), третья посылает WM_PAINT — адаптеров вам не избежать, верно? Но только теперь никто не подскажет, что адаптер необходим.
@PavelMayorov Ну, я обычно применяю паттерны не по GoF, а пишу нечто близкое самостоятельно. Назвать это тем же паттерном или нет, вопрос вкуса. Например, при реализации Builder я не определяю IBuilder — это всё ещё тот паттерн, или уже нет?
 
@VladD я же написал, для одинаковых интерфейсов Log(int verbosity, String msg), например. Для разных интерфейсов вопросов нет.
 
@Athari однако ж, ни один из этих языков (C#, VB, JS) не является С++...
 
@Athari Не, не понадобится. В Шарпе вместо кортежей идиоматически IEnumerable<T>, и получится сигнатура IEnumerable<R> MultiZip<T, R>(IEnumerable<IEnumerable<T>> sequences, Func<IEnumerable<T>, R> resultSelector)
 
@VladD А как же туплы?
 
@vp_arth это уже слишком конкретная функция: в другой библиотеке вместо int запросто может быть перечисление Loglevel. Или такой же int, но нумерация уровней будет другой. Второй случай даже хуже: структурная типизация вам не подскажет что что-то не так...
 
7:12 PM
@vp_arth Это да, но ведь одинаковых интерфейсов на практике не бывает? у вас всегда будет не int verbosity, а MyLibrary.Verbosity verbosity
@Athari Пока я не видел решений с туплами, поэтому боюсь называть их идиоматичными для этой задачи. Но в принципе, если мы откажемся от известой доли эффективности, можно возъюзать ITuple docs.microsoft.com/en-us/dotnet/api/…
 
@VladD метод IEnumerable<R> MultiZip<T1, T2, T3, R>(IEnumerable<T1> source1, IEnumerable<T1> source2, IEnumerable<T1> source3, Func<T1, T2, T3, R> resultSelector) менее универсален, но более полезен...
 
@PavelMayorov Это да, но само универсальное объявление для произвольного набора произвольных типов элементов коллекций покамест невозможно (ну или я не знаю, как)
 
@VladD А как это с фенечками value туплов будет взаимодействовать, типа именованных полей?
 
@tym32167 «утизна» :)
 
@Athari по идее никак
 
7:17 PM
@Athari Никак, насколько я понимаю. И я даже не знаю, что нужно подкрутить в языке, чтобы это стало возможно.
Хотя, рефлексия?
Не, стоп, отставить, имён полей там нет
 
@VladD а она тут как поможет?
@VladD Item1, Item2 и т.д. :)
 
С именами элементов туплов полное erasure
Жаль
 
7:36 PM
@Athari Но это и не нужно (тм), если есть resultSelector
 
@PavelMayorov Так а зачем фабрика нужна, если просто необходимости не возникнет создавать в единой точке объекты имеющие общего предка
 
@VladimirGamalyan а без общего предка, просто с одинаковым интерфейсом (не отраженным в коде)?
 
@tym32167 умный_авромериканец.jpg =)
 
@VladD нужно-нужно. Только не получится.
 
@PavelMayorov Естественно, эти лишние родители-интерфейсы не нужны ведь
 
7:38 PM
@VladimirGamalyan у так фабрика нужна или нет?
 
@PavelMayorov просто создающая любые объекты (а не по задумке - с определенным интерфейсом) ? Это уже не каноничная фабрика же будет.
 
@VladimirGamalyan ну да (с точки зрения языка любые, с точки зрения программиста там будет какой-то смысл)
 
@PavelMayorov А в какой ситуации нужно?
 
@VladimirGamalyan Отличие от "каноничной" фабрики - лишь в том, что интерфейсы не декларируются, а подразумеваются (ибо их нет в языке)
@VladD Ну вот я хочу такую сигнатурку: IEnumerable<R> Zip<???>((IEnumerable<T1> foo, IEnumerable<T2> bar) sequences, Func<(T1 foo, T2 bar), R> resultSelector)...
 
@PavelMayorov ну так Zip<T1,T2,R>?
 
7:48 PM
@Grundy Zip<T1,T2,R,foo,bar> :-)
 
@PavelMayorov а foo bar зачем?:) это ж не типы :)
 
@PavelMayorov Ну тут можно foo и bar выкинуть, из-за erasure они не понадобятся
 
@PavelMayorov Чесн говоря плохо представляю зачем кому-то понадобится создавать фабрику в питоне (какая задача бы этим решалась)
 
static IEnumerable<R> Zip<T1, T2, R>((IEnumerable<T1> foo, IEnumerable<T2> bar) sequences, Func<(T1 foo, T2 bar), R> resultSelector)
{
    using (IEnumerator<T1> it1 = sequences.foo.GetEnumerator())
    using (IEnumerator<T2> it2 = sequences.bar.GetEnumerator())
    {
        while (it1.MoveNext() && it2.MoveNext())
            yield return resultSelector((it1.Current, it2.Current));
    }
}
или там
static IEnumerable<R> Zip<T1, T2, R>((IEnumerable<T1>, IEnumerable<T2>) sequences, Func<(T1, T2), R> resultSelector)
{
    using (IEnumerator<T1> it1 = sequences.Item1.GetEnumerator())
    using (IEnumerator<T2> it2 = sequences.Item2.GetEnumerator())
    {
        while (it1.MoveNext() && it2.MoveNext())
            yield return resultSelector((it1.Current, it2.Current));
    }
}
 
@VladimirGamalyan представьте что в Питоне нет функций первого класса (ведь их наличие или отсутствие не имеет отношение к типизации) и подумайте еще раз...
 
7:52 PM
будет работать с любым foo и bar
вот если foo и bar нужны в возвращаемом значении, тогда ой
 
@VladD ну да, соглашусь. Я хотел вывод имен аргументов, но потом вспомнил что эти имена "работают" только когда += пишешь, т.е. для resultSelector они бесполезны.
 
@PavelMayorov Почему же не имеет, со статической типизацией вы бы не смогли просто передать в функцию произвольный класс. (но соглашусь, если бы не ф-ии первого класса, пришлось бы фабриковать, да).
 
Ой. А может кто-то объяснить, как это работает?
static void Main()
{
    var t = Id((x: 1, y: 2));
    Console.WriteLine(t.x);
}

static T Id<T>(T t) => t;
почему тип t не стёрся?
 
@VladimirGamalyan как не могу? В C#, к примеру, могу.
 
@VladD а почему он должен стереться?:)
 
7:58 PM
@VladD А почему он должен стереться?
 
@PavelMayorov Ну, в типе нету информации об именах, по крайней мере с точки зрения рефлексии.
@Grundy ^^
 
@VladD а тут и не рефлексия используется ведь. Это по идее плюшки IDE/компилятора а не языка
 
@VladD Это в рантайме её нету. А с точки зрения C# (int x, int y) и ValueTuple<int,int> - два разных (но совместимых) типа
То же самое с object и dynamic.
 
@PavelMayorov О, это отличная аналогия
@Grundy Вижу, да
 
8:20 PM
Интересно, можно ли написать функцию bool IsCompileTimeEqualType<T1, T2>(), которая будет считать одинаковыми типы (int x, int y) и (int x, int y), но не (int x, int y) и (int, int) или там (int p, int q)?
 
8:53 PM
@VladD там разве атрибут с именем не навешивается?
 
0
Q: Вышибло из стека

doox911Перешел на страницу вопроса и я не увидел кнопки "Править"!, Подправив ответ kidar2 обнаружил, что я разлогинен. Что могло пойти не так?

 
Есть же какой-то TupleElementNamesAttribute
Хм
public abstract class Base
{
    public abstract (int a, int b) Foo();
    public abstract (int, int) Bar();
}

public class Derived : Base
{
    // Error: Cannot change tuple element names when overriding method
    public override (int c, int d) Foo() => (1, 2);
    // Error: Cannot change tuple element names when overriding method
    public override (int a, int b) Bar() => (1, 2);
}
Не задумывался раньше, но деконструктор может быть методом расширения о_О
 
9:29 PM
@АндрейNOP а почему нет?
 
9:52 PM
@АндрейNOP Так вроде есть только у полей и аргументов функций: sharplab.io/…
 
10:27 PM
Интересно, кто-нибудь ожидал это: sharplab.io/… ?
 
11:02 PM
@VladD @Grundy ожидал, а что там?:)
 

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