Best viewed with LeechCraft on Microsoft Linux. Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1125.1 пользователей не могут ошибаться!
?6325
прекрасное6147
говно5799
говнорашка5252
хуита4168
anime2870
linux2486
bnw2422
music2326
log2102
рашка2029
pic1879
ололо1785
быдло1421
украина1391
сталирасты1346
дыбр1162
гімно1158
роботы_не_одобряют1005
bnw_ppl968

Боремся с говнохостингами вместе: % ~/rehost --chat ~/rehost fs:/ipfs/bafk4bzacib45uzbwzccvmgbquo5qaayyvti6bdz7zzxcmucknsdvvsi4cubkobt36v5t3llxmf6piwj4sylwvpox45szwkj4vu4qikavowm3jdkb сохранил на всякий случай
#40ZJZQ (55) / @voker57 / 17 дней назад
ребейзнул свой патч (остался один!) на последнюю ипфс, жрет вроде столько же но работать должно лучше https://github.com/Voker57/go-ipfs
#ZND22A (4) / @voker57 / 18 дней назад
Как и рекомендовали ведущие идеологи разработки софта, из ipfs решили выкинуть собственный пакетный менеджер gx, который находил пакеты в собственно ipfs. gx их не устраивал тем, что в не хватало каких-то тулз, и запостив краткий ишшью https://github.com/ipfs/go-ipfs/issues/6108, в котором просуммировали базар в курилке после совещания, на котором whyrusleeping уговаривали допилить gx а он отнекивался ибо нашел новую игрушку, gx удалили а go mod впилили. Вместо gx теперь в коде есть файлик в котором указываются нужные версии модулей, и еще один, в который записываются адреса гита и какие-то чексуммы. При запуске билда эти гиты начинают качаться, по дороге выясняется, что этих ревизий и тегов в гитах уже нет, а в других гитах ГНУ/ТЛС ЕГГОГ -27. После такой оказии весь скрипт начинается заново качать все ревизии, кеша там нет. Теперь остается только последовать совету следующих идеологов и рекомендовать ставить ipfs через докер, имедж собранный под строгим контролем в Protocol Labs.
#V2Q0K2 (49+1) / @voker57 / 21 день назад
выложил код вики с bitcheese.net: https://github.com/Voker57/bitcheese
#QL6WQH (2) / @voker57 / 737 дней назад
Братишки, я вам сорц поменеджить принес: https://www.fossil-scm.org/ Юзать я это не пробовал, но давайте разберем по частям ими написанное: > Integrated Bug Tracking, Wiki, and Technotes - In addition to doing distributed version control like Git and Mercurial, Fossil also supports bug tracking, wiki, and technotes. Отличное начало, я знаю инит-систему которая начиналась так же! > Fossil is a single self-contained stand-alone executable Заебись, у меня как раз иноды кончаются и пакетного менеджера нет. Ща заживем. > TH1 scripting language Недоязычок в комплекте, ахаха, наканецта > https://www.fossil-scm.org/index.html/doc/trunk/www/antibot.wiki Тут автор рассказывает как он героически борется с ботами. Надо просто проверять у всех яваскрипт и всех, у кого его нет, не пускать никуда! Гениально! Клаудфлер не нужен, Wait a minute со спиннером встроен прямо в VCS. > GIT: Ad-hoc, pile-of-files key/value database FOSSIL: Relational SQL database Действительно, нахуй все эти кучи файлов которые может любой распарсить и починить. Надо все сложить в базу данных, у которой по определению одна реализация. // написанная тем же автором, по совпадению > Git strives to record what the development of a project should have looked like had there been no mistakes. > Fossil, in contrast, puts more emphasis on recording exactly what happened, including all of the messy errors, dead-ends, experimental branches, and so forth. Вот это топ удобно. Всегда мечтал иметь в проекте кучу несвежей истории, ошибочных коммитов. Сядешь, бывало, у подогретого i7, и вспоминаешь как ты обосрался в позапрошлом году. И скачивать это все при клоне тоже удобно. but wait, у автора есть для этого решения! > https://www.fossil-scm.org/index.html/doc/trunk/www/shunning.wiki Итак, мы можем пометить некий объект в репе как shunned и скачиваться он не будет, только храниться там уже где есть. Изящное решение. Только проверить все, что из него вытекает, криптографически мы никак не сможем, но это похуй. Сервер свой человек, ему можно доверять))) > Autosync mode vs Manual-merge workflow Можно выбрать одно, или централизованная работа где все поддерживают анальную связь с сервером, или распределенность. Т.е. или ты молишься на один сервер и при его падении всё идет по пизде, или хранишь у себя полную копию со всеми зафейленными бранчами, если из нее админ не зашаннил лишнее.
#U0234R (7+1) / @voker57 / 754 дня назад
> filter (/= ".") . groupBy (\a b -> '.' /= a && '.' /= b) Трава не наркотик.
#2YC9FR (7) / @ndtimofeev / 1077 дней назад
public FileCollection minus(final Iterable<FileCollection> collections) { DeprecationLogger.nagUserWith("The minus(Iterable<FileCollection>) method and using the '-' operator in conjunction with an Iterable<FileCollection> object have been deprecated and are scheduled to be removed in " + GradleVersion.current().getNextMajor().getVersion() + ". Please use the minus(FileCollection) method or the '-' operator with a FileCollection object instead."); return this.minus(new UnionFileCollection(collections)); } from: https://github.com/gradle/gradle/blob/db9d00d7a463fa8bbffa453cf04d6105a1dca77d/subprojects/core/src/main/groovy/org/gradle/api/internal/file/AbstractFileCollection.java кекнул с nagUserWith
#0RZRPB (0) / @hdghg / 1189 дней назад
Задумался что в контексте monad remote имеет смысл специальный класс OnException с одноименным методом таким что для любых двух buffered команд справедливо: (cmd1 `onException` hnd1) <*> (cmd2 `onException` hnd2) == (cmd1 <*> cmd2) `onException` (hnd1 >> hnd2) Правда форкать exceptions так не хочется. Также никак не пойму кто кому суперкласс: OnException для MonadCatch или наоборот.
#XLPWTF (0) / @ndtimofeev / 1253 дня назад

https://github.com/4DA/eshell-toggle

Набыдлил простую фичу: по шоткату (например s-`) показывается консолька eshell под активным окном с каталогом текущего буфера.
По этому же шоткату убирается.

#RIAJSG (0) / @ninesigns / 1385 дней назад
Интересно, в http://code.google.com/codejam/ кто участвует? Палите ники.
#RSDXHU (1) / @ygrek / 1536 дней назад
https://github.com/SFTtech/openage/blob/master/doc/code_style/mom.h программисты шутят про мамаш
#9LOQVM (0+1) / @dulo_t-34 / 1553 дня назад

Костыли чтобы заюзать org-capture для того чтобы добавить запись в файлик ledger.
Плюс комлишен Accounts из задаваемого списка.

https://github.com/4DA/emacs-stuff/blob/master/ledger-completed-capture.el

Работает примерно так

#AMPGD9 (0) / @ninesigns / 1831 день назад

Увидел следующую замену systemd:

#define _XOPEN_SOURCE 700
#include <signal.h>
#include <unistd.h>

int main()
{
    sigset_t set;
    int status;

    if (getpid() != 1) return 1;

    sigfillset(&set);
    sigprocmask(SIG_BLOCK, &set, 0);

    if (fork()) for (;;) wait(&status);

    sigprocmask(SIG_UNBLOCK, &set, 0);

    setsid();
    setpgid(0, 0);
    return execve("/etc/rc", (char *[]){ "rc", 0 }, (char *[]){ 0 });
}

Какие подводные камни?

#8NZN4P (7+1) / @ninesigns / 1960 дней назад

Расписание горнолыжных соревнований TZ: MSK+4
| Day | Date | Begin | End | Discipline |
| День 3 | Воскресенье, 9 февраля | 11:00 | 13:10 | Скоростной спуск, мужчины |
| День 4 | Понедельник, 10 февраля | 11:00/15:00 | 12:30/16:10 | Суперкомбинация, женщины |
| День 6 | Среда, 12 февраля | 11:00 | 13:10 | Скоростной спуск, женщины |
| День 8 | Пятница, 14 февраля | 11:00/15:30 | 12:30/16:40 | Суперкомбинация, мужчины |
| День 9 | Суббота, 15 февраля | 11:00 | 13:10 | Супергигант, женщины |
| День 10 | Воскресенье, 16 февраля | 11:00 | 13:10 | Супергигант, мужчины |
| День 11 | Вторник, 18 февраля | 11:00/14:30 | 13:00/16:10 | Гигантский слалом, женщины |
| День 12 | Среда, 19 февраля | 11:00/14:30 | 13:00/16:10 | Гигантский слалом, мужчины |
| День 15 | Пятница, 21 февраля | 16:45/20:15 | 18:00/21:25 | Слалом, женщины |
| День 16 | Суббота, 22 февраля | 16:45/21:50 | 18:15/20:15 | Слалом, мужчины |

#U2DX0Y (0) / @ninesigns / 1962 дня назад

Костыль для емакса чтобы в конец буфера вставлялся первый встретившийся выше номер поста или комента (вида #foo/bar).

(defun do-reply-to-post-comment ()
(if (re-search-backward
"^#[0-9a-zA-Z]+\(/[0-9a-zA-Z]+\)?" nil t 1)
(progn
(end-of-buffer)
(insert-buffer-substring-no-properties (current-buffer)
(match-beginning 0) (match-end 0))
(insert " "))
(message "No comments found")))

(defun reply-to-post-comment()
(interactive)
(save-excursion
(do-reply-to-post-comment))
(end-of-buffer))

(global-set-key (kbd "C-c r") 'reply-to-post-comment)

#URWGTT (24) / @ninesigns / 1989 дней назад

Драйвер редиса возвращает Redis (Either Reply a). При операции HGET возвращает, соответственно, Redis (Either Reply (Maybe ByteString)), типа значения по ключу может и не быть. Программист для упрощения пишет сначала специальную функцию redis', которая заворачивает ответ редиса в EitherT-based монаду, чтоб соединять подобные вычисления и возвращать первую неудачу:

newtype Redis' a = Redis' (EitherT Redis.Reply Redis.Redis a) deriving (MonadIO)
instance Monad Redis' where
    return = Redis' . EitherT . return . Right
    (Redis' m) >>= f = Redis' $ m >>= \rv -> unwrapRedis' $ f rv
redis' = Redis' . EitherT

Таким образом, теперь, если вы получаете ответ Redis (Either Reply a), вы его преобразуете в

Redis' (EitherT Reply Redis a)

и можете соединять подобные вычисления в do-блоке типа:

do
    res <- redis' $ Redis.hget foo bar
    res2 <- redis' $ Redis.hget baz zab

и вычисление остановится на первом возврате ошибки.

Далее. Программисту необходимо по кучке значений сделать HGET и вернуть это как-то внутри кортежа, поскольку мы внутри новой монады Redis' -- завернуть результат в неё. В случае, если значения хоть по одному ключу не существует, хочется вернуть Nothing для всех. Потому создаётся новая монада:

newtype HashFields a = HashFields (MaybeT Redis' a)
    deriving (Functor, Monad)
instance Applicative HashFields where
    pure = return
    (<*>) = ap

описывающая вычисления типа Redis', которые могут вернуть неудачу. Пишется новая функция

hashField = HashFields . MaybeT . redis'

способная завернуть результат неудачи в новую монаду, которая умеет останавливаться на первой неудаче. Также пишется специальная функция для HGET:

getField :: ByteString -- ^ Key
         -> ByteString -- ^ Hash field name
         -> HashFields String
getField key field = fmap toString $ hashField $ Redis.hget key field

Также напишем функцию, которая "запустит" наше вычисление:

getRedisFields :: forall a. HashFields a -> Redis' (Maybe a)
getRedisFields (HashFields f) = runMaybeT f

И теперь лёгким движением руки мы можем сделать что-то вроде:

getRedisFields ((,,,,,) <$>
    getField k "foo" <*>
    getField k "bar" <*>
    getField k "baz" <*>
    getField k "zab" <*>
    getField k "rab" <*>
    getField k "oof")

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

#DEENSA (6+1) / @kb / 2055 дней назад

Суровый выхлоп работы ракетовского макростеппера:
(define (g)
(forever (let ([abort abort])
(unless #t (abort)) (abort))))))

Для тех, кому интересно: первый abort имееет контекст из раскрытия макроса while', а второй - из раскрытия макросаforever', этакие костыли для обхода гигены без использвания stx-params.
сорцы: http://paste.lisp.org/display/138905
соус: barzilay.org/misc/stxparam.pdf‎

#1UQKN6 (1) / @ninesigns / 2112 дней назад

$ torify cabal update
Downloading the latest package list from hackage.haskell.org
Segmentation fault

#RE0I13 (0) / @ninesigns / 2141 день назад

Короче, меня заебало в emacs, что backward-kill-word удалит
int array [];
^^^^^^^^^
вот это, вместо вот этого
int array [];
^^^
Простого способа пофиксить это я не нашел, то есть либо хачить syntax-table, чтобы знаки пунктуации принадлежали word syntax class,
либо перебыдлить backward-kill-word самому.

Что я и сделал. Найденым багам буду рад шопиздец.
https://github.com/4DA/emacs-stuff/blob/master/smart-kill.el

P.S В бонус перебыдлил kill-word.

#RXXVDE (2) / @ninesigns / 2147 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.