http://www.reddit.com/r/SilkRoad/comments/1q18k3/we_rise_again/
Вчера открыли станцию метро "Теремки", последнюю на этой линии стройки. Далее будут строить новую, четвертую ветку метро — на Троещину, единственный оставшийся в Киеве район совсем без метро и с проблемным сообщением с центральным правым берегом.
Говорят, по радио сообщали, что станция выполнена в морском стиле, так как она ближе всего к морю. Насколько морская тема раскрыта — можете судить сами, вот фото.
http://i.imgur.com/VNCwwa0.jpg
Вчера с мобильника почему-то запостить не удалось, поэтому пощу сегодня.
Драйвер редиса возвращает 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")
Вопрос: вам не кажется это "слишком"? Я пока еще не настолько просто манипулирую типами в голове, чтоб ощутить всю ситуацию, хорошо хоть в целом могу медленно прости по шагам по коду, но есть ощущение, что что-то здесь не так.
Каждый, кто путешествовал по миру, знает, что мусульманские города могут быть намного беднее, а все же безопаснее бедных христианских, – например, в той же Латинской Америке. Или в Африке. Да что там, безопаснее многих американских. С индуистскими и буддистскими городами – то же самое. Вокруг грязновато, бедно, ободрано, но не опасно. О том же и статистика. Даже в революционном Египте 2011 года убивали в три раза реже, чем в России, или в два раза реже, чем в европейской и католической Литве. А до революции – в 2008–2009 годах – там вообще было не опаснее, чем в Швеции или Дании. То же самое можно сказать о Марокко, Тунисе или Иордании. Убийств на 100 тысяч жителей там примерно столько же, сколько в Англии, Франции или Греции. То есть 1–1,5 убийства на 100 тысяч жителей в год. В католической Бразилии убивают раз в двадцать чаще (22 убийства на 100 тысяч в год). А в Венесуэле – вообще в сорок раз (45–50 убийств на сто тысяч). Хотя какой экономический показатель ни возьми, любой покажет, что Бразилия – гораздо более богатая и развитая страна, чем Марокко или Египет, да и католическая Венесуэла тоже. В любых двадцатках, тридцатках и сотнях самых опасных городов мира восточные появляются в конце списка.
http://asozd2c.duma.gov.ru/addwork/scans.nsf/ID/18BA83EBB35845C843257B51004E7036/$FILE/262496-6.PDF?OpenElement
"1) статью 4 изложить в следующей редакции:
«Статья 4. Недопустимость злоупотребления свободой массовой информации
Не допускается использование средств массовой информации в целях совершения уголовно наказуемых деяний, для разглашения сведений, составляющих государственную или иную специально охраняемую законом тайну, для распространения материалов, содержащих публичные призывы к осуществлению террористической деятельности или публично оправдывающих терроризм, других экстремистских материалов, а также материалов, пропагандирующих порнографию, культ насилия и жестокости, эгоизм, социальный паразитизм, сексуальную распущенность, легкомысленное и (или) неуважительное отношение к сексуальным функциям и (или) реализации сексуальных функций, несоблюдение ценностей, закрепленных в Конституции Российской Федерации, и материалов, содержащих нецензурную брань."
легкомысленное и (или) неуважительное отношение к сексуальным функциям и (или) реализации сексуальных функций
Ура, товарищи! Так победимъ здравый смысл!
You know what? Fuck your stance on profanity. Fuck your priorities in life. The WTFPL is about fucking freedom and we mean it. Freedom means freedom to copy and modify and share works of art and science with the rest of mankind, but also freedom to be gay and marry and have crazy gay sex, freedom to have tattoos, freedom to say there is no God, freedom to take the pill, freedom to have an abortion. People die for being gay or atheists. Don’t tell me that there is something sacred enough that it must be protected from the mere existence of the word “fuck”. If the F in WTFPL offends you, then fuck you and your beliefs. Triple fuck you.
На жуйке очередной всплеск свободолюбия - Тоня забанила любимого многими жуйкоюзера.
Народ начал писать петиции о том, чтобы его разбанили.
Другой народ предложил забанить тех, кто просит его разбанить.
Третьи попросили, чтобы на них тоже наложили бан, ибо без того юзера им жизнь не мила.
Четвертые устроили разборки с требованиями свободы и протухшими шуточками про ПМС.
И, наконец, пятые предложили забанить всех нахуй.
Угнич забанил всех ботов горячо обсуждаемого юзера и отреагировал у себя в блоге:
@ugnich: Четыре года на Juick существует правило, согласно которому нельзя оскорблять других пользователей. И все равно регулярно находится какой-нибудь индивидуум, который сначала поливает всех говном, а потом строит из себя несчастную жертву кровавого режима.
Не можешь нормально общаться без оскорблений — уходи.
И конечно, в эти трудные времена радует юзер @ungich (причем люди до сих пор на него ведутся):
@ungich: Уже пять лет на жуйке существует традиция что я баню кого хочу. И все равно регулярно кто-нибудь удивляется.
http://i.imgur.com/V7jQXUV.jpg
сразу видно химики а не ученые
http://25.media.tumblr.com/f5ba6b645617efc98f196f48cf30743a/tumblr_mug9rtw4Ye1qzenhzo4_1280.jpg
http://25.media.tumblr.com/a541cf7dc961ffbea842a7b84ec0005a/tumblr_mug9rtw4Ye1qzenhzo2_1280.jpg
http://24.media.tumblr.com/432dd41e7be5e4d7ae5e609adedda72e/tumblr_mug9rtw4Ye1qzenhzo6_1280.jpg
http://24.media.tumblr.com/0fd3612da34bba4636154f6befe55e18/tumblr_mug9rtw4Ye1qzenhzo9_1280.jpg
http://24.media.tumblr.com/0bae0d181a77e46a5faba006c8c655c6/tumblr_mug9rtw4Ye1qzenhzo5_1280.jpg
http://25.media.tumblr.com/494d5e1245b61bd7e4ef72eca2c94d04/tumblr_mug9rtw4Ye1qzenhzo1_1280.jpg
http://31.media.tumblr.com/1da0dca1be902c70beaffbf43cd98462/tumblr_mug9rtw4Ye1qzenhzo8_1280.jpg
http://31.media.tumblr.com/3a3acaa004c78064de9797bcac99cf7f/tumblr_mug9rtw4Ye1qzenhzo3_1280.jpg
http://nimrod-code.org/
Пацаны, кто тыкал?
Выглядит как почти идеальный ЯП с паскалевским синтаксисом.
Новый блок поправок в Гражданский кодекс позволит прокуратуре требовать через суд закрытия организаций, нарушающих авторские права. Под принудительную ликвидацию могут попасть рестораны, гостиницы, парикмахерские и все прочие заведения, где музыка окажется "паленой".
Йейейей, приехал!
http://i.imgur.com/SnhOjyDl.jpg
http://slovo13.livejournal.com/1096833.html
"...Я сидел в Дахау. Мы работали на прокладке дорог. Тяжело, но в день работали восемь часов. Да, немецкий надзиратель иногда бил по щеке и обзывал еврейской свиньей. Это было ужасно. А что здесь? Урки каждый день не называют меня пархатым жидом? От них я не получаю пинков? Думаете, мне легче оттого, что бьют и обзывают меня уголовники, а не охранник? Зато там у меня была удобная кровать с чистой постелью. У меня были мыло, зубная щетка, чистое белье, теплая одежда на зиму. Все время я поддерживал связь с семьей, получал письма, посылки, никогда не голодал. Мне ненавистны проклятые нацисты. Но, лежа здесь, в этой вонючей грязи, расчесывая искусанное тело и тоскуя по дополнительной пайке, я допускаю иногда страшную мысль. Признаю, что мысль эта ужасна, но от вас ее не скрою. Если бы мне предложили выбрать между Печорлагом и концлагерем Дахау, я, кажется, выбрал бы Дахау...
Менахем Бегина "В белые ночи", глава 20 "Цель и средства"
Мегаохуительный пост про то, как нарисровать треугольник на 3dfx voodoo напрямую говоря с железкой.
http://www.openglsuperbible.com/2013/09/07/voodoo-registers-part-1/