@gds

Тег it в блоге gds

gds

Вопрос по гиту.
Вот есть рефы. refs/heads/.., refs/remotes/../.. . Они заставляют гит не собирать мусорщиком коммиты, на которые они указывают, ну и дальше по графу.
А могу ли я сделать (пусть и через низкоуровневые команды) какой-нибудь реф вида refs/mycommit, указывающий на нужный коммит, так, чтобы 1. ничего не наебнулось (все команды продолжали работать как раньше), 2. нужный коммит не был собран мусорщиком?
Мне нужна не ветка, а именно реф, невидимый в git branch -a, недоступный для нормальной работы с ним, но предотвращающий потерю нужного коммита. (подразумеваю, что мне понадобится git for-each-ref для его поиска и что-то типа git show для его чтения, но это норм.)
Нагуглить не смог, хотя и пытался, потому спрашиваю.
И, пожалуйста, не надо про рефлог.

#ovnhuz 12
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Вопрос к гитолюбам.
Допустим, мы с Иваном Ильичём работаем на дизеле, а остальные коллеги что-то делают на мастере.
Я локально ребейзю дизель поверх мастера, долго ебусь с конфликтами при этом.
Иван Ильич, ничего не подозревая, доделывает свой кусок работы, пушит в дизель свои коммиты, затем уходит в запой на две недели.
И тут я кончил ребейз, и что мне надо сделать, чтобы опубликовать новый вариант ветки "дизель"? git push origin diesel --force.
Собственно вопрос: где окажутся коммиты Ивана Ильича после моих действий?

#ovrlne 5
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

MLSSH (реализация ssh клиента и сервера) на окамле: http://dmzlj.livejournal.com/185158.html (с использованием пары dsl, насколько я понял).
Что удивительно -- никаких упоминаний по существу гуглом не ищется, и всего ~ 2k упоминаний этого слова. Ещё удивительнее -- "Возможно, вы имели в виду: VK".
Включаем паранойю!

#ovqsnf 1
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

А объясните мне, почему тупой трекер контента при клонировании репки клонирует только master branch? Какая там философия? Или, как обычно, никакой, ведь репка это всего лишь граф из рефов и блобов?
(в кои-то веки понадобилось иметь именно гит-репку, причём не из-за того, что hg-git не работает или криво работает.)
// не надо мне рассказывать, как склонировать в этом уёбище какие-то другие ветки: я умею пользоваться поисковиками для добычи знаний такого рода, но на вопрос "почему именно так?" они мне не ответили.

#ovyyie 10
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Я видел разные способы хранить интервалы дат в реляционках. Не, понятно, там два столбца, типа dt_start + dt_end, но кое-какие моменты не доходят до людей вообще. Попробую исправить.
- null как дата начала/окончания -- неудобно. Правильное решение: фиксированные даты типа 01.01.0001 и 31.12.9999 и функции/вьюхи для получения видимой пользователем даты (если такая будет). Это только выглядит криво, а на самом деле спасает от тонн ошибок, связанных с нуллами.
- главное: дата начала -- включительно, дата окончания -- исключительно. То есть, если есть дата начала 2014-12-07 00:00:00 и дата окончания 2014-12-08 00:00:00, в этот интервал попадают все даты 2014-12-07 XX:XX:XX, но не попадают 2014-12-08 00:00:00 и больше неё. С такими раскладами не получится сделать where mydate between dt_start and dt_end (если бы обе даты были "включительно"), но это абсолютно похуй, так как профит перевешивает: 1. условия не зависят от типов и форматов дат: в случае преобразования даты+времени в дату (если часы были 00:00:00) либо преобразования даты в дату+время (когда добавляют часы 00:00:00 к дате без часов) код продолжает работать как и раньше (а такие преобразования не всегда видны в коде невооружённым глазом, неявные преобразования типов таки случаются). 2. нет привязки к тому, какой "квант времени" подразумевался. Если бы интервал из примера выше был записан "концы включительно, квант = сутки", было бы "2014-12-07 .. 2014-12-07". Если бы надо было разбивать на часы, интервал внезапно преобразился бы в "2014-12-07 00:00:00 .. 2014-12-07 23:00:00". 3. часто надо рассмотреть "какие интервалы попадают на данную дату-время". В случае "квант = сутки" имеем where trunc(dt, 'DD') between dt_start and dt_end, заметьте функцию для обрезания даты и явное указание, докуда обрезать. А функции, как известно, не очень хорошо сотрудничают с оптимизатором запросов.
- следствие обоих пунктов: валидация становится не сложнее, чем check (dt_start < dt_end) (для непустых интервалов) или check (dt_start <= dt_end) (для возможно пустых интервалов).
- для извращенцев: with recursive либо connect by по условию prev.dt_end = next.dt_start

#ovqzip
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

https://wiki.postgresql.org...ew_in_PostgreSQL_9.4 -- постгрес хорошо движется вперёд, мне нравится.

#ovrvyj
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

"full stack web developer" -- эвфемизм для "биэндер".

#tsmye
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Хоть вы меня за яйца подвесьте, но в сетевых протоколах² самое сложное -- грамотное завершение соединения, а в хранилищах данных -- грамотное восстановление после падения¹. Остальное -- выполнение собственно задач протокола/хранилища и обеспечение корректности завершения/восстановления -- поровну.
¹ -- интересно, есть ли глубокое философское объяснение подобной "дуальности" (завершение соединения vs начало работы с хранилищем).
² -- кроме udp.

#tbuvu
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

[Paul Snively]

#tsiby
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

3-way merge понадобился, стало лень .rej руками разгребать. Погуглил, первый попавшийся kdiff3 поставил. И он как-то криво мержит своей автоматикой -- там, где считает, что прав, переставляет куски кода, каменты куда-то в жопу лепит; в общем, сосёт. Вручную, на конфликтах, результат корректный, только гуй кривоватый (курсор иногда не там рисуется относительно места вставки печатаемых символов).
Поэтому интересно, кто чем делает 3-way merge? Если не влом, манул какой-нибудь подкиньте, но и названия тоже ок. Или, если я заведомо криво настроил kdiff3, подскажите, что ему дёрнуть, чтобы он лучше лишний раз спросил меня, вместо того, чтобы хуйню выдавать как результат слияния.

#tsocy
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Таки дошли руки до симуляции перегрызенного кабеля (спрашивал в #ntukz).
Хорошо иногда бывает параметризовать код IO-манаткой. Получилось так: https://gist.github.com/gdsfh/c0aa2733a6d09b49f894 . Работает замечательно. Благодаря fail_seed можно получать детерминированные фейлы, что помогает при отладке.
А отладка заключалась в том, что Lwt.join как-то странно себя ведёт. В документации сказано "падает, если какой-то из тредов падает", тогда как в реальном случае висит: http://pastebin.com/scLnbQ2A . Вотзефак?

#tuxkg
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Ебусь со всякой системщиной. Явно чего-то не хватает в императивном описании алгоритмов. Например:
1. указываем, что кое-какой процесс должен быть запущен на всех живых хостах из данного множества. Если хост из множества был дохлым, но потом ожил, то надо запустить процесс на нём тоже, когда он ожил.
2. спрашиваем что-то у процессов и ждём ответа, но, если хост умер (по независимым от нас причинам), и мы это знаем, то не надо ждать ответа. (таймауты тут сработали бы надёжно, но и без них часто ясно, что ответа не будет.)
Нужна какая-то декларативная шняга, что ли? Давайте идеи.

#tscze 3
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Я не понимаю, зачем нужен tcp/ip.

#tljdm 11
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

"То, что пессимисты называют "full table scan", оптимисты называют "Map-Reduce"" [lj\jakobz]

#ntjao
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Подскажите пазязя, чем симулировать перегрызенный кабель в контексте tcp/ip-соединений? Просто потерю пакетов поставить через какой-нибудь "tc qdisc add dev lo root netem loss 70%" -- не вариант, соединение всё равно выживает, tcp же. Мне, по идее, нужно что-то такое: с определённого момента все send() в сокет проходят успешно, но ничего не отправляют (опционально, соединение отмирает по таймауту). Есть чо? Или мне не это нужно?

#ntukz 8
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Может кто помнит мой вопрос про многопоточную симуляцию в каком-то посте не отсюда. Вот, сделал её достаточно быстро, проверил ей нужное, но оно как бы мешало жить дальше, пока валялось у меня локально. Выбрал время, дописал ридмишку корявым наглийским, задокументировал интерфейс, зарелизил. https://bitbucket.org/gds/mtsim . Вообще, говно там, я предупреждал. Но мне оказалось полезным -- разное отладочное добавлял туда быстро и легко, например. Ну, собственно, и проверил свой алгоритм, который буду лепить на сишечьке, располагая семафоры в шаред мемори (вспомню -- вздрогну). Но сишное буду делать потом. Как хорошее рабство найду, как минимум.

#cwoh
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

http://zero.milosz.ca/ -- эти удобства предоставлены вам динамической типизацией. Радоваться -- обязательно, помнить таблички -- желательно.

#osnl 5
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Думаю сделать "симулятор многопоточного выполнения". Суть токова: есть пара алгоритмов с мутабельностью и синхронизацией по семафорам. Я хочу доказать полным перебором вариантов, что при любом раскладе переключений тредов результат выполнения алгоритмов будет ожидаемым (в том числе с проверкой инвариантов "если алгоритм A выполняет блок инструкций X, одновременно с ним алгоритм B не может выполнять блок инструкций Y"). (либо найти контрпример, где будет ошибка.)
Алгоритмы, наверное, будут в виде списка инструкций, напоминающих какой-то C-- или ещё что такое же примитивное.
Принимаю идеи, как именно обеспечить полный перебор вариантов выполнения, ну и вообще, в целом, идеи.
Сходу -- поставить instruction pointer в начало каждого алгоритма, перебрать различные варианты "стартует тред номер n", для каждой инструкции иметь признак "после неё будет переключение на тред номер n", и для семафоров иметь признаки "если семафор ждут, то переключено будет на тред n" и "если семафор отпустили, то его захватит тред n" (невалидные расклады типа "но ведь тред n не ждёт семафора!" игнорировать). Учитывая, что алгоритмы у меня в сумме не больше 20..25 инструкций, для двух одновременно выполняющихся тредов получится порядка 2³⁰ различных вариантов выполнения, а то и меньше. Перебрать вполне реально.

#onow 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Ебусь тут с multithreaded-хуйнёй. По пути читаю всякое говно типа "Проблема читателей-писателей" [ http://ru.wikipedia.org/wik..._читателей-писателей ].
И вот, как я понял, проблема писателей в том, что они пишут хуйню, а проблема читателей в том, что они читают хуйню. И никак художественной литературе не разомкнуть этот порочный круг. Но это так, лирическое отступление и попытка генерализации.

#onoi 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
gds

Как правильно чесать репу:
$ hg scratch

#ogwv
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.