Тут не исправить уже ничего, Господь, жги! Войти !bnw Сегодня Клубы
УНЯНЯ. У нас есть немножечко инфы об этом пользователе. Мы знаем, что он понаписал, порекомендовал и даже и то и другое сразу. А ещё у нас есть RSS.
Теги: Клубы:

Пожалуй, одной из прелестей FirefoxOS будет то, что теперь в этом
изобилии говняных интерфейсов можно будет сесть и за один-два вечера
наотправлять "пулл-реквестов" к любимым приложениям, которые будут
банально расставлять отступы, выравнивать шрифты ну и так
далее. Почему-то на андроиде это делать, видимо, очень сложно.

#D0KAFM (12+1) / @kb / 4275 дней назад

Драйвер редиса возвращает 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 / 4275 дней назад

Ну короче уже разными клиентами подобавлял, поразрешал. Если снова выёбываться будет -- значит сам лох.

#XZ71KL (4) / @kb / 4278 дней назад

Внимание, системное сообщение!
Спамооборона классифицировала Ваше сообщение как спам. Если это ошибка, пожалуйста, перейдите по ссылке и выполните инструкции, описанные на открывшейся странице.
http://online.yandex.ru/captcha.xml?u=kost-bebix%40ya.ru&t=2e06f4e44b4701cd800156ebe1b0e2a40f48e3bf

#UQZCT3 (14+1) / @kb / 4278 дней назад

Внимание, системное сообщение!
Спамооборона классифицировала Ваше сообщение как спам. Если это ошибка, пожалуйста, перейдите по ссылке и выполните инструкции, описанные на открывшейся странице.
http://online.yandex.ru/captcha.xml?u=kost-bebix%40ya.ru&t=cf201c7489f5cc7d7fca69023a12dddac124d59b

#YUB06I (5+1) / @kb / 4280 дней назад

Программист использует условие "buf + len >= buf_end" для проверки на переполнение указателя, подразумевая, что при очень большом значении будет осуществлено переполнение размерности типа. GCC оперирует тем, что значение после переполнения переменной с указателем в стандарте языка С считается неопределённым.

Пацаны, не знаю, как вы, а я лично тут за GCC.

http://www.opennet.ru/opennews/art.shtml?num=38293

#CYQRA0 (8) / @kb / 4283 дня назад

Spiderpig, Spiderpig, does whatever Spiderpig does!

(c) Чувак, отвечающий на критику Леннарта о том, что Убунту без
Системд обречены. // да, новые разборки, новые расколы и выяснения
отношений

http://gentooexperimental.org/~patrick/weblog/archives/2013-10.html#e2013-10-29T13_39_32.txt

#AU4567 (0+2) / @kb / 4284 дня назад

Внимание, системное сообщение!
Спамооборона классифицировала Ваше сообщение как спам. Если это ошибка, пожалуйста, перейдите по ссылке и выполните инструкции, описанные на открывшейся странице.
http://online.yandex.ru/captcha.xml?u=kost-bebix%40ya.ru&t=24d1c1ccca23e007129275cb11e4ed04493bd3c9

#6J0QGL (5+1) / @kb / 4284 дня назад

We launched datastore with support for three platforms: iOS, Android, and JavaScript

#041F9R (15+1) / @kb / 4285 дней назад

Кстати, официально признаю идею перенести Ctrl на капслок очень удачной. Действительно теперь могу сказать, что стало лучше, причем не только в емаксе, а в файрфоксах и прочих местах тоже.

#G6YENQ (12) / @kb / 4285 дней назад

Мда. Докер кеширует как-то очень странно, чего-то я не понимаю. Один и тот же кусок вместо чтения из кеша заново пересобирает иногда (но не всегда). В связи с этим придётся "коммитить образ" ghc/cabal и дальше с него начинать. В общем, штука очень крутая, но до конца не ясны все плюсы и минусы в плане полезных юз-кейсов.

#C9FG0D (0) / @kb / 4285 дней назад

Решил ловить стековерфлоу таки при помощи запуска некоторых воркеров с
профилированием и стек трейсами в продакшне. Т.к. в продакшне у нас
ubuntu 10.04, надо собрать под ней проект. Пытаюсь в одной консоли
собрать внутри Vagrant, в другой -- внутри Docker. Посмотрим, где
быстрее / удобнее / вообще получится.

#LM71TY (0) / @kb / 4285 дней назад

Блять, ребята, что это за говно с яндексом и спамообороной? Я думал это какая-то моя старая шутка, а оно час назад отправлено было.

#A3K4GI (7+1) / @kb / 4288 дней назад

Внимание, системное сообщение!
Спамооборона классифицировала Ваше сообщение как спам. Если это ошибка, пожалуйста, перейдите по ссылке и выполните инструкции, описанные на открывшейся странице.
http://online.yandex.ru/captcha.xml?u=kost-bebix%40ya.ru&t=85844bed826d500d91b6b851c71f247039c6977b

#L86IPZ (4+1) / @kb / 4288 дней назад

TIL всякие БД не считают кол-во элементов в ветвях индексов, потому OFFSET n сканирует n элементов.

#NO7XMQ (0) / @kb / 4295 дней назад

Все на http://www.opennet.ru/opennews/art.shtml?num=38185#, пойнты, пстачи, жуйки больше не нужны.

#FBY8J2 (3+1) / @kb / 4296 дней назад

новый delicious
вход через facebook
после входа просит ввести имя, имейл, юзернейм, пароль, капчу

#NNTK9E (6) / @kb / 4297 дней назад

Use Python to discover when someone unfriends you on Facebook

#4OC0ZL (0) / @kb / 4297 дней назад

"Я сегодня утром подписал указ. Уже больше призыва не будет. Там все расписано, как будут увольняться в запас солдаты срочной службы, и уйдут в этом году последние, и больше не будем призывать", - заявил Янукович во время встречи с женщинами - Героями Украины.

#SI8A7S (2) / @kb / 4298 дней назад

На жуйке сказали, что путин^W янукович сделал контрактную армию

// http://www.eurosmi.ru/125v_ukraine_otmenili_obyazatelnuyu_slujbu_v_armii.html

#H46I5D (1+2) / @kb / 4298 дней назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

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