Home
Обсуждение программирования на любых платформах
codingteam@conference.jabber.ru
Вторник, 19 февраля 2019< ^ >
m4n71k0r установил(а) тему: C, C#, C++, Clojure, Cobol, Common Lisp, D, Erlang, F#, Go, Groovy, Haskell, Java, JavaScript, Kotlin, MATLAB, OCaml, PowerShell, Python, R, Racket, Refal, Ruby, Rust, Scala, Scheme, TypeScript
Telegram channel: https://t.me/codingteam
HQ, логи: https://codingteam.org.ru/
Код постить сюда: http://lpaste.net/
Юным погромцам сюда: http://e-maxx.ru/algo/ , а ещё читать Кнутца, Корменца, Седжвикца и др.
Let's Dev (когда Капитан на мостике): http://www.youtube.com/playlist?list=PLK6mcZkmN4QTusFvp_0GVtscQbCiIg81Y
Tsoding: https://tsoding.github.io/schedule.html
http://i.imgur.com/slnyI6a.jpg
Упоминания о Flash, PHP, Pascal/Delphi/Borland, Basic, 1С караются съедением поциента.
Конфигурация комнаты
Участники комнаты

GMT+3
[02:21:05] uıʃɐɟ∀ вышел(а) из комнаты: Replaced by new connection
[02:21:08] uıʃɐɟ∀ вошёл(а) в комнату
[02:25:28] uıʃɐɟ∀ вышел(а) из комнаты: Replaced by new connection
[02:25:32] uıʃɐɟ∀ вошёл(а) в комнату
[03:15:49] uıʃɐɟ∀ вышел(а) из комнаты: Replaced by new connection
[03:15:52] uıʃɐɟ∀ вошёл(а) в комнату
[03:40:28] uıʃɐɟ∀ вышел(а) из комнаты
[03:42:18] uıʃɐɟ∀ вошёл(а) в комнату
[04:46:40] matraskin вошёл(а) в комнату
[05:33:08] HazardPointer вышел(а) из комнаты
[06:30:02] <codenull> Сколько берут за починку?
[06:36:29] uggur вышел(а) из комнаты: Replaced by new connection
[06:36:30] uggur вошёл(а) в комнату
[06:44:11] portnov вошёл(а) в комнату
[07:03:25] portnov вышел(а) из комнаты
[08:00:13] ma1uta вошёл(а) в комнату
[08:57:32] <tg> <@Air_0> >> <popyachsa> «В процессе обновления ПО на моделях XXXX (5-осевые фрезерные станки с ЧПУ) начиная с версии YYYY отображается анимация на которой показана вращающаяся группа шестерней. Клиент отмечает что в группе использованы шестерни с не взаимно простым количеством зубцов (приводит к неравномерному износу - прим. автора), неверными геометрическими параметрами (профиль зубцов не входит в полное зацепление с ведомыми шестернями, а взаимодействие плоскостей является скользящим), а вся конструкция в принципе избыточна т.к. как минимум одна пара вращается с одинаковыми угловыми скоростями. Наблюдение анимации при обновлении ПО вызывает у оператора чувство тревоги (!), неуверенности в качестве продукта и недоверия (!) к программистам. Клиент прилагает модель с исправленной группой шестерней и просит заменить анимацию.»
[08:59:50] unclechu вошёл(а) в комнату
[09:15:39] <tg> <@winged_pegasus> >> <Air_0> >> <popyachsa> «В процессе обновления ПО на моделях XXXX (5-осевые фрезерные станки с ЧПУ) начиная с версии YYYY отображается анимация на которой показана вращающаяся группа шестерней. Клиент отмечает что в группе использованы шестерни с не взаимно простым количеством зубцов (приводит к неравномерному износу - прим. автора), неверными геометрическими параметрами (профиль зубцов не входит в полное зацепление с ведомыми шестернями, а взаимодействие плоскостей является скользящим), а вся конструкция в принципе избыточна т.к. как минимум одна пара вращается с одинаковыми угловыми скоростями. Наблюдение анимации при обновлении ПО вызывает у оператора чувство тревоги (!), неуверенности в качестве продукта и недоверия (!) к программистам. Клиент прилагает модель с исправленной группой шестерней и просит заменить анимацию.»
Всё так.
[09:24:27] matraskin вышел(а) из комнаты
[09:25:18] Ender вышел(а) из комнаты
[09:37:39] Ender вошёл(а) в комнату
[09:54:05] m4n71k0r вошёл(а) в комнату
[10:06:16] <tg> <@ttldtor> >> <winged_pegasus> Всё так.
Помогите, наш оператор в истерике, потому что ШЕСТЕРЁНКИ ПРОПАЛИ!
[10:09:30] <tg> <@Devel29A> Этот ипонцы
[10:18:36] <tg> <@a1batross> Правильная предъява.
[10:18:47] <tg> <@a1batross> Эргономика она такая.
[10:28:21] Ender вышел(а) из комнаты
[10:46:01] Товарищ Чпок вошёл(а) в комнату
[11:02:10] O01eg вышел(а) из комнаты
[11:54:23] matraskin вошёл(а) в комнату
[12:13:53] unclechu вошёл(а) в комнату
[12:15:58] ma1uta вышел(а) из комнаты: Replaced by new connection
[12:15:59] ma1uta вошёл(а) в комнату
[12:17:14] Ender вошёл(а) в комнату
[12:41:02] <tg> <@ttldtor> словья-то какие
[12:41:11] <tg> <@winged_pegasus> >> <ttldtor> словья-то какие
О, привет.
[12:41:35] <tg> <@ttldtor> утро?
[12:41:40] <tg> <@winged_pegasus> Конечно, утро!
[12:41:44] <tg> <@winged_pegasus> Как может быть иначе?
[12:42:27] <tg> <@noktoborus> иначе может быть любое время суток
[12:48:22] <tg> <@ttldtor> у нас тут Splunk, оказывается, всё.... но это про инвестиции и вообще близко к политоте
[12:51:46] <tg> <@sarakerrigan> >> <ttldtor> у нас тут Splunk, оказывается, всё.... но это про инвестиции и вообще близко к политоте
чо там, оно сам не зарабатывает штоле?
[12:52:31] <tg> <@ttldtor> https://tssolution.ru/blog/splunk-uhodit-is-rf
[12:53:15] <tg> <@ttldtor> я неточно выразился
[12:53:28] <tg> <@sarakerrigan> ууу, пидоры
[12:53:41] <tg> <@sarakerrigan> правда я не понимаю зачем
[12:53:55] <tg> <@sarakerrigan> кто-то в россии этим плотно пользовался?
[12:54:28] <tg> <@ttldtor> ну десятки юзали
[12:54:33] <tg> <@noktoborus> что такое splunk?
[12:55:04] <tg> <@ttldtor> кто не юзал ELK или игнит или, прости имераторе, не буду называть то пыхоподелие
[12:55:49] <tg> <@sarakerrigan> >> <ttldtor> ну десятки юзали
а кто-то до сих пор верит, что саасы это надежное решение
[13:01:11] <tg> <@ttldtor> ну спланк-то можно и локально разворачивать
[13:27:37] <tg> <@noktoborus> > В 2018 году состоялся неоднозначный марш SPLUNK PRIDE 2018. Группа Санди Франциско Pride @ Splunk и ее союзники - от летних стажеров до руководителей - впервые участвовали в параде и праздновании транссексуалов, лесбиянок, бисексуалов.
[13:27:39] <tg> <@noktoborus> чем они занимались?
[13:31:44] <tg> <@sarakerrigan> маршировали
[13:32:09] <tg> <@sarakerrigan> размахивали хуями на длинных палках, наверное
[13:32:16] <tg> <@sarakerrigan> и тематическими транспарантами
[13:32:29] <tg> <@sarakerrigan> или всё вместе
[13:32:46] <tg> <@sarakerrigan> хотя это больше похоже на япоснкий праздник
[13:32:51] <tg> <@fvnever> >> <ttldtor> ну спланк-то можно и локально разворачивать
Тогда в чём заключается его «уход с рынка»?
[13:33:05] <tg> <@sarakerrigan> >> <fvnever> Тогда в чём заключается его «уход с рынка»?
в том что его запретили продавать сюда
[13:33:09] <tg> <@sarakerrigan> даже через посредников
[13:33:10] <tg> <@ttldtor> да
[13:33:15] <tg> <@fvnever> А, он не опенсорс?
[13:33:20] <tg> <@ttldtor> есть официальный партнёр
[13:33:21] <tg> <@sarakerrigan> лооол
[13:33:28] <tg> <@ttldtor> партнёру сказали "всё"
[13:33:36] <tg> <@fvnever> Ну лан, пусть не продают. Не очень-то и хотелось у них ничо покупать.
[13:33:44] <tg> <@ttldtor> хех
[13:34:02] <tg> <@fvnever> Мы щас енто, своих спланков таких настрогаем
[13:34:13] <tg> <@noktoborus> >> <fvnever> Ну лан, пусть не продают. Не очень-то и хотелось у них ничо покупать.
потому что они с транспорантами ходют?
[13:34:24] <tg> <@winged_pegasus> >> <fvnever> Мы щас енто, своих спланков таких настрогаем
Го сделаем и будем продавать им самим?
[13:34:25] <tg> <@ttldtor> ы
[13:34:37] <tg> <@fvnever> >> <noktoborus> потому что они с транспорантами ходют?
Нет, потому что принимают такие вот странные решения. Против транспарантов я ничего не имею, например.
[13:34:41] <tg> <@fvnever> Ну на первомай там
[13:34:58] <tg> <@ttldtor> решение не странное, могу накинуть причин в соседний чатик
[13:35:05] <tg> <@fvnever> Ну накинь.
[13:35:46] <tg> <@sarakerrigan> >> <fvnever> Ну на первомай там
лучше на монстрацию
[13:36:12] <tg> <@sarakerrigan> а, она первого мая, да
[13:39:44] <tg> <@fvnever> Да?
[13:39:52] <tg> <@sarakerrigan> да
[14:09:43] matraskin вышел(а) из комнаты
[14:58:53] O01eg вошёл(а) в комнату
[15:16:00] <Славный капитан> а кому этот спланк нужен-то?
[15:17:21] <Славный капитан> если у тебя есть петабайты датасетов, то есть и цоды, где их можно пообрабатывать
[15:18:54] <Славный капитан> а остальной их функционал перекрывается каким-нибудь тиволи (для энтерпрайза) или графитом + ЕЛК
[15:20:57] <Славный капитан> и вообще, такие продукты паразитируют на желании некомпетентных руководителей микроменеджить подчиненными не лично, а через компуктер
[15:20:58] <m4n71k0r> в елк тоже какой-нибудь машлёнинх за деньги, кстати, да
[15:36:47] unclechu вышел(а) из комнаты
[16:46:57] HazardPointer вошёл(а) в комнату
[17:02:45] ma1uta вышел(а) из комнаты
[17:05:13] portnov вошёл(а) в комнату
[17:09:40] unclechu вышел(а) из комнаты
[17:18:36] <tg> <@sarakerrigan> https://habr.com/ru/company/skillbox/blog/440836/ эти долбоебы наделали фейковых анкет историй успеха и их спалили прямо в статье
[17:45:47] <tg> <@noktoborus> скилбокс это что-то вроде гикбрейнса?
[17:47:27] <tg> <@sarakerrigan> йеп
[17:58:06] <portnov> https://amarao-san.livejournal.com/3433912.html
[18:00:35] Ender вышел(а) из комнаты: Replaced by new connection
[18:00:40] Ender вошёл(а) в комнату
[18:13:58] <tg> <@sarakerrigan> он придумал jupyter notebook?
[18:14:57] <tg> <@sarakerrigan> https://vatlab.github.io/blog/post/sos-notebook/
[18:35:44] Ender вышел(а) из комнаты
[18:39:04] <tg> <@ttldtor> Так, ну хоть Луна радует
[18:39:10] <tg> <@ttldtor> И зп
[18:40:15] <tg> <@winged_pegasus> Странно, что тебя вообще что-то радует.
[18:50:09] <portnov> «несу возмездие во имя зп»?
[18:56:09] <tg> <@sarakerrigan> главное чтобы не зппп
[19:07:59] Minoru вошёл(а) в комнату
[19:08:22] <tg> <@ttldtor> Увидел я плоды рук человеческих и сделалось мне хреново и проклял я тот день
[19:08:47] <portnov> ...когда сел за клавиатуру этого пылесоса?
[19:10:05] <Minoru> следующую инкарнацию цепей Маркова в Хорте будем обучать на Портнове, у него текст годный
[19:10:07] <Minoru> олсо утро
[19:47:34] <tg> <@ttldtor> >> <winged_pegasus> Странно, что тебя вообще что-то радует.
а есть чо?
[20:24:53] Minoru вышел(а) из комнаты
[20:35:07] <tg> <@noktoborus> [Photo] Есть это
[20:35:52] <tg> <@ttldtor> дерьмовая колбаса с невзрачными помидорами и китайским салатом?
[20:36:07] <tg> <@ttldtor> приятного аппетита
[20:36:53] <tg> <@noktoborus> Выборгским салатом
[20:37:01] <tg> <@noktoborus> Хм
[20:37:08] <tg> <@noktoborus> Всеволожским, т.е.
[20:37:55] Minoru вошёл(а) в комнату
[20:38:19] <tg> <@noktoborus> Ты сыр забыл говном накрыть
[20:41:35] <tg> <@ttldtor> Всеволожский салат в феврале?
[20:41:48] <tg> <@ttldtor> то не сыр
[20:43:21] <tg> <@ttldtor> про салат ошибся:
на первом месте Иран (27%), на втором месте Египет (19%).
[20:43:43] <tg> <@ttldtor> Выборг под Каиром как раз да
[20:44:18] <ma1uta> Выборг под Каиром?
[20:44:34] <ma1uta> Кстати, кто-нибудь слышал про контору zalando ?
[20:44:41] <portnov> ma1uta: если карта произведена в Австралии, то под
[20:44:46] <portnov> а так - над...
[20:46:02] <tg> <@ttldtor> >> <ttldtor> про салат ошибся:
>> на первом месте Иран (27%), на втором месте Египет (19%).
это было в ноябре и 2017 года, а вот тебе с января по март 2018
Сводная информация:
Импорт в Россию товаров из группы «салат-латук и цикорий» за период Январь, 2018 - Март, 2018 составил $12 млн., общим весом 14.5 тыс. тонн.
В основном импортировались «салат-латук кочанный (салат кочанный), свежий или охлажденный» (81%), «салат-латук прочий, свежий или охлажденный» (15%).
В структуре импорта по странам (товаров из группы «салат-латук и цикорий») на первом месте Иран (39%), на втором месте Египет (23%).
[20:46:13] <tg> <@ttldtor> или это не салат-латук?
[20:46:31] <tg> <@noktoborus> Не разбираюсь
[20:46:41] <tg> <@noktoborus> Он зелёный, хрустящий
[20:46:45] <tg> <@noktoborus> И мне хорошо
[20:46:57] <portnov> «еда мужская, 1кг»
[20:47:05] <portnov> «трава зелёная, 200г»
[20:47:47] <tg> <@noktoborus> Помидоры красные в нарезке
[20:47:52] <tg> <@ttldtor> сыр какой-то
[20:48:09] <tg> <@ttldtor> огурки с пупырками
[20:48:43] <tg> <@ttldtor> >> <ma1uta> Кстати, кто-нибудь слышал про контору zalando ?
два раза прочитал как zapadlo
[21:00:22] <tg> <@folexeyy> Здрасьте! А расскажите, приходится ли вам иногда наследовать один PR от другого?
Мне вот постоянно приходится уже много лет. Всегда бывает так, что ревью не успевает, и следующий PR надо делать, отпочковывая новую ветку от текущего PR.
[21:01:11] <tg> <@folexeyy> И потом когда PR#1 мердж-сквошится, я домердживаю к себе в PR#2 мастер, и получаю конфликты. Конфликты всегда тривиальные, но бесит же.
[21:01:20] <tg> <@sarakerrigan> если ревью не успевает, то надо блочить
[21:01:32] <tg> <@folexeyy> >> <sarakerrigan> если ревью не успевает, то надо блочить
Блочить кого?
[21:01:35] <tg> <@folexeyy> Или что?
[21:01:46] <tg> <@sarakerrigan> >> <folexeyy> Блочить кого?
разработку зависящую от мержреквеста
[21:01:55] <tg> <@folexeyy> Зачем?
[21:02:22] <tg> <@sarakerrigan> я сейчас могу ответить "потому что ТЫ ТуПОЙ СУКА ТУПОЙ", завтра спроси
[21:02:49] <tg> <@folexeyy> Лол %)
[21:03:40] <tg> <@sarakerrigan> мне на работе вбросили проект, который вроде выглядит обычно
[21:03:47] <tg> <@folexeyy> Ну короче я не вижу никакого смысла никого блочить. Я живой, работу надо работать, всё отлично работает. Переключаться на другие фичи -- дороже выйдет, да и может не быть ничего другого.
Ну и вопрос больше про CVS, чем про процессы разработки
[21:03:49] <tg> <@sarakerrigan> а потом ты такой погружаешься
[21:03:56] <tg> <@sarakerrigan> и в голове у тебя взрывается осколочная
[21:04:02] <tg> <@folexeyy> На чем написан?
[21:04:04] <tg> <@sarakerrigan> и ты такой ААААААААаааААААААА
[21:04:09] <tg> <@sarakerrigan> он еще не написан даже
[21:04:16] <tg> <@folexeyy> На чём он не написан?
[21:04:26] <tg> <@sarakerrigan> ни на чем не написан
[21:04:30] <tg> <@sarakerrigan> это были только требования
[21:05:26] <tg> <@folexeyy> Большой? %)
[21:06:10] <tg> <@sarakerrigan> не особо
[21:09:02] <tg> <@sarakerrigan> и знаю как сделать по бомжу
[21:09:15] <tg> <@sarakerrigan> но всё равно голова болит теперь
[21:09:35] <tg> <@ttldtor> >> <folexeyy> Здрасьте! А расскажите, приходится ли вам иногда наследовать один PR от другого?
>>
>> Мне вот постоянно приходится уже много лет. Всегда бывает так, что ревью не успевает, и следующий PR надо делать, отпочковывая новую ветку от текущего PR.
Я не понимаю, почему не делать всё в фиче\багфикс ветке. Если тчо-то долго п роисходит, то хреновая декомпозиция
[21:10:43] <Minoru> @folexeyy: про CVS ничего не знаю. Наследовать иногда приходится, и обычно это заканчивается тратой времени на мерж. Сабмиттеру лучше переключиться пока на другую задачу или ещё раз перечитать фидбек, чтобы следующий PR был более высокого качества и прошёл ревью быстрее
[21:10:49] <tg> <@ttldtor> или тут проблема в определении, что такое PR или я не понимаю проблемы
[21:11:34] <tg> <@ttldtor> >> <sarakerrigan> но всё равно голова болит теперь
да ладно те. Всё у тебя получится. Сделай збс) Поспать не забудь
[21:11:38] <tg> <@folexeyy> >> <ttldtor> Я не понимаю, почему не делать всё в фиче\багфикс ветке. Если тчо-то долго п роисходит, то хреновая декомпозиция
Ветки: master, pr-1, pr-2. На каждый новый PR новая ветка. Так что я не очень понял, что ты имел ввиду
[21:11:53] <tg> <@sarakerrigan> [Sticker 😩]
[21:12:52] <tg> <@folexeyy> >> <Minoru> @folexeyy: про CVS ничего не знаю. Наследовать иногда приходится, и обычно это заканчивается тратой времени на мерж. Сабмиттеру лучше переключиться пока на другую задачу или ещё раз перечитать фидбек, чтобы следующий PR был более высокого качества и прошёл ревью быстрее
PR может не проходить ревью из-за того что все остальные заняты, и у них руки еще не дошли. Или ты работаешь на выходных, и некому ревьюить. Делать в 1 PR не хочется, ведь можно на 2-3 разбить. Вот и приходится наследовать 1-2-3
[21:12:59] <tg> <@ttldtor> >> <folexeyy> Ветки: master, pr-1, pr-2. На каждый новый PR новая ветка. Так что я не очень понял, что ты имел ввиду
есть фича - есть фича ветка для неё
есть багфикс - есть ветка для него
под PR первый раз слышу чтобы отдельные ветки заводили
[21:13:26] <tg> <@ttldtor> или у вас задачи не делаются в отдельных ветках?
[21:14:30] <tg> <@ttldtor> взять любую иллюстрацию гитфлоу
[21:14:36] <tg> <@folexeyy> >> <ttldtor> есть фича - есть фича ветка для неё
>> есть багфикс - есть ветка для него
>>
>> под PR первый раз слышу чтобы отдельные ветки заводили
Так, я как-то криво объяснил.
Есть мастер, и есть фиче-бранчи. feature-branch = Pull Request. На каждую фичу новый бранч. Когда разработка фичи закончена, заводится новый PR, который ждет тестов и ревью, а затем сквош-мерджится в мастер 1 коммитом Больше никаких веток нет :)
[21:15:07] <tg> <@ttldtor> у вас спринты?
[21:15:36] <tg> <@folexeyy> Это тут ни при чем :)
[21:15:38] <tg> <@ttldtor> хотя не важно, ветка переводится в WFR потом WFT
[21:15:48] <tg> <@ttldtor> не ветка, а тикет
[21:16:21] <Minoru> @folexeyy: мерж должен быть по приоритету сразу после починки сломавшегося билда. Выноси это на ретроспективу, объясняй, что тратишь время на разбивку PR и потом на мерж. Делайте ревью более приоритетным
[21:16:41] <Minoru> @folexeyy: на выходных не знаю что делать. Найди другую задачу в другой части проекта
[21:16:50] <tg> <@folexeyy> Да может и не быть тикетов. Ты делаешь ветку в основном репозитории или форк, если на гитхабе, а потом из диффа веток делаешь ПР. Я всегда так везде делаю :) И в опенсорсе на гитхабе так же.
[21:17:00] <tg> <@folexeyy> >> <Minoru> @folexeyy: мерж должен быть по приоритету сразу после починки сломавшегося билда. Выноси это на ретроспективу, объясняй, что тратишь время на разбивку PR и потом на мерж. Делайте ревью более приоритетным
Никакой билд не ломался
[21:17:46] <Minoru> @folexeyy: вместо 1-2-3 (если уж иначе никак) я бы посоветовал уделить больше внимания атомарным коммитам, чтобы большой PR легче было переварить
[21:18:15] <tg> <@folexeyy> Зачем вообще делать большой ПР? Я делаю атомарные мелкие коммиты, и мелкие PRы
[21:19:00] <Minoru> @folexeyy: я имею в виду, что у команды есть приоритеты: 1. если сломался билд, все бросаются чинить. 2. если кто-то сабмитнул PR, быстро решили кто ревьювит и занялись этим. 3. распределили задачи и работаем каждый над своей. Именно в таком порядке
[21:19:48] <tg> <@noktoborus> >> <folexeyy> И потом когда PR#1 мердж-сквошится, я домердживаю к себе в PR#2 мастер, и получаю конфликты. Конфликты всегда тривиальные, но бесит же.
Звучит так, будто хуёво организован код
[21:19:48] <Minoru> большой PR — если, повторюсь, иначе никак — делать для того, чтобы не заниматься потом лишними мержами
[21:19:51] <tg> <@folexeyy> Я могу закрыть несколько задач за день, в несколько ПРов. Мне хочется при этом не зависеть от того, когда люди работают, и делать всё асинхронно.
[21:20:23] <Minoru> если это независимые задачи, то вопроса нет — делай отдельные PR-ы
[21:20:38] <tg> <@folexeyy> >> <Minoru> большой PR — если, повторюсь, иначе никак — делать для того, чтобы не заниматься потом лишними мержами
Такие мерджи занимают меньше минуты. Код свежий, изменения только что произведены. В 90% случаев ты просто берешь свою версию
[21:20:53] <Minoru> если задачи зависимые, но отдельные, я бы тоже сделал несколько PR-ов и потом ребейзил оставшиеся по мере мерджа
[21:20:55] <tg> <@ttldtor> видимо меня stash расслабил. Делаешь коммит-пуш в фичеветку и статус PR обновляется, показываются диффы итд, кто-то во время ревью написал что-то, ты исправил - закоммитил итд. Тест CI прошёл - вверху галочки отобразились
[21:21:13] <Minoru> если задача по факту одна и ты просто хочешь разбить её на PR-ы по каким-то своим соображениям — вот это для меня спорно
[21:21:24] <tg> <@folexeyy> >> <Minoru> если задачи зависимые, но отдельные, я бы тоже сделал несколько PR-ов и потом ребейзил оставшиеся по мере мерджа
Ну я так и делаю
[21:21:53] <tg> <@folexeyy> И потом вылезают тривиальные мерджи. Я подумал, может можно какую-то стратегию мерджа включить, чтобы этого не было, и вдруг вы сталкивались %)
[21:22:02] <tg> <@folexeyy> >> <ttldtor> видимо меня stash расслабил. Делаешь коммит-пуш в фичеветку и статус PR обновляется, показываются диффы итд, кто-то во время ревью написал что-то, ты исправил - закоммитил итд. Тест CI прошёл - вверху галочки отобразились
В гитхабе точно так же
[21:22:30] <Minoru> ну вот у тебя они занимают меньше минуты, а в предложенном мной workflow они занимают ноль времени, всегда — потому что их нет. Не понимаю, зачем на ровном месте себе работу создавать
[21:22:31] <tg> <@folexeyy> Да и везде, наверное :) И в битбакете, и в гитлабе
[21:22:57] <tg> <@folexeyy> >> <Minoru> ну вот у тебя они занимают меньше минуты, а в предложенном мной workflow они занимают ноль времени, всегда — потому что их нет. Не понимаю, зачем на ровном месте себе работу создавать
Предложенный твой воркфлоу: всех срочно звать на ревью моего ПР, хотя он может подождать несколько часов?
[21:23:20] <tg> <@ttldtor> в худшем случае приходилось заводить ветки от веток...в PR-ах учитывается история, так что важен только последний PR
[21:24:07] <Minoru> не «всех срочно звать», а «среди всех доступных немедленно выбрать». И у тебя история меняется: то у тебя PR-ы один от другого зависит и без мержа первого остальные нельзя делать, то «может подождать несколько часов». Ты уж определись
[21:24:22] <tg> <@sarakerrigan> >> <folexeyy> PR может не проходить ревью из-за того что все остальные заняты, и у них руки еще не дошли. Или ты работаешь на выходных, и некому ревьюить. Делать в 1 PR не хочется, ведь можно на 2-3 разбить. Вот и приходится наследовать 1-2-3
работаешь на выходных - дебил
[21:24:29] <tg> <@sarakerrigan> не настроили процесс - ссзб
[21:24:37] <tg> <@folexeyy> >> <ttldtor> в худшем случае приходилось заводить ветки от веток...в PR-ах учитывается история, так что важен только последний PR
Я о том и говорю! Из ветки первого пра заводишь вторую.
[21:25:33] <Minoru> блин, я только сейчас обратил внимание, что со мной тут не только folexeyy говорит ._.
[21:26:00] <tg> <@ttldtor> >> <folexeyy> Я о том и говорю! Из ветки первого пра заводишь вторую.
это хорошо, что мы разобрались. Такое было только если кто-то сильно нагнул условный "мастер" (на самом деле, бывали ситуации, когда проект уходил в релизную-продуктовую ветку и там всё копошилось)
[21:26:21] <tg> <@folexeyy> >> <Minoru> блин, я только сейчас обратил внимание, что со мной тут не только folexeyy говорит ._.
%)
[21:26:39] <tg> <@folexeyy> А я не могу понять, о чем ты говоришь, и уже начал заново всё расписывать %)
[21:27:19] <m4n71k0r> Minoru: а кто тут ещё с тобой говорит?
[21:27:25] <Minoru> ща, погоди, я лог дочитаю — может, у меня неправильная картинка в голове сложилась. То-то я думаю, чойто ты сам себе про stash и git{hub,lab} рассказываешь…
[21:27:38] <Minoru> m4n71k0r: да в том-то и дело, что никто. Один лишь tg.
[21:27:42] <m4n71k0r> Minoru: я с тобой не говорю
[21:27:48] <tg> <@folexeyy> >> <m4n71k0r> Minoru: а кто тут ещё с тобой говорит?
ttldtor
[21:28:01] <Minoru> здесь-то ники раскрашиваются, а телеграмовские — нет
[21:28:13] <tg> <@folexeyy> Minoru, а ты и реплаев моих не видишь? Просто сообщения потоком сплошным?
[21:28:19] <m4n71k0r> ну, ttldtor - это я и есть
[21:28:31] <tg> <@folexeyy> >_>
[21:28:31] <m4n71k0r> только я не помню, чтобы минорычу что-то писал
[21:28:46] <tg> <@folexeyy> наркоман
[21:29:05] <tg> <@m4n71k0r> ну вот я тоже ttldtor
[21:29:19] <tg> <@m4n71k0r> только @m4n71k0r
[21:29:36] <tg> <@ttldtor> теперь можешь звать норкоманом
[21:30:25] <Minoru> @folexeyy: «реплаи» это то, что с цитатами? Вижу всё как текст. Можешь вот здесь посмотреть: https://codingteam.org.ru/_logs/codingteam%40conference.jabber.ru/2019/02/19.html#21:17:00.379796
[21:31:24] <Minoru> @folexeyy: короче, я перечитал лог и таки считаю, что у вас проблема с процессом: у вас разработка важнее ревью. Если это починить, тебе не придётся выстраивать деревья наследования из PR-ов, и будет тебе счастье :)
[21:31:38] <tg> <@folexeyy> Разработка и ревью асинхронные просто
[21:31:43] <tg> <@folexeyy> И работа у людей асинхронная
[21:31:54] <m4n71k0r> только вот люди синхронные
[21:31:58] <tg> <@folexeyy> Никто не отвлекает никого посреди дня нуждой в ревью
[21:32:10] <tg> <@folexeyy> >> <m4n71k0r> только вот люди синхронные
Сколько? 1 - да, 2 - нет
[21:32:26] <Minoru> пусть сами отвлекаются, по расписанию
[21:32:26] <m4n71k0r> хотя некоторые менеджеры утверждают, они асинхронные
[21:32:32] <m4n71k0r> да, 1
[21:32:39] <tg> <@folexeyy> >> <Minoru> пусть сами отвлекаются, по расписанию
И мне ждать, пока у них появится окно?
[21:33:19] <Minoru> да. 15 минут подождать можешь? Если у вас 4 разработчика и каждый отвлекается раз в час, норм. У вас билд, небось, дольше идёт!
[21:33:25] <Minoru> inb4 вы на JS пишете
[21:33:30] <tg> <@folexeyy> Короче я не знаю, может у вас как-то очень много всяких процессов. Но у нас команда оч маленькая, нам и так отлично. На предыдущем проекте тоже была куча процессов, но на ревью никто никого не звал и не ждал никогда.
[21:33:40] <Minoru> тогда горите в… в CVS!
[21:34:04] <tg> <@folexeyy> >> <Minoru> да. 15 минут подождать можешь? Если у вас 4 разработчика и каждый отвлекается раз в час, норм. У вас билд, небось, дольше идёт!
Раз в час отвлекать каждого человека? Зачем? о_О
[21:34:20] <tg> <@folexeyy> Я бы на такое не согласился :)
[21:34:56] <tg> <@folexeyy> > Minoru
> inb4 вы на JS пишете
И такое бывает. Но в основном скала с растом и тайпскриптом.
[21:35:38] <Minoru> не отвлекать, а он сам отвлекается. Затем, чтобы разблокировать тебя и дать возможность работать над следующим PR. Хотя в блокировку я не сильно верю, неужели у вас так мало задач, что ты не можешь выбрать непересекающуюся?
[21:36:24] <Minoru> у меня на работе нет команды, я на всех своих проектах единственный программист. Так что дисклеймер: я диванный теоретик
[21:36:29] <Minoru> (очень вовремя признался, ага)
[21:36:31] <tg> <@folexeyy> Да зачем мне прыгать из компонента в компонент? В чем профит? Зачем отвлекать кого-то, когда можно не отвлекать прямо сейчас? На обеде посмотрит или вечером.
[21:36:53] <Minoru> а тебе до обеда или вечера чем заниматься?
[21:37:01] <tg> <@folexeyy> Следующей задачей!
[21:37:07] <tg> <@folexeyy> Никто никого не блокирует, и не ждет
[21:37:11] <tg> <@noktoborus> Поеданием кексиков
[21:37:13] <tg> <@folexeyy> Разве что если на день просрочить ревью
[21:37:26] <Minoru> если никто никого не блокирует, то зачем цепочки PR-ов?
[21:37:44] <tg> <@folexeyy> Потому что в PR1 есть функционал, который пригодится в PR-2
[21:38:04] <Minoru> это значит, что PR1 блокирует PR2
[21:38:19] <tg> <@folexeyy> никто никого не блокирует :) Но называть это можно как угодно
[21:38:38] <tg> <@folexeyy> Я могу (и делаю) еще одну ветку прямо из текущей, и продолжаю в ней работу
[21:38:39] <tg> <@noktoborus> Блокирую еду в большой кишкн
[21:39:06] <Minoru> @folexeyy: а потом во время ревью выпиливаешь из PR1 функциональность, на которую полагался в PR2
[21:39:22] <tg> <@folexeyy> Никто никого не ждет, не блокирует, не страдает. Просто когда уже всё заревьювили, приходится несколько раз жмакать кнопку "Take yours"
[21:39:34] <tg> <@folexeyy> Зачем выпиливать что-то?
[21:39:50] <tg> <@folexeyy> В гитхабе и битбакете можно выбрать base ветку для PR, и дифф будет считаться от неё
[21:40:16] <Minoru> take yours это жесть, если тебе это в повседневной жизни нужно больше раза в год — у тебя какой-то совсем странный процесс. Это же не мерж, это тупо копирование
[21:40:18] <tg> <@folexeyy> И можно по сути в любом порядке ревьюить ПРы если у них композиция достаточно хорошая
[21:40:38] <tg> <@folexeyy> У меня очень сильно ощущение, что ты что-то не так понял :)
[21:41:02] <Minoru> ты в одном предложении рассказываешь про «PR2 использует функциональность PR1», а в другом «у них композиция хорошая». Does not compute >_<
[21:41:36] <tg> <@folexeyy> Почему? У тебя никогда не бывало двух фичей на один компонент?
[21:42:04] <tg> <@noktoborus> Почему-то мне кажется, что работать меня никуда не возьмут
[21:42:19] <tg> <@folexeyy> Когда делаю первую фичу, мимоходом улучшаешь какой-нибудь кусок. Например взял, и зависимости в билде соптимизировал, теперь время сборки в два раза изменилось. Логично взять это во второй ПР.
[21:42:36] <tg> <@noktoborus> После рассказыюов про жизнь пищи после переработке в биотопке моего тела
[21:43:00] <tg> <@folexeyy> >> <noktoborus> После рассказыюов про жизнь пищи после переработке в биотопке моего тела
Удали из гугла!
[21:44:40] <Minoru> @folexeyy: две фичи бывало. Если независимые — сабмитил две сразу по мере готовности. Если зависимые — сначала одну, после её мержа вторую
[21:44:46] <tg> <@folexeyy> Кстати, кабы не сквош, вообще не было бы никаких конфликтов.
[21:44:50] <tg> <@folexeyy> Надо короче попробовать стратегии мерджа всякие разные
[21:44:52] <Minoru> оптимизацию билда я бы в отдельный PR выделил
[21:45:04] <tg> <@folexeyy> >> <Minoru> оптимизацию билда я бы в отдельный PR выделил
И потом что с этим делал? От него бы наследовался?
[21:45:32] <Minoru> нет, просто отправил бы, пусть мержат когда хотят. А я тем временем займусь фичами
[21:45:50] <tg> <@folexeyy> Но при разработке фичей тесты в 2 раза быстрее были бы!
[21:45:55] <tg> <@folexeyy> Неужто будешь ЖДАТЬ?
[21:46:15] <Minoru> если сильно печёт, локально делал бы фичи поверх PR с оптимизацией, но перед сабмитом ребейзнул бы на master (если PR с оптимизацией ещё не помержили)
[21:46:31] <tg> <@folexeyy> Ну, это эквивалентно тому что я делаю
[21:46:38] <tg> <@folexeyy> плюс одно телодвижение
[21:46:49] <tg> <@folexeyy> А мне хочется чтобы оно само всё поняло
[21:47:23] <Minoru> я так понял, ты сабмитишь как есть, т.е. в последнем PR ты сабмитишь историю всех предыдущих. И потом в ревьювилке выбираешь опцию, чтобы она использовала в качестве базовой ветки предыдущий PR
[21:47:30] <tg> <@folexeyy> Как-нибудь было бы в коммите сквош-мерджа написано "он включает в себя такую-то историю", гит мог бы разобраться. А так -- просто коммит с изменениями в тех же строках.
[21:47:50] <tg> <@folexeyy> Всё так, да.
[21:48:17] <tg> <@folexeyy> Это, к слову, не так-то часто происходит, и я стараюсь избегать, и делать независимые ПРы. Но не всегда так выходит. И вопрос как раз про этот случай.
[21:49:24] <Minoru> и тут случается ужасное: второй PR мержат, а первый и третий всё ещё на ревью. Мастер сидит без изменений из PR2, потому что тот был смержен в ветку PR1. Изменения PR1 теперь приведут к жути в истории, а если ещё и PR3 поменять…
[21:49:49] <tg> <@folexeyy> Такого не случается, потому что я в дескпришне чонить пишу, да и по названиям всем всё понятно.
[21:50:06] <Minoru> «Изменения PR1» — в смысле, из-за ревью придётся что-то поменять в PR1
[21:50:31] <Minoru> «напишу в дескрипшоне» это дополнительный mental burden для ревьюверов
[21:50:32] <tg> <@folexeyy> Никогда не случится мерджа в неправильном пордке
[21:50:41] <Minoru> «ты поревьювь, но кнопочку не нажимай!»
[21:50:46] <tg> <@folexeyy> >> <Minoru> «напишу в дескрипшоне» это дополнительный mental burden для ревьюверов
Это не формальное правило
[21:51:01] <Minoru> «я поревьювил, но кнопочку нужно нажать после мержа #100500, #100512 и #100588»
[21:51:07] <tg> <@folexeyy> >> <Minoru> «ты поревьювь, но кнопочку не нажимай!»
Ну да, обычно ты либо знаешь, что можешь мерджить, либо спрашиваешь
[21:51:25] <tg> <@folexeyy> >> <Minoru> «я поревьювил, но кнопочку нужно нажать после мержа #100500, #100512 и #100588»
Ну, такой жести не бывает. У меня цепочка больше двух и не случалась никогда, наверное.
[21:51:47] <Minoru> вопрос — это ещё один round trip и отвлечение, которые ты так не любишь. Или тормоза, которые ты тоже не любишь (ждать до обеда/вечера односложного ответа да/нет)
[21:51:52] <tg> <@folexeyy> Ну и опять же: вопрос больше про git или может про то, как это решается в других CVS
[21:52:31] <tg> <@folexeyy> >> <Minoru> вопрос — это ещё один round trip и отвлечение, которые ты так не любишь. Или тормоза, которые ты тоже не любишь (ждать до обеда/вечера односложного ответа да/нет)
Не хочешь этого делать -- просто не мерджи. Автор с радостью сам померджит. Или кто-то еще придет и померджит.
[21:52:32] <Minoru> я всё таки не согласен, что это вопрос про технику. Непонятно, зачем вообще загонять себя в такую ситуацию
[21:52:33] <tg> <@folexeyy> eventually
[21:53:29] <tg> <@folexeyy> Я бы не назвал это "загоном", мне просто не хочется лишний ребейз (по твоему рецепту) или лишний мердж делать. Я хочу, чтобы гит понял, что если строчки идентичные в обеих ветках, то не важно чо у их парента, можно мерджить
[21:54:19] <tg> <@folexeyy> И под "take theirs" я имел ввиду кнопку в IDE, а не merge -s theirs
[21:55:50] <Minoru> по строчкам гит не умеет. Вообще это ресурсоёмкая задача, не знаю, кто таким будет заниматься вообще
[21:56:05] <Minoru> а что эта кнопочка делает? По её названию я бы решил, что как раз merge -s theirs
[21:56:42] <tg> <@folexeyy> Ну она так берет изменения из HEAD той ветки, да.
[21:57:00] <Minoru> типа git fetch?
[21:57:43] <tg> <@folexeyy> > это ресурсоёмкая задача,
Я правда не понимаю, что тут ресурсоемкого. Я бы не стал заниматься какой-то неудобной сложной фигней, я не мало процессов сменил.
[21:58:08] <tg> <@folexeyy> Не фетч, а типа как merge -s theirs, только с диффом перед глазами, и per file
[22:00:13] <Minoru> ресурсоёмкое потому, что ты хочешь найти общего «предка» у двух веток, но не по ID коммитов, а по содержимому файлов. Для этого нужно делать diff-ы между всеми возможными парами коммитов и смотреть, где дифф окажется пустым
[22:00:25] <tg> <@folexeyy> А, алгоритмически ресурсоемкими
[22:00:26] <Minoru> хотя, пожалуй, в git можно смотреть на id блобов вместо диффа
[22:02:25] <Minoru> про кнопочку я что-то так и не понял. Дифф позволяет отменить кусочки мержа? Т.е. ты берёшь чужие изменения, но руками выборочно оставляешь свои там, где для тебя это важно?
[22:02:49] <tg> <@folexeyy> Нет, всё вообще даже близко не так %)
[22:03:05] <tg> <@folexeyy> Это удивительно, неужели у нас настолько разные воркфлоу?
[22:03:27] <Minoru> а как же ты хотел!
[22:03:30] <tg> <@folexeyy> Я даже объяснить не могу, вообще всё мимо.
[22:03:47] <Minoru> ну, это, может, я туповат
[22:03:52] <tg> <@folexeyy> Не знаю, у меня просто это всё совпадает со всеми, с кем я общался до этого.
[22:04:35] <tg> <@folexeyy> Ну, основной флоу, тема с наследованием ПРов особо не всплывала.
[22:10:00] <tg> <@folexeyy> Всё очень-очень просто. Ты хочешь взять и сделать 2 маленьких фичи в один и тот же компонент. Обычно выходит делать их независимыми, но иногда изменения из первой фичи помогают разрабатывать вторую, и появляется профит в том, чтобы взять код первой ветки во вторую.
Например в первом ПР ты реализовал какую-нибудь шину обмена чем угодно, например эвентами. А во втором хочешь реализовать возможность делать эвенты идемпотентными. Можно было бы и не разделять это на два ПРа, а сделать один, но товарищам будет проще ревьюить по частям.
Закончил шину, сделал ПР#1. Затем сделал ветку с идемпотентностью от головы ветки с шиной, и пошел реализовывать идемпотнетность.
Закончил идемпотентностью, сделал ПР#2.
Пока делал, ПР#1 уже замерджили. Подмердживаешь к себе мастер с ПР1 в нем, получаешь несколько конфликтов.
[22:10:09] <tg> <@folexeyy> Всё %) Надеюсь теперь будет понятно, иначе я не зна
[22:10:11] <tg> <@folexeyy> ю
[22:12:03] <tg> <@noktoborus> Хочу поработать, но уже сплю
[22:12:06] <tg> <@noktoborus> Как быть
[22:12:33] <tg> <@folexeyy> Возьми в голову сложную рабочую задачу, и лежи думай
[22:12:49] <tg> <@noktoborus> Это не настоящая работа
[22:13:02] <tg> <@folexeyy> Хочется пальцами в клавиатуру потыкать?
[22:13:49] <tg> <@folexeyy> Ваще так-то думать это основное рабочее занятие, пожалуй...
[22:17:03] <Minoru> @folexeyy: а, то есть предполагается, что конфликты будут исключительно из-за изменений, внесённых во время ревью PR1? Это объясняет, почему theirs (хотя предположение нужно бы обосновать)
[22:17:42] <tg> <@folexeyy> Да, ты в одиночку работаешь над этим, локтями не толкаешься ни с кем.
[22:18:02] <Minoru> общая картина для меня не поменялась. Я либо и так всё правильно понял, либо продолжаю не понимать :)
[22:18:02] portnov вышел(а) из комнаты
[22:18:33] <tg> <@folexeyy> Ну хорошо. А что тебе кажется тут трудоемким, неудобным или еще каким плохим?
[22:18:37] <Minoru> ну и рецепт мой не меняется: второй придержать; когда первый смержат — ребейзнуться на мастер и сабмитнуть второй
[22:19:08] <tg> <@folexeyy> Но я не хочу придерживать второй, я не вижу никаких объективных причин для этого. Вообще никаких.
[22:19:16] <Minoru> мне кажется неправильным сабмитить PR2, потому что он зависит от ещё не отревьювленного и не смерженного PR1
[22:19:32] <Minoru> грубо говоря, PR1 пока ещё вилами по воде, там вообще всё может поменяться. Его могут и вовсе не принять
[22:20:22] <tg> <@folexeyy> Да, тут ты прав. Если ПР предполагается спорный какой-нибудь, или большой, то так лучше не делать.
[22:20:38] <Minoru> ну, вот тебе объективная причина: если PR1 при ревью изменился, в истории после мержа PR2 будут две копии изменений PR1. Мусор в чистом виде
[22:20:54] <tg> <@folexeyy> В истории после мерджа будет по коммиту на ПР
[22:21:13] <Minoru> а, ну ок, сквош от этой проблемы спасает :)
[22:21:15] <tg> <@folexeyy> [Photo]
[22:21:42] <Minoru> бот не транслирует фоточки, но я могу представить себе историю из squash-ей :)
[22:22:03] <tg> <@folexeyy> Ну лан
[22:22:16] <Minoru> лол, я ж полтора часа назад садился код писать. А открыл чатик ._.
[22:22:29] <tg> <@folexeyy> Чо будешь писать?
[22:22:43] <tg> <@folexeyy> (давно сюда не заходил, вот и доебываюсь. Соскучился!)
[22:23:04] <Minoru> немного тестов на свеженаписанный модуль для форматирования строк типа "%a %b %c"
[22:23:15] <Minoru> вместо ключей подставляются заранее заданные значения
[22:23:34] <Minoru> это не printf, тут ещё есть условия и spacer
[22:23:48] <Minoru> это для моего сайд-проекта newsboat.org
[22:23:54] <Minoru> мы его на Rust переписываем
[22:25:43] <Minoru> у нас, кстати, опытных ревьюверов для растокода нет, не хочешь почитать? Есть простенькое типа https://github.com/newsboat/newsboat/pull/402 бывает посложнее типа https://github.com/newsboat/newsboat/pull/370
[22:26:09] <Minoru> вряд ли ты будешь вникать в ньюансы портирования, зато про best practices, идиоматичность и подводные камни сможешь подсказать
[22:26:53] <Minoru> сейчас открытых PR нет, правда. Есть один заблоченный, ждёт, пока я макру для типа-printf напишу
[22:34:09] Akon32 вошёл(а) в комнату
[22:56:31] <tg> <@folexeyy> >> <Minoru> у нас, кстати, опытных ревьюверов для растокода нет, не хочешь почитать? Есть простенькое типа https://github.com/newsboat/newsboat/pull/402 бывает посложнее типа https://github.com/newsboat/newsboat/pull/370
Могу!
[22:58:56] <Minoru> @folexeyy: я тебя тогда буду здесь тыкать, когда что-то появится. Дело сейчас медленно идёт, может, один PR в месяц
[23:00:15] <tg> <@folexeyy> сишник из меня никакущий, правда
[23:01:06] <Minoru> там, кстати, Catch2 собирается превращаться из header-only в обыкновенную библиотеку, и вообще майнтейнер потерял интерес и свободное время: https://codingnest.com/the-future-of-catch2/
[23:01:32] <Minoru> @folexeyy: ну, тогда можешь код не сравнивать с версией на C++, а подсказывать только по самому Rust
[23:01:57] <tg> <@ttldtor> >> <Minoru> там, кстати, Catch2 собирается превращаться из header-only в обыкновенную библиотеку, и вообще майнтейнер потерял интерес и свободное время: https://codingnest.com/the-future-of-catch2/
жаль
[23:01:58] <Minoru> вот я скоро завезу тот модуль, который сейчас тестирую. Там между плюсами и растом общие только тесты будут
[23:03:31] <Minoru> @ttldtor: да, мне тоже. Header-only было главной причиной, почему я заюзал его в Newsboat и потом на работе
[23:04:04] <Minoru> сейчас на работе в новых проектах CMake, так что собирать Catch из сорцов будет несложно. А вот в Newsboat, похоже, придётся перестать обновляться. Или нужно скорей всё переписать на Раст :)
[23:04:16] <tg> <@ttldtor> в принципе, я могу его и так сделать подпроектом, но хедеронли мне как-то было удобнее
[23:04:34] <Minoru> юнит-тесты в Rust такие себе. Мне не нравится придумывать названия функциям, и мне очень плохо без SECTION
[23:15:32] <tg> <@folexeyy> Minoru, А почему libnewsboat/src/utils.rs::replace_all принимает String, а не &mut String? Как и все остальные функции в utils.rs
Из-за этого приходится делать Cow::into_owned, а можно было бы делать Cow::to_mut, не форсируя клонирование.
[23:16:30] <tg> <@folexeyy> Или "пофигу вообще, это мелочи"? %)
[23:19:37] <Minoru> сейчас задача перенести код на Rust, возможно, не самым оптимальным образом. Потом можно открыть отдельные ишшуи на облагораживание
[23:19:45] <Minoru> я там в некоторых делал &str
[23:20:08] <Minoru> но контрибьюторам, видимо, String понятнее, я не стал на этом акцентировать внимание, потому что это вне скоупа
[23:20:51] <Minoru> и да, по памяти я бы сказал, что большинство функций в util будут типа &str -> String
[23:21:19] <Minoru> хотя неплохо бы поисследовать, может, мы зря все эти временные строки создаём
[23:22:17] m4n71k0r вышел(а) из комнаты
[23:23:48] <tg> <@folexeyy> pub fn replace_all(input: String, from: &str, to: &str) -> String
pub fn consolidate_whitespace(input: String) -> String
pub fn resolve_tilde(path: String) -> String
pub fn trim(rs_str: String) -> String
pub fn trim_end(rs_str: String) -> String
pub fn quote(input: String) -> String
pub fn quote_if_necessary(input: String) -> String
pub fn make_title(rs_str: String) -> String {
pub fn absolute_url(base_url: &str, link: &str) -> String
pub fn censor_url(url: &str) -> String
pub fn get_default_browser() -> String
pub fn get_command_output(cmd: &str) -> String
pub fn run_program(cmd_with_args: &[&str], input: &str) -> String
пока как-то так
[23:24:04] <tg> <@folexeyy> Но это механически рефакторится, чо там
[23:24:46] <tg> <@folexeyy> Ну и там где String, должно быть &mut String, они ж меняют строчку оригинальную. Из сей она конвертится обычно раньше, в lib.rs
[23:28:54] <Minoru> не обязательно меняют. Я же говорю, некоторые пишут String просто чтобы не разбираться со слайсами и заимствованием :)
[23:29:08] <Minoru> если тебя интересует, как оно изначально было, смотри в src/utils.cpp
[23:29:28] <tg> <@folexeyy> кк!
[23:30:03] <tg> <@folexeyy> А есть приоритеты, что надо переносить в раст поскорее?
[23:31:42] <Minoru> а, ты прямо попереносить хочешь? Это круто! Лучше начать с того, на что уже есть ишшуи. Посмотри на тег https://github.com/newsboat/newsboat/issues?q=is%3Aissue+is%3Aopen+label%3Arust-port
[23:32:12] <Minoru> в #334, похоже, остались только сложные случаи, хотя тебе может быть норм
[23:32:21] <tg> <@folexeyy> Ну я ничо не обещаю, но интересно посмотреть. Я как раз думал, где бы поупражняться в сях
[23:32:39] <Minoru> в #447 развлечение с макросами, но тоже придётся читать плюсовый код
[23:32:57] <Minoru> тут плюсы в основном. Разница есть, в #447 ты её очень прочувствуешь :)
[23:34:16] <Minoru> если приглянется какой-то другой кусочек кода, открой для начала ишшуй, обсудим. А то вот человек открыл #413, а я помержить не могу, потому что нет методики применения gettext и ещё один модуль не портирован
[23:36:21] <tg> <@folexeyy> Оке! В целом, портировать кучу тестов, а потом макрос -- звучит весело :)
[23:37:53] <Minoru> ага! Тут, с одной стороны, немного проще, потому что FFI не нужен (у нас будет две реализации — одна на плюсах, вторая на расте). А с другой — немного сложнее, потому что макрос :)
[23:41:10] <tg> <@folexeyy> Макросы в расте это сплошное удовольствие. Они могут быть сложными, и красивыми https://github.com/fluencelabs/fluence/blob/master/sdk/rust/crates/macro/src/lib.rs#L178
Или простыми как пробка
https://github.com/fluencelabs/fluence/blob/8d02475591be16d41c52a562fcba4d2c47bbe076/cli/src/contract_status/mod.rs#L48
[23:44:15] <Minoru> да, простенькие я уже писал в rust/libnewsboat/src/logger.rs. Они действительно гораздо приятней, чем в плюсах. Нужно таки осилить Template Haskell и сравнить с ним. Или какой-нибудь из Лиспов освоить
[23:49:15] <tg> <@folexeyy> В коммон лиспе макросы тоже годные. Но вот с типами всё хуже, никаких тебе тайпклассов. Хотя я не уверен, могу ошибаться.
[23:50:16] <Minoru> думаю, они не признали бы тайпклассы. Им всё динамичненькое подавай :)
[23:50:22] <Minoru> поползу-ка я спать
[23:50:23] Minoru вышел(а) из комнаты
Powered by ejabberd - robust, scalable and extensible XMPP server Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!