Скоро!
Вторник, 16 октября 2012

Во всех известных поисковиках!

Все ваши комментарии!

Да, именно так, я сделал синхронизацию комментариев с Disqus. Теперь, даже если в вашем браузере отключен JavaScript, вы всё равно сможете прочитать всё.

Могу с уверенностью сказать, что Haskell — не самый подходящий язык для подобных вещей. На каком-нибудь php всё это можно было бы реализовать гораздо быстрее, но мы ведь не ищем легких путей. Самая большая проблема — работа с JSON. Библиотека для работы есть, и она неплохо реализована, но сказывается специфика Haskell и его статической типизации. Ну например,

{
  "code":0,
  "response":[
    {
      "forum":"dikmax",
      "parent":667510883,
      "author":{
        "username":"google-1b379da98470c64a0c4bc8c2230d616d",
        "about":"",
        "name":"...",
        "url":"",
        "joinedAt":"2012-09-25T03:14:42",
        "avatar":{
          "permalink":"...",
          ...
        },
        ...
      },
      "message":"...",
      ...
    },
    ...
  ]
}

Приблизительный процесс разбора:

  1. Что делать, если результат не является правильным JSON.
  2. Что делать, если корневой узел — не объект.
  3. Что делать, если у объекта нет свойства code.
  4. Если code — не является числом.
  5. Если code всё-таки число, но не 0.
  6. Если у объекта нет свойства response.
  7. Если response — не массив.
  8. Преобазовываем response в два массива: первый с комментариями, второй с ошибками разбора комментариев.

И когда какого-то «если» нет, компилятор выдаст ошибку и придется искать, какой вариант ты еще не предусмотрел. Т.е. компилятор заботится, чтобы твоя программа умела работать при любых данных. И это, конечно, огромный плюс программирования на Haskell.

Весь код для синхронизации. Получилось не очень много, но времени на него было потрачено прилично.

← Branch predictionОшибки bingbot/msnbot →