• MVC, как лучше избежать дублирование кода?

    Kindman
    @Kindman
    Я бы сделал по-тупому, в лоб:
    Написал бы отдельную функцию (не метод, а просто функцию), которая проверяет все четыре параметра, и возвращает 0 — если все ок, либо значение от 1 до 15, как флаги неверных параметров.
    <?php
    function check4($a, $b, $c, $d)
        {
        return check1($a)+check1($b)*2+check1($c)*4+check1($d)*8;
        }
    Ответ написан
  • [boost::xpressive] Многопроходная замена?

    Kindman
    @Kindman
    >> Не хочется же строки до и после сравнивать.
    Странно, но у меня именно такая мысль была (сравнить до и после), во время прочтения вопроса (пока не прочел эту последнюю строчку).
    Если не хочется сравнивать сами строки, можно сравнить хеши этих строк, например md5 или sha1.
    Ответ написан
  • Массовый ресайзинг картинок?

    Kindman
    @Kindman
    Можно так:
    <?php
    function image_resize($src, $dst, $width, $height, $crop=0)
        {
        if(!list($w, $h) = getimagesize($src))
          return false;// "Unsupported picture type!";
        $type = strtolower(substr(strrchr($src,"."),1));
        if($type == 'jpeg') $type = 'jpg';
      switch($type)
      {
      case 'bmp': $img = imagecreatefromwbmp($src); break;
      case 'gif': $img = imagecreatefromgif($src); break;
      case 'jpg': $img = imagecreatefromjpeg($src); break;
      case 'png': $img = imagecreatefrompng($src); break;
      default : return false; // "Unsupported picture type!"
      }
        // resize
        if($crop)
          {
          if($w < $width or $h < $height)
            return false; // "Picture is too small!"
          $ratio = max($width/$w, $height/$h);
          $h = $height / $ratio;
          $x = ($w - $width / $ratio) / 2;
          $w = $width / $ratio;
          } else {
          if($w < $width and $h < $height)
            return false // "Picture is too small!"
          $ratio = min($width/$w, $height/$h);
          $width = $w * $ratio;
          $height = $h * $ratio;
          $x = 0;
          }
        $new = imagecreatetruecolor($width, $height);
        // preserve transparency
        if($type == "gif" or $type == "png")
          {
          imagecolortransparent($new,
           imagecolorallocatealpha($new, 0, 0, 0, 127));
          imagealphablending($new, false);
          imagesavealpha($new, true);
          }
        imagecopyresampled($new, $img, 0, 0, $x, 0, $width, $height, $w, $h);
      switch($type)
      {
      case 'bmp': imagewbmp($new, $dst); break;
      case 'gif': imagegif($new, $dst); break;
      case 'jpg': imagejpeg($new, $dst); break;
      case 'png': imagepng($new, $dst); break;
      }
        return true;
        }
    Ответ написан
    1 комментарий
  • Русскоязычные ЧПУ в CodeIgniter?

    Kindman
    @Kindman
    Если mod_rewrite пугает, то самое простое это ErrorDocument.
    В файле .htaccess пишем:
    ErrorDocument 404 /404.php
    а, вот с этим файликом можно поиграться:
    404.php
    <?php
    function robots($host)
        {
        header("$_SERVER[SERVER_PROTOCOL] 200 OK");
        header("Content-Type: text/plain");
        $host=strtolower($host);
        echo "Host: $host\r\n";
        exit();
        }
    
    function favicon($old=false)
        {
        header("$_SERVER[SERVER_PROTOCOL] 200 OK");
        if ($old) header("Content-Type: image/x-icon"); else
          header("Content-Type: image/vnd.microsoft.icon");
        // "image/ico", "image/icon", "text/ico", "application/ico" => ERRORS!!
        $favicon
         ="AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAA"
         ."AAAwAAAAAAAAAAAAAAAAAAAAAAAAAAEAgQA/IIEAPTy5AD8+vQA/P"
         ."r8AAQC/AD89uwA/P78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
         ."AAAAAAAAAAAABEREQAAAAAREXIREQAAAREXNzcREAAREXd3d3cRAB"
         ."EXd3d3d3EBERd3d3dhERERd3cXcRERERF3cRd3EREVVXdVd3d1VVV"
         ."Vd1V3d3VVVVV3VXd3d1VQVVdVd3d3VQBVd1V3d3VVAAV3VXd3dVAA"
         ."AFVVVHd1AAAAAFVVVQAAD4HzsA4Ac7AMADAACAAQAAgAEAAAAAAAA"
         ."AAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAOAHAAD4HwAA";
        echo base64_decode($favicon);
        }
    
    if (strpos($REQUEST_URI,"robots.txt"))
      robots($HTTP_HOST);
    
    if (strpos($REQUEST_URI,"favicon.ico"))
      favicon(true);// favicon();
    
    echo "<xmp>";
    print_r($GLOBALS);
    он отдает «грамотный» robots.txt и симпатичненькую «фавиконку» favicon.ico
    На все остальные страницы он печатает дамп переменных среды PHP.
    Как обрабатывать значения переменных — дело вкуса.
    По крайней мере, все русско-язычные чпу-шки будут гарантированно проходить через этот скрипт.
    Разумеется этот скрипт можно (и нужно) допилить до кондиции под собственные задачи.
    Ответ написан
  • С чего начать? нужно создать сайт в короткие сроки своими руками

    Kindman
    @Kindman
    Сами странички можно даже в опен-офисе «сверстать».
    Например, для белой странички с одной строчкой «Тест» генерируется вот-такой хтмл-код:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    	<META HTTP-EQUIV="CONTENT-TYPE"
                  CONTENT="text/html; charset=windows-1251">
    	<TITLE>Тест</TITLE>
    	<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2  (Win32)">
    	<META NAME="AUTHOR" CONTENT="kindman">
    	<META NAME="CREATED" CONTENT="20110707;8575800">
    	<META NAME="CHANGEDBY" CONTENT="q q">
    	<META NAME="CHANGED" CONTENT="20110707;8583900">
    	<STYLE TYPE="text/css">
    	<!--
    		@page { size: 21cm 29.7cm; margin: 2cm }
    		P { margin-bottom: 0.21cm }
    	-->
    	</STYLE>
    </HEAD>
    <BODY LANG="ru-RU" LINK="#000080" VLINK="#800000" DIR="LTR">
    <P STYLE="margin-bottom: 0cm">Тест</P>
    </BODY>
    </HTML>
    Я советую именно опен-офис (а, не ворд), поскольку, результирующий код получается предельно прозрачным, и без лишнего «мусора».
    Хотя, оригинал-макет страницы можно и в самом ворде сверстать, но конвертировать в хтмл все же лучше, загрузив вордовский док в опен-офис Writer, и сохранив как:
    index.html в формате «Документ HTML (OpenOffice.org Writer)(.html)».
    На всякий случай, уточню: это совет для начинающих веб-мастеров, которые умеют работать в ворде (и больше ничего не умеют), хотя и некоторые профессионалы могут взять на заметку, особенно, возможность автоматического создания документов через сервис UNO (Universal Network Objects – Универсальные Сетевые Объекты).
    Ответ написан
    2 комментария
  • Тысячи сайтов на одной БД

    Kindman
    @Kindman
    Мы поступаем проще:
    Разрешаем пользователям самостоятельно выбрать хостинг/цмс для своих проектов.
    К примеру, некоторые наши клиенты используют свои цмс-ки, но, многие все же «сидят» на бесплатном «народе.ру», кто-то на «гугл-сайте», кто-то на «ho-ua», кто-то на «фар-ру», а, один даже на юкозе. Они че хотят, то и публикашут на своих ресурсах (не важно как они это делают, через цмс или фтп).
    Робот нашего сервиса, периодически обходит и собирает «урожай», сравнивает что было и что стало, формирует диффы, и отправляет на экспресс-модерацию.
    Если контент на их сайте сильно изменился (включая дизайн-оформление), то для таких исключительных случаев (редко, но все же, случается) создается новый шаблон обработки.
    Ну, а дальше — в базу…
    На народах и на юкозах сайты делают даже школьники, так что спец-подготовки не требуется.
    Хотя для нас-самих, конечно же предпочтительнее было бы заливать все в виде xml.
    Ответ написан
  • Вывод сообщений в реальном времени (JS + PHP)?

    Kindman
    @Kindman
    Можно попробовать использовать тег META REFRESH с интервалом в несколько секунд/минут
    Ответ написан
  • Веб сервер в локальной сети?

    Kindman
    @Kindman
    А, еще нужно фильтровать DNS-запросы на «неправильные» DNS-серверы, а так же, HTTP-запросы с заголовком Host: с «неправильным» хостом, а так же, вообще вообще все TCP-запросы на «неправильные» IP-адреса, и пресекать все попытки использования веб-прокси, в том числе «Опера-турбо».
    Ответ написан
    Комментировать
  • Есть ли RSS для сервиса q&a на хабре?

    Kindman
    @Kindman
    Еще хотелось бы мобильную версию блога «Q&A» получить на мЮ-Хабре:
    например, по такому (очевидному) адресу: m.habrahabr.ru/blog/qa (сейчас там 404 страница).
    Я мЮ-Хабр использую в качестве ленты новостей. А, в блоге Q&A вынужден «скрипя сердцем» открывать более тяжелую «полную» версию в опера-мини.
    Ответ написан
    Комментировать
  • Словари phpmorphy?

    Kindman
    @Kindman
    Киньте ссылочку на пример словаря, а то, не совсем ясно что к чему.
    Какой формат этих словарей?
    Возможно найдется способ автоматически сгенерировать такие словари.
    Думаю что эти словари (даже в отрыве от этого конкретного проекта) могут представлять собою самостоятельную ценность (например, для «собирателей» словарей вроде меня).
    Ответ написан
  • Алгоритмы англо-русской транскрипции?

    Kindman
    @Kindman
    Есть смысл «прогуляться» по вики-словарю. Например: en.wiktionary.org/wiki/Moscow
    там отыскиваем «Pronunciation»
    ===Pronunciation===
    * {{a|RP}} {{IPA|/ˈmɒskəʊ/}}, {{SAMPA|/"mQsk@U/}}
    * {{a|US}} {{enPR|mäsʹkou|mäsʹkō}}, {{IPA|/ˈmɑskaʊ/|/ˈmɑskoʊ/}},
     {{SAMPA|/"mAskaU/|/"mAskoU/}}
    крякозябры заменяем русскими буквами (или буквосочетаниями)
    Ответ написан
    1 комментарий
  • Как читать все топики выбранного блога?

    Kindman
    @Kindman
    Я обычно делаю так:
    Например, нужен блог Гугла: открываю мЮ-Хабр

    m.habrahabr.ru/blog/google/

    Дальше — дело техники: вся лента состоит из «пунктов» вида
    <li>
    <h3><a href="http://m.habrahabr.ru/post/123166/"
     class="t">Как добавить кнопку Google +1 на сайт</a></h3>
    <span><em>barba, сегодня в 08:44</em> <a
     href="http://m.habrahabr.ru/post/123166/"
     class="comments">комментарии</a> (2)</span>
    </li>
    
    Ответ написан
  • Программа для восстановления файлов после форматирования диска

    Kindman
    @Kindman
    Поскольку изначально известен формат самих восстанавливаемых данных (видео),
    можно попробовать RAW-образ диска сделать, и после этого искать видеофрагменты по характерным сигнатурам. Если диск в видеорегистраторе не был изначально отформатирован в NTFS, то из FAT еще проще это будет вытащить.
    Ответ написан
  • Какой дистрибутив Linux установить на Eee PC 700?

    Kindman
    @Kindman
    Я в свое время ставил 98 винду в качестве второй операционной системы.
    Вся 98 винда у меня занимала всего 98 мегабайт (в одном-единственном файле контейнере DRVSPACE.000). Но, для этого нужно было предварительно отформатерить ту флешку в 2 ГБт в FAT-16
    Ответ написан
    2 комментария
  • Помошь стартапам в виде образовательных грантов

    Kindman
    @Kindman
    Мне кажется, стартапам можно помочь в приобретении лицензий на ПО, например, мы не отказались бы от одной лицензии на Фотошоп
    Ответ написан
  • Как отучить стажёра от говнокода?

    Kindman
    @Kindman
    Пусть пишет автоматические ТЕСТЫ для проекта.
    Гораздо больше пользы будет от его активности.
    Ответ написан
    2 комментария
  • Примеры использования слабоструктурированных данных

    Kindman
    @Kindman
    Можно использовать универсальную таблицу вида:

    ID-записи (int)
    Тип-записи (int)
    Значение-записи (text)

    Можно так же добавить четверое поле, и в нем хранить числовое значение для записи:

    Rank-записи (float)
    Ответ написан
    Комментировать
  • Способ хранения для 2 млн. записей

    Kindman
    @Kindman
    К сожалению «простой» массив, целиком загружаемый из файла при каждом запуске скрипта — это и есть самое-самое медленное решение из всех возможных, поскольку очень много времени будет тратиться как раз на разбор содержимого файла, и на создание динамической структуры массива.
    Ответ написан
  • Способ хранения для 2 млн. записей

    Kindman
    @Kindman
    На самом деле поставленная задача распадается на несколько более мелких подзадач:
    1) хранение 2 миллионов доменных имен.
    2) генерация неповторяющейся последовательности из 2 миллионов псевдослучайных чисел.
    Нужно так же еще одно уточнение:
    «доменные имена» в самом хранилище должны быть уникальными, или могут повторяться?
    Другими словами, могут ли одному доменному имени соответствовать два и более трех-байтовых числа одновременно?
    и, допускаются ли «пустые» значения для доменного имени?
    Ответы на эти вопросы очень сильно влияют на размер памяти.
    Ответ написан
    2 комментария
  • Как лучше разрекламировать сайт?

    Kindman
    @Kindman
    Есть еще один весьма экзотический вариант:
    Зарегистрировать кучу доменов третьего, четвертого, пятого и даже, шестого(!) уровня, в имени которых будет нужное ключевое слово, записанное русскими буквами, например:
    стекольный.завод.им.дзержинского.гусь-хрустальный.net/
    Прикрутить их к разным ай-пишникам, причем можно даже на бесплатных народ-ру, гугл-сайт, юкоз, фар-ру, ho-ua, ну и конечно же на собственных серваках, и со страничек на этих сайтиках сделать ссылочку на основной сайт.
    Ответ написан