Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Антиникотиновый информер

02.05.2009 | Категория: Web-мастеру и не только | Автор: ManHunter

Антиникотиновый информер

Когда я бросил курить, то в качестве стимула сделал себе такой антиникотиновый информер и использую его в подписи на некоторых форумах. Это PHP-скрипт, который считает в реальном времени сколько всего сэкономлено и выводит результат в виде графического файла.
  1. <?
  2. //-------------------------------------------------------------
  3. // Скрипт антиникотинового информера с интервалами дат
  4. // Copyright (C) ManHunter / PCL
  5. // http://www.manhunter.ru
  6. //-------------------------------------------------------------
  7.  
  8. // Настройки информера
  9. $cig_per_day=20;      // Сигарет в сутки, шт.
  10. $rub_per_day=65;      // Денег на сигареты в сутки, руб.
  11. $nikotin=1.2;         // Количество никотина в 1 сигарете, мг.
  12.  
  13. $d=28;                // Месяц, когда бросил курить
  14. $y=2008;              // Год, когда бросил курить
  15. $m=7;                 // День, когда бросил курить
  16.  
  17. $h=11;                // Время, когда бросил курить, часы
  18. $i=30;                // Время, когда бросил курить, минуты
  19.  
  20. $size=10;             // Размер шрифта информера
  21. $font="my_font.ttf";  // Файл с TTF-шрифтом
  22. $border=10;           // Отступ текста от границ
  23. //-------------------------------------------------------------
  24.  
  25. // Дальше лучше ничего без надобности не менять
  26.  
  27. function num2word($num,$words) {
  28.   $num=$num%100;
  29.   if ($num>19) { $num=$num%10; }
  30.   switch ($num) {
  31.     case 1:  { return($words[0]); }
  32.     case 2:
  33.     case 3:
  34.     case 4:  { return($words[1]); }
  35.     default: { return($words[2]); }
  36.   }
  37. }
  38.  
  39. $start_date=mktime($h,$i,0,$m,$d,$y);
  40. $end_date=time();
  41.  
  42. $day=intval(($end_date-$start_date)/(24*60*60));
  43. $hour=intval(($end_date-$start_date-$day*24*60*60)/(60*60));
  44.  
  45. $days_array=Array("день""дня""дней");
  46. $hour_array=Array("час""часа""часов");
  47.  
  48. // Сгенерировать текст информера
  49. $str="Не курю: ".$day." ".num2word($day,$days_array)." ".
  50.      ($hour==0?"ровно":$hour." ".num2word($hour,$hour_array))."\n".
  51.      "Не выкурено сигарет: ".
  52.      intval(($day+($hour/24))*$cig_per_day)." шт.\n".
  53.      "Не потрачено денег: ".
  54.      intval(($day+($hour/24))*$rub_per_day)." руб.\n".
  55.      "Не убито лошадок: ".
  56.      intval(($day+($hour/24))*$cig_per_day*$nikotin/50)." шт.";
  57.  
  58. // Перевести в юникод, чтобы корректно отображались русские буквы
  59. $str=iconv('windows-1251','utf-8',$str);
  60.  
  61. // Получить размер графического блока для вывода текста
  62. list($ldx,$ldy,$rdx,$rdy,$rux,$ruy,$lux,$luy)=imageTTFBBox($size,0,$font,$str);
  63.  
  64. // Получить размер информера
  65. $xx=$rdx+$border*2+$size;
  66. $yy=$rdy+$border*2+$size;
  67.  
  68. // Создать изображение
  69. $im=imageCreatetruecolor($xx,$yy);
  70.  
  71. // Определить цвета
  72. $black=imageColorAllocate($im,0,0,0);
  73. $red=imageColorAllocate($im,255,0,0);
  74. $white=imageColorAllocate($im,255,255,255);
  75.  
  76. // Белый прямоугольник с красной рамкой
  77. ImageFilledRectangle($im,0,0,$xx,$yy,$red);
  78. ImageFilledRectangle($im,1,1,($xx-2),($yy-2),$white);
  79.  
  80. // Наложить текст на фон
  81. imagettftext($im,$size,0,$border+5,$border+$size,$black,$font,$str);
  82.  
  83. // Вывести картинку в формате PNG
  84. Header("Content-type: image/png");
  85. imagePNG($im);
  86. ?>
В этом примере в скрипт занесены данные: одна пачка сигарет в день, средняя цена пачки - 65 рублей (я курил "Captain Black") и содержание никотина 1,2 мг в 1 сигарете. Расчет лошадок выполняется на основании фразы "капля никотина убивает лошадь" и данных, что 1 капля никотина весит примерно 50 мг. Файл с кириллическим TrueType-шрифтом my_font.ttf должен находиться в той же папке, где размещен скрипт. PHP должен быть собран с поддержкой графической библиотеки GD2.

Читать статью целиком »
Просмотров: 7238 | Комментариев: 11

Metal Bealtaine в развлекательном центре "Самолет"

30.04.2009 | Категория: Жизнь в оффлайне | Автор: ManHunter

Metal Bealtaine в развлекательном центре "Самолет"

Бывают предложения, от которых нельзя отказаться. И когда на свой концерт приглашает лично Ольга Winter, вокалистка группы "Lady Winter", то это как раз такой случай. Тем более их последнее выступление было ровно год назад, я даже успел соскучиться. Если кто не в курсе, то "bealtaine" - кельтский праздник весеннего равноденствия, его мы сегодня и отметим по полной программе в развлекательном центре "Самолет"!

Читать статью целиком »
Просмотров: 3805 | Комментариев: 1

The Book of Bunny Suicides

30.04.2009 | Категория: Всякая всячина | Автор: ManHunter

The Book of Bunny Suicides

Книга "The Book of Bunny Suicides: Little Fluffy Rabbits Who Just Don't Want To Live Any More" британского карикатуриста Andy Riley впервые увидела свет в 2003 году. Это был сборник картинок в жанре черного юмора. Каждая картинка представляла собой сюжет, в котором кролики совершали самоубийство различными способами, как правило очень оригинальными: при помощи тостера, космической ракеты, увеличительного стекла и множества других предметов. Кроме этого в книге карикатурно обыграны ситуации с известными киногероями, например роботом Терминатором или участниками фантастического сериала "Star Trek". Книга имела успех и получила хорошие отзывы от многих известных людей, поэтому в 2004 году вышло продолжение - книга "Return of the Bunny Suicides". С тех пор в интернете появляются одиночные картинки из этих книг, а мне в свое время удалось найти их полные варианты.

Читать статью целиком »
Просмотров: 6545 | Комментариев: 3

Готовим гуляш по-венгерски

29.04.2009 | Категория: А еще я туда ем! | Автор: ManHunter

Гуляш по-венгерски

В отличие от России, в Венгрии гуляш - это не просто мясное блюдо, а суп с чипетке (клецками) и острым томатным соусом. Хотя мясо там тоже присутствует. Вот сегодня как раз "по заявкам радиослушателей" я и буду готовить гуляш по-венгерски.

Читать статью целиком »
Просмотров: 16715 | Комментариев: 7

Расчет CRC32 на Ассемблере

27.04.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Алгоритм вычисления контрольной суммы (CRC, англ. cyclic redundancy code, циклический избыточный код) - способ цифровой идентификации некоторой последовательности данных, который заключается в вычислении контрольного значения ее циклического избыточного кода. Алгоритм CRC32 основан на примитивном полиноме 0EDB88320h и применяется в архиваторах, системах шифрования, протекторах исполняемых файлов и многих других программах. Он прост в реализации и с большой вероятностью может подтверждать неизменность данных, причем чем меньше размер контролируемой информации, тем выше эта вероятность. Для расчета CRC32 требуется сперва подготовить так называемую таблицу инициализации. В сегменте данных таблица резервируется как 256 двойных слов, по одному dword на каждый возможный байт:
  1. ; Сегмент данных
  2. section '.data' data readable writeable
  3.  
  4. ; Таблица инициализации для расчета CRC32
  5. crc32table rd 256
После этого таблица заполняется данными, это делается при помощи следующей функции. Она вызывается только один раз до первого вызова функции расчета CRC32.
  1. ;-----------------------------------------------------------------------
  2. ; Функция создания таблицы инициализации для расчета CRC32
  3. ;-----------------------------------------------------------------------
  4. proc init_CRC32
  5.         push    eax ebx ecx edi
  6.  
  7.         mov     edi,crc32table      ; Указатель на выделенную под таблицу память
  8.         xor     ebx,ebx             ; Расчитать значения для всех 256 байт
  9. calc_crc32table:
  10.         mov     eax,ebx
  11.         mov     ecx,8
  12. do_polynom:
  13.         shr     eax,1               ; Проверить четность байта
  14.         jnc     @f                  ; XOR выполняется только если байт нечетный
  15.         xor     eax,0EDB88320h 
  16. @@:
  17.         loop    do_polynom          ; Следующий бит
  18.  
  19.         stosd                       ; Записать полученный dword в таблицу
  20.         inc     ebx
  21.         cmp     ebx,256
  22.         jb      calc_crc32table     ; Следующий байт
  23.  
  24.         pop     edi ecx ebx eax
  25.         ret
  26. endp
Таблица инициализации получается всегда одинаковой (при условии неизменности полинома), так что ее можно даже не расчитывать, а хранить в виде массива констант. Если требуется таблица инициализации CRC32 отдельно для использования в других проектах или языках программирования, то она приведена ниже. Под синтаксис вашего языка программирования адаптируйте ее самостоятельно.

Читать статью целиком »
Просмотров: 13651 | Комментариев: 9

01 ... 401 402 403 404 405 406 407 ... 425
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0406 сек.) / Память: 4.5 Mb
Наверх