Перевед rss feed блога на feedburner

8 мая 2009
Комментарии к записи Перевед rss feed блога на feedburner отключены

Собственно сабж, долго подбирал пароль к старому аккаунту feedburner, чтобы перенести свои фиды в аккаунт на гугле (для меня было откровением, что теперь фидбернер под крылом гугла, продались чтоль?), в итоге подобрал, перенес.

Раньше фид ссылался на блог на блоггере, а теперь собственно ссылается на этот блог.

Редирект фида на сайте сдела с помощью вот этого плагина: http://wordpress.org/extend/plugins/feedburner-plugin/, не смотря на то что был рекомендован другой, ну не заладилось что-то с ним, или я чего-то не понял или не работает оно, хотя сделал все по инструкции.

Вообщем кто не понял, теперь адрес фида вот такой: http://feeds.feedburner.com/mrdaark 🙂

Пользуйтесь на здоровье. 🙂

Опубликовал:
Раздел: Мои новости

Нетбук в семью :)

Сегодня заказал для жены вот такого красавца:

Samsung NC10-KA01

Это Samsung NC10-KA01, неплохой такой нетбук с заявленным максимальным временем работы 8 часов.

по характеристикам:

Процессор Intel Atom N270 (1.60 ГГц, FSB 533 МГц, L2 cache 512 Кб)
Набор микросхем Intel 945GSE Express
Оперативная память 1024 Мб DDR2 (до 1,5 Гб)
Дисплей 10.2″WSVGA (1024×600), неглянцевый, LED подсветка
Видеосистема Intel GMA 950 128 Мб (до 384 Mб памяти)
Жесткий диск 160 Гб
Картридер 3-в-1 (SD, SDHC, MMC)
Звук Intel High-Definition audio, Эффект EDS (эффект улучшения цифрового звука), Стереодинамики 3 Вт (1,5 Вт x 2)
Порты 3 x USB 2.0, line-out, mic-in, RJ-45, D-SUB,
Связь
  • Cеть: 10/100 Mbps Ethernet
  • WiFi: Atheros 802.11b/g
  • Bluetooth 2.0 + EDR
Питание 6-элементный батарейный блок (Li-ion)
Время работы До 8 ч
Особенности
  • Встроенная цифровая камера 1.3 Mпикс
  • Предустановленное ПО:
    • Samsung Recovery Solution III
    • Samsung Magic Doctor
    • Samsung Update Plus
    • Easy Display Manger
    • Easy Battery Manager
    • Easy Network Manager
    • Easy SpeedUp Manager
    • McAfee SecurityCenter
    • Adobe Acrobat Reader
Операционная система Windows XP Home Edition
Размеры, мм 261×185,5×31,8
Вес, г 1330

Вообщем практически все как обычно. Радуют отзывы о клавиатура, ей поют всяческие дифирамбы.

Поначалу смотрел в сторону MSI Wind U120, но как то пока искал где его заказать, наткнулся на обзор самсунга и он меня прям таки обрадовал. Вообщем заказа его на озоне, вместе с доставкой получилос 16.418 рублей, вообщем нормально, если учесть что до этого смотрел в местных магазинах нетбуки от 16 до 23тыр. Теперь ждем-с…

Только тсссс, жене сюрприз. 🙂

Опубликовал:
Раздел: Мои новости

MySQL: базу знаю :)

6 мая 2009
Комментарии к записи MySQL: базу знаю :) отключены

Сегодня, не то чтобы от нечего делать, а так, прошел курс на сайте http://www.intuit.ru/ «Введение в СУБД MySQL». Прошел так, чтобы себя проверить, а то совсем самоучка, а тут хоть какое-то структурирование знаний. Честно скажу практически ничего нового для себя не вынес, пройти было на удивление легко, с первым тестом повозился (там теоретические знания по СУБД), никак он мне отлично ставить не хотел, все хорошо да хорошо. :))

Но вообщем все остальные, направленные на практику, сдал без проблем и сразу на отлично, вообщем-то как и экзамен. Местами правда у них в вопросах неоднозначные ответы, зависящие от нераскрытых входных данных, но это фигня 🙂

Cертификат даже себе выписал (правда только электронный). Посмотреть можно по адресу: http://www.intuit.ru/diploma/lQ2wte8s3eAw/P00057527/. Вообщем штука прикольная, надо будет поискать еще курсов, может чего дельного для себя найду, заодно и экспиренс прокачаю 🙂

Опубликовал:

Миграция на jabber: начало пути

13 марта 2009

Недавеча как недавно мой ноутбук отправился в сервисный-центр, что-то вдруг приводу вздумалось не писать диски, я обиделся после 6го запоротого и отнес.

А посколько как-то профиль аськин скинуть не догадался, то решил попробовать перейти на джаббер, заодно посмотреть как пипл на это отреагирует.

Вообщем скачал миранду, поставил на богом забытом сервере, настроил в ней автоответчик, примерно с таким сообщением: «В связи с тем, что мой ноутбук отдыхает в сервисном центре и профиль icq мне недоступен, найти меня можно в jabber: i@mrdaark.com.»

Ну повесил, включил gtalk и сижу довольный что мне никто не пишет. На третий день стало как-то не по себе, и решил я проверить, а чего это, может не работает оно… как выяснилось, действительно, не работает. Т.к. jid у меня не напрямую от гугла, а через мой домен, то откуда же внешние сервера могут узнать где это у меня jabber сервер, по адресу то оно не отвечает.

Но нет худа без добра, полез в справку гугла, и нашел там информашку о том, как же все таки научить все это безобразие правильно работать. Как выяснилось достаточно всего лишь прописать кучку srv записей к домену:

_xmpp-server._tcp.mrdaark.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_xmpp-server._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
_xmpp-server._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server2.l.google.com.
_xmpp-server._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server3.l.google.com.
_xmpp-server._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server4.l.google.com.
_jabber._tcp.mrdaark.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_jabber._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
_jabber._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server2.l.google.com.
_jabber._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server3.l.google.com.
_jabber._tcp.mrdaark.com. IN SRV 20 0 5269 xmpp-server4.l.google.com.

Не забыв конечно увеличить id зоны, дабы оно обновилось на родительских dns-серверах.
Вообщем через пару минут я сумел отправить сообщение из вне на мой jid, а еще через пару часов и в обратном направление.

Правда что прикольно мне так до сих пор никто и не написал, или народ решил не запариваться и тупо подождать когда у меня ноут заработает или одно из двух. :))

Опубликовал:
Раздел: Мои новости

Изобретая велосипеды: PHP шаблонизатор

13 февраля 2009

Началось все с того что мне не нравятся существующие темплейтеры типа smarty. Не прет.

Написал свой, простенький, но для повседневности хватает.

вот такой вот класс:

  1. <?php
  2. class Template {
  3.     private $template;
  4.     private $vars;
  5.     private $blocks;
  6.     private $res;
  7.     private $registry;
  8.  
  9.     function __construct($registry) {
  10.         $this->registry = $registry;
  11.     }
  12.  
  13.     private function getvars($block="")
  14.     {
  15.         $str="";
  16.         if ($block=="")
  17.         {
  18.             $str=$this->res;
  19.         }
  20.         else
  21.         {
  22.             if (isset($this->blocks[$block]))
  23.             {
  24.                 $str=$this->blocks[$block];
  25.             }
  26.         }
  27.         $m=array();
  28.         preg_match_all("/{%(.*)?%}/ismU",$str,$m,PREG_SET_ORDER);
  29.         return $this->assoc($m);
  30.     }
  31.  
  32.     private function assoc($arr)
  33.     {
  34.         $r=array();
  35.         if (count($arr)>0)
  36.         {
  37.             foreach ($arr as $v)
  38.             {
  39.                 $r[$v[1]]=$v[0];
  40.             }
  41.         }
  42.         return $r;
  43.     }
  44.  
  45.     private function getblocks()
  46.     {
  47.         $m=array();
  48.         preg_match_all("/<!--(.*)?-->.*?<!--\/\\1-->/ismU", $this->template, $m ,PREG_SET_ORDER);
  49.         $this->blocks=$this->assoc($m);
  50.     }
  51.  
  52.     private function getinclude($data)
  53.     {
  54.         $m=array();
  55.         preg_match_all("/<!--include:(.*)?-->/ismU", $this->template, $m ,PREG_SET_ORDER);
  56.         foreach ($m as $i)
  57.         {
  58.             $t=new template($this->registry);
  59.             $this->res=str_replace($i[0],$t->compile($data,site_path.$i[1]),$this->res);
  60.             unset($t);
  61.         }
  62.     }
  63.  
  64.     function getphp()
  65.     {
  66.         $m=array();
  67.         preg_match_all("/{--(.*)?--}/ismU", $this->res, $m ,PREG_SET_ORDER);
  68.         $out="";
  69.         foreach ($m as $p)
  70.         {
  71.             ob_start();
  72.             eval ("echo ".$p[1].";");
  73.             $out = ob_get_clean();
  74.             $this->res=str_replace($p[0],$out,$this->res);
  75.         }
  76.     }
  77.  
  78.     private function setvars($tpl,$vars,$d)
  79.     {
  80.         $str=$tpl;
  81.         foreach ($vars as $var => $search)
  82.         {
  83.             if (isset($d[$var]))
  84.             {
  85.                 $str=str_replace($search,$d[$var],$str);
  86.             }
  87.             else
  88.             {
  89.                 $str=str_replace($search,"",$str);
  90.             }
  91.         }
  92.         return $str;
  93.     }
  94.  
  95.     private function compileblock($block,$data)
  96.     {
  97.         $tpl=$this->blocks[$block];
  98.         $res="";
  99.         $vars = $this->getvars($block);
  100.         //print_r($vars);
  101.         foreach($data as $d)
  102.         {
  103.             $res.=$this->setvars($tpl,$vars,$d)."\n\n";
  104.         }
  105.         $this->res=str_replace($tpl,$res,$this->res);
  106.     }
  107.  
  108.     function compile($data,$tplfile)
  109.     {
  110.         $this->template=file_get_contents($tplfile);
  111.         $this->res=$this->template;
  112.         $this->getblocks();
  113.         foreach ($this->blocks as $block => &$v)
  114.         {
  115.             if (isset($data[$block]))
  116.             {
  117.                 $this->compileblock($block,$data[$block]);
  118.             }
  119.             else
  120.             {
  121.                 $this->res=str_replace($this->blocks[$block],"",$this->res);
  122.             }
  123.         }
  124.         $this->res=$this->setvars($this->res,$this->getvars(),$data);
  125.         $this->getinclude($data);
  126.         $this->getphp();
  127.  
  128.         return $this->res;
  129.     }
  130.  
  131.     function html($data,$tplfile)
  132.     {
  133.         echo $this->compile($data,site_path.$tplfile);
  134.     }
  135. }
  136. ?>

Чтобы было проще понять, вот пример шаблона:

  1. <!--include:tpl/header.tpl-->
  2. <table class="adminlist" style="width:300px;">
  3. <tr>
  4. <th class="title" width="3%"><input name="toggle" id="toggle" value="1" onclick="checkAll(1);" type="checkbox" /></th>
  5. <th class="title" width="97%">&nbsp;</th>
  6. </tr>
  7.  
  8. <!--users-->
  9. {--('1'=='{%flag%}') ? '<tr><td colspan="2">{%gname%}</td></tr>':'' --}
  10. <tr class="row0">
  11. <td><input type="checkbox" class="checkbox" name="check_{%id%}" /></td>
  12. <td><a href="/users/edit/{%id%}">{%name%}</a></td></tr>
  13. <!--/users-->
  14.  
  15. {--('write'=='{%right%}') ? '<tr><td colspan="6" style="text-align:center;"><a href="/users/create">Добавить</a></td></tr>':''--}
  16. </table>
  17.  
  18. <!--include:tpl/footer.tpl-->

Как использовать? примерно вот так:

  1. <?php
  2. $d=array();
  3. $d['users'][1]['id']=1;
  4. $d['users'][1]['name']='User 1';
  5. $d['users'][1]['game']='Group 1';
  6. $d['users'][1]['flag']=1;
  7. $d['users'][2]['id']=2;
  8. $d['users'][2]['name']='User 2';
  9. $d['users'][2]['game']='Group 1';
  10. $d['users'][2]['flag']=0;
  11. $d['users'][3]['id']=3;
  12. $d['users'][3]['name']='User 3';
  13. $d['users'][3]['game']='Group 2';
  14. $d['users'][3]['flag']=1;
  15. $d['right']='right';
  16.  
  17. $template = new Template($registry);
  18. $template->html($d,'tpl/usersform.tpl');
  19.  
  20. ?>

Поподробнее про теги шаблона:
{%name%} — переменная
<!—include:file.tpl—> — включение внешнего шаблона (количество включений ограничено только оперативной памятью 🙂
повторяющиеся блоки оформляются так
<!—blockname—>
{%name%}
<!—/blockname—>
где blockname — это массив значений в передаваемом параметре
условия задаются вот так:
{—(‘1’=='{%flag%}’) ? ‘{%var1%}’:'{%var2%}’ —}

ссылочка на файлик класса: template.phps

Опубликовал:

Изобретая велосипеды: AJAX

2 декабря 2008

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

так вот, если раньше я таскал за собой или дикий кусок js, изменять который было сложно или некий фреймворк типа jQuery, то теперь я сделал простенький объект, который делает всю грязную работ,. а мне остается только передать параментры и функцию обработки, и поскольку я не жадный, то нате:

if (typeof jsAjax == "undefined" || !jsAjax) {
  var jsAjax = {};
}

jsAjax.ajax = typeof jsAjax.ajax != 'undefined' && jsAjax.ajax ? jsAjax.ajax : function(o) {
  var url = (typeof o === 'string') ? o : o.url;
  var callback = (typeof o.callback === 'undefined') ? function() {} : o.callback;
  var method = (typeof o.method === 'undefined') ? 'GET' : o.method;
  var type = (typeof o.type === 'undefined') ? 'text' : o.type;

  var len = (typeof o.vars === 'undefined') ? 0 : o.vars.length;
  var str="";
  for(var i = 0;i < len;i++)
  {
    if(i!='0')
    {
      str=str+'&';
    }
    str=str+o.vars[i].name+'='+escape(o.vars[i].value);
  }

  var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

  var onCompleteRequest = function () {
    if (xhr.readyState == 4)
    {
      if (xhr.status == 200)
      {

        if (type == "text") {
          r=xhr.responseText;
        } else if (type=="json") {
           r=eval('('+xhr.responseText+')');
        } else if (type=="xml") {
          r=xhr.responseXML.documentElement;
        } else {
          r=xhr.responseText;
        }
        callback(r);
      }
    }
  };

  xhr.open(method, url, true);
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.setRequestHeader('Accept-Language', 'en');
  xhr.setRequestHeader('Accept-Charset', 'utf-8');
  xhr.onreadystatechange=onCompleteRequest;
  xhr.send(str);

};

Пользоваться безумно просто, чтоб было более менее понятно, несколько примеров:

jsAjax.ajax("http://example.com/");

jsAjax.ajax({url:"http://example.com/",vars:[{name:"x",value:"y"},{name:"y",value:"x"}],method:"POST",callback:function() {alert(r);}});

jsAjax.ajax({url:"http://example.com/",vars:[{name:"x",value:"y"},{name:"y",value:"x"}],method:"POST",type:"json",callback:someFunction});

теперь по поводу параметров:

можно передать просто текст, тогда он будет считаться адресом и сделает тупой GET запрос, а можно поступить умнее и заполнить структурку состоящюю из следующих полей

url — адрес который запрашиваем
vars — список параметров запроса в виде:

[{name:"someName",value:"someValue"},{name:"someOtherName",value:"someOtherValue"}]

method — метод запроса (GET или POST)
type — тип ответа передаваемый в функцию обработки (text,json,xml)
callback — функция обработки ответа (ответ в соответствии с типом как видно из кода передается одной переменной)

вообщем вызов с полным списком переменных будет выглядеть примерно так:

jsAjax.ajax({
url:"http://somedome.com/somepage.php",
vars:[{name:"someName",value:"someValue"},{name:"someOtherName",value:"someOtherValue"}],
method: "POST",
type: "text",
callback: function (answer) { alert(answer); }
});

вот вообщем и все. 🙂
P.S. вот ссылочка на файл исходника.

Опубликовал:

Яндекс — потеряем все!

30 августа 2008

Под таким девизом прошел у меня последний апдейт…
Из индекса выпало половина сайтов. Большая часть с уникальным контентом, причем я даже счетчики на них повесить не успел, не говоря уже о сапу или чего нибудь подобном.

Сайты спокойненько жили в индексе несколько месяцев (ну руки у меня до них не доходили), а тут бац бац и мимо индекса :((

Написал Платону, типа так мол и так, сайт чето вылетел, а он мне:

После анализа и классификации страниц Вашего сайта наши алгоритмы приняли решение не включать его в поиск. Это может быть вызвано неуникальностью информации, использованием поискового спама или тем, что многие страницы сайта созданы автоматически и не предназначены для чтения пользователями.

Ладно бы правда контент гнилой был, или там ссылок толпа, так вообще поидее все шоколадно :((

Вообщем я сильно расстроился. Надо будет проверить контент, может он резко перестал был уникальным… но чтоб вот так сразу на нескольких сайтах….

Опубликовал:
Раздел: Мои новости

мда…

8 августа 2008
Комментарии к записи мда… отключены

Иногда ведь и правда хочется поставить такой статус:

ща как нухярюсь…чтоб ваще в гавно и нихуя непомнить, чтоб перегаром разило на 10м^2 и все шарахались как от прокаженого, и чтоб с утра во рту было как будто там ночевал табун лошадей и каждая навалила огромную кучу, и чтоб башка трещала будто долбят по ней кузнечным молотом и виски ломило так, словно в них вкручивают по здоровому,ржавому да еще и кривому шурупу…и чтобы наконец то узреть этих гребаных зелененьких чертиков, и чтоб санитары приехали на красно-белой машине и поставили диагноз «Белая горячка»…пшли все нах!

Вот такие дела…

Опубликовал:
Раздел: Мои новости

О как или подайте люди добрые :)

1 августа 2008
Комментарии к записи О как или подайте люди добрые :) отключены

Прочитал: оказывается 11% спама приходится на Россию, чето мне думается что больше! 🙂

А вообще я не об этом. 🙂

Очень часто на блогах вижу кнопочку типа дай денег 🙂

например вот такая форма от яндекса:

Ну или просто перечисляют кошельки в вебманях, чтоб туда денег сыпалось, ну например вот здесь висит форма от яндекса, типа на блоговое дело. Прикольно! 🙂

Очень мне хочется узнать сколько денег например в месяц приносит така кнопка 🙂

Я ее организовал на работе, когда у народа интернет заканчивается, вылазит вот такая страничка. Народ преццо, но денег так никто и не дал, видно контингент не тот :)))

Вот такие вот дела 🙂

Опубликовал:
Раздел: Мои новости

Про пьянство

7 июля 2008
Комментарии к записи Про пьянство отключены

У каждого пьянства свой запах особый:
Ликёр пахнет тайных фантазий свободой.
Шампанское пахнет кокетством и флиртом.
Разбитая морда — разбавленным спиртом.
Развратом и страстностью пахнет коньяк.
Взрывным позитивом — абсент натощак.
Вино отдаёт дорогим рестораном.
От вермута пахнет хихиканьем пьяным.
Коктейлями пахнут дебош и кураж.
Закваской хмельною воняет алкаш.
Утратой способности двигаться — водка.
Стремленьем по бабам пройтись — виски стопка.
Джин пахнет желаньем нажраться красиво.
Желаньем отлить отличается пиво.
Похмельем тяжёлым с утра — арманьяк…
И только лишь трезвость не пахнет никак!!!

ЗЫ. Не пейте люди, оно фуфел 🙂

Опубликовал:
Раздел: Мои новости