Twitter Bootstrap 2.1

Вышел новый Twitter Bootstrap. И мой блог успешно на него мигрировал, попутно прихватив с собой обновленный jQuery 1.8.0. Соответственно обновилось всё, что было из Bootstrap позимствованно. Верхняя панель стала еще прекраснее!

К тому же в блоках кода теперь подсвечиваются строчки при наведении на них мышкой. Я думаю, это должно облегчить их чтение. Ну и как обычно, если что-то не работает — не стесняемся оставить комментарий. Не стесняемся его оставить, даже если всё работает.

Обновление блога

Совершенно внезапно наш блог постигло самое масштабное внутреннее обновление со времен его создания. Я сделал то, что давно собирался: написал полностью свой рендерер для постов. Теперь я полностью отвечаю за внешний вид постов, а не какой-то там Text.Pandoc.Writers.HTML.

Теперь я могу реализовывать (и уже начал) всякие специальные прикольные штуки, например, другие сноски. Они теперь отображаются не внизу поста, а прямо в нужном месте при нажатии на соответсвующую ссылку мышкой1.

Самая жесть во всем написанном коде — это обработка raw-данных. Как вы, возможно, знаете, в markdown можно вставлять голый html, не обязательно валидный. А Pandoc, парсер для markdown, позволяет еще и смешивать raw-данные и специальную размету. Например, из такого текста:

<span>*Текст*</span>

будет получен следующий результат:

<span><em>Текст</em></span>

Добавим к этому, что используемый шаблонизатор heist оперирует только валидными структурами. Вот и получаем, что блоки, которые содержат raw-данные, сначала собираются в виде html-строки, а затем парсятся в валидную структуру для шаблонизатора. В то же время для любых других блоков стуктуру для heist можно генерировать напрямую.

В любом случае смотрим, изучаем, находим ошибки и сообщаем мне о них.


  1. Да-да, вот прямо как сейчас.

Теги

Это было долго, но я это сделал. Теперь на сайте есть система тегов! Все нажимаем на ссылки рядом с желтым ярлыком и любуемся. Осталась мелочь: добавить облако тегов или хотя бы список. Только куда бы его повесить?

Row retrieval was canceled

Здравствуйте. Сегодня я расскажу вам про Haskell и про то, что получается на стыке его ленивости и императивности всех окружающих программ.

Как вы, наверное, уже знаете, я написал этот сайт на Haskell с использованием Snap Framework. Так вот, для хранения данных у меня используется MySQL, а для работы с этими данными — целая куча библиотек: HDBC, HDBC-mysql, snaplet-hdbc. И где-то во всем этом зоопарке при выполнении запроса к базе возникала ошибка:

SqlError {seState = "", seNativeError = 2050, seErrorMsg = "Row retrieval was canceled by mysql_stmt_close() call"}

Гугл ничего не знал об этом, я тоже, поэтому ошибку отложил до лучших времен, благо возникала она нечасто и лечилась перезагрузкой страницы. И вот на глаза мне попалась такая страница на Stack Overflow. Я полез смотреть код Snap.Snaplet.Hdbc:

-- | Execute a @SELECT@ query on the database by passing the query as 'String',
-- together with a list of values to bind to it. A list of 'Row's is returned.
query
  :: HasHdbc m c s
  => String -- ^ The raw SQL to execute. Use @?@ to indicate placeholders.
  -> [SqlValue] -- ^ Values for each placeholder according to its position in
                 -- the SQL statement.
  -> m [Row] -- ^ A 'Map' of attribute name to attribute value for each
                 -- row. Can be the empty list.
query sql bind = do
  stmt <- prepare sql
  liftIO $ HDBC.execute stmt bind
  liftIO $ HDBC.fetchAllRowsMap' stmt

Вроде всё хорошо. Единственное: может, попробовать закрыть statement принудительно? Что я и сделал. Не поверите, помогло. По крайней мере ошибок я больше не увидел. Две переписанных мною функции:

query :: HasHdbc m c s => String -> [SqlValue] -> m [Row]
query sql bind = do
  stmt <- prepare sql
  liftIO $ HDBC.execute stmt bind
  rows <- liftIO $ HDBC.fetchAllRowsMap' stmt
  liftIO $ HDBC.finish stmt
  return rows
  
query' :: HasHdbc m c s => String -> [SqlValue] -> m Integer
query' sql bind = withHdbc $ \conn -> do
  stmt <- HDBC.prepare conn sql
  count <- liftIO $ HDBC.execute stmt bind
  liftIO $ HDBC.finish stmt
  liftIO $ HDBC.commit conn
  return count

Если вы вдруг снова увидите эту ошибку, вы же мне сообщите?

Обновленный дизайн

Немного обновил дизайн. По сути, я только добавил фон на страничку. Ну и фон у панелек постарался сделать сообразно общему фону.

Для мобильных браузеров всё остается как и раньше. Фиксированный фон (background-attachment: fixed) для них оказался слишком сложной задачей.

Наслаждаемся, пишем комментарии.

← СтаршеМоложе →