За последние 24 часа нас посетил 17451 программист и 1595 роботов. Сейчас ищут 1135 программистов ...

Наши программы!!! (неразобранное)

Тема в разделе "Решения, алгоритмы", создана пользователем Hight, 28 авг 2006.

  1. Mavir

    Mavir Guest

    Это зависит не от нас, а от хостеров :(

    Неплохо было бы в каждую mysql-функцию вставлять $this->connecttdb
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    "Анархический чат"
    Без регистрации пользователей, какой либо модерации и.т.д. (всё хочу его переписать с нуля только грамотно, а времени нету)
     
  3. Mavir

    Mavir Guest

    А я вот только недавно узнал, что это означает копирайт, а раньше думал, что спи.....но :)
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Гы, а вы говорите что у РНР более читабельный код чем у PERL :) всё зависит только от того кто пишет...
    Вот функция хеширования написанная от нефиг делать...

    PHP:
    1. <?php function vld1_hash($s){for($s=strval($s),$n=0,$i=0;$i<strlen($s);$i++)
    2. {$n+=pow($i+ord($s[$i]),2);}for($a=0,$b=-1;$n>0;$a+=1/($b+=2)-1/($b+=2),$n--)
    3. {}$h=substr(sprintf('%1.40f',$a),-32,32);return $h;}?>
    И вторая версия
    PHP:
    1. <?php  function vld2_hash($s){for($s=strval($s),$n=0,$i=0;$i<strlen($s);$n+=pow
    2. (ord($s[$i])+$i++,2)){}for($a=1,$b=1;$n>0;$a*=($b+1)/$b*(($b+1)/($b+=2)),$n--){
    3. }for($h='',$t=sprintf('%1.40f',2*$a),$i=41;$i>9;$h.=$t[$i],$i--){}return $h;}?>
    Пользуйтесь пока я жив...
    Но как помру обратно верните (с) КВН

    Правда при хешировании строк длинной в 64 символа и больше они начинают нипадецки грузить сервак (проц), что в принципе даже хорошо т.к это накладывает ограничения и на скорость брут-форса...
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Примитивный 3D рендер на PHP:
    PHP:
    1. <?php
    2.     /*
    3.         (C) Федотов Сергей 2006, [email=sergey89@gmail.com]sergey89@gmail.com[/email]
    4.     */
    5.     define('START_TIME', microtime(true));
    6.  
    7.     include 'matrix.php';
    8.  
    9.     $width = 800;
    10.     $height = 600;
    11.  
    12.     $img = imageCreateTrueColor($width, $height);
    13.  
    14.     /*
    15.         Загружаем объект из файла
    16.     */
    17.     $object = array();
    18.  
    19.     $lines = file('test.obj');
    20.     foreach ($lines as $i => $poly) {
    21.         $ver = explode(' ', trim($poly));
    22.         foreach ($ver as $j => $v) {
    23.             $object[$i][$j] = intval($v);
    24.         }
    25.     }
    26.  
    27.     /*
    28.         Производим трансформации над объектом
    29.     */
    30.     $matrix = new Matrix();
    31.  
    32.     for ($i = 0; $i < count($object); $i++) {
    33.         $vec1 = $matrix->rotate($_GET['a'], $_GET['a'], $_GET['a'], array($object[$i][0], $object[$i][1], $object[$i][2]));
    34.         $vec2 = $matrix->rotate($_GET['a'], $_GET['a'], $_GET['a'], array($object[$i][3], $object[$i][4], $object[$i][5]));
    35.         $vec3 = $matrix->rotate($_GET['a'], $_GET['a'], $_GET['a'], array($object[$i][6], $object[$i][7], $object[$i][8]));
    36.  
    37.         $object[$i] = array($vec1[0], $vec1[1], $vec1[2], $vec2[0], $vec2[1], $vec2[2], $vec3[0], $vec3[1], $vec3[2]);
    38.     }
    39.  
    40.     for ($i = 0; $i < count($object); $i++) {
    41.         $vec1 = $matrix->scale(3, 3, 3, array($object[$i][0], $object[$i][1], $object[$i][2]));
    42.         $vec2 = $matrix->scale(3, 3, 3, array($object[$i][3], $object[$i][4], $object[$i][5]));
    43.         $vec3 = $matrix->scale(3, 3, 3, array($object[$i][6], $object[$i][7], $object[$i][8]));
    44.  
    45.         $object[$i] = array($vec1[0], $vec1[1], $vec1[2], $vec2[0], $vec2[1], $vec2[2], $vec3[0], $vec3[1], $vec3[2]);
    46.     }
    47.  
    48.     /*
    49.         Отсекаем нелицевые грани
    50.     */
    51.     $pol = $object;
    52.     $object = array();
    53.  
    54.     for ($i = 0; $i < count($pol); $i++) {
    55.         $poly = $pol[$i];
    56.  
    57.         $a = array($poly[0], $poly[1], $poly[2]);
    58.         $b = array($poly[3], $poly[4], $poly[5]);
    59.         $c = array($poly[6], $poly[7], $poly[8]);
    60.  
    61.         $n = array(
    62.             $a[1]*($b[2]-$c[2]) + $b[1]*($c[2]-$a[2]) + $c[1]*($a[2]-$b[2]),
    63.             $a[2]*($b[0]-$c[0]) + $b[2]*($c[0]-$a[0]) + $c[2]*($a[0]-$b[0]),
    64.             $a[0]*($b[1]-$c[1]) + $b[0]*($c[1]-$a[1]) + $c[0]*($a[1]-$b[1])
    65.         );
    66.  
    67.         $l_n = sqrt($n[0]*$n[0] + $n[1]*$n[1] + $n[2]*$n[2]);
    68.         if ($l_n == 0) $l_n = 1;
    69.         $n = array($n[0]/$l_n, $n[1]/$l_n, $n[2]/$l_n);
    70.  
    71.         $l = array(0, 0, -1);
    72.  
    73.         $angle = acos(($n[0]*$l[0] + $n[1]*$l[1] + $n[2]*$l[2])/sqrt(($n[0]*$n[0] + $n[1]*$n[1] + $n[2]*$n[2]) + ($l[0]*$l[0] + $l[1]*$l[1] + $l[2]*$l[2])));
    74.      
    75.         if (abs(rad2deg($angle)) < 90) {
    76.             $object['poly'][] = $pol[$i];
    77.             $object['angle'][] = $angle;
    78.         }
    79.     }
    80.  
    81.     unset($pol);
    82.  
    83.     /*
    84.         Сортируем грани по Z координате
    85.     */
    86.     $z = array();
    87.     for ($i = 0; $i < count($object['poly']); $i++) {
    88.          $z[$i] = min($object['poly'][$i][2], $object['poly'][$i][5], $object['poly'][$i][8]);
    89.     }
    90.  
    91.     arsort($z);
    92.  
    93.     $pol = $object;
    94.     $object = array();
    95.  
    96.     foreach ($z as $key => $v) {
    97.          $object['poly'][] = $pol['poly'][$key];
    98.          $object['angle'][] = $pol['angle'][$key];
    99.     }
    100.  
    101.     unset($pol);
    102.  
    103.     /*
    104.         Преобразуем координаты
    105.  
    106.                 +Y                ______________+X
    107.                  |               |
    108.                  |               |
    109.         -X ______|______ +X  =>  |
    110.                  |               |
    111.                  |               |      
    112.                  |               |
    113.                 -Y              +Y
    114.     */
    115.     for ($i = 0; $i < count($object['poly']); $i++) {
    116.         $object['poly'][$i][0] = ceil($width/2) - $object['poly'][$i][0];
    117.         $object['poly'][$i][3] = ceil($width/2) - $object['poly'][$i][3];
    118.         $object['poly'][$i][6] = ceil($width/2) - $object['poly'][$i][6];
    119.  
    120.         $object['poly'][$i][1] = ceil($height/2) - $object['poly'][$i][1];
    121.         $object['poly'][$i][4] = ceil($height/2) - $object['poly'][$i][4];
    122.         $object['poly'][$i][7] = ceil($height/2) - $object['poly'][$i][7];
    123.     }
    124.  
    125.     /*
    126.         Выводим объект на экран
    127.     */
    128.  
    129.     $tex = imageCreateFromJpeg('tex.jpg');
    130.     imageSetTile($img, $tex);
    131.     imageFilledRectangle($img, 0, $height, $width, 0, IMG_COLOR_TILED);
    132.  
    133.     foreach ($object['poly'] as $key => $poly) {
    134.         $color = imageColorAllocate($img, 255 - $object['angle'][$key]*2.5, 255 - $object['angle'][$key]*2.5, 255 - $object['angle'][$key]*2.5);
    135.         imageFilledPolygon($img, array($poly[0], $poly[1], $poly[3], $poly[4], $poly[6], $poly[7]), 3, $color);
    136.     }
    137.  
    138.     /*
    139.         Выводим текст
    140.     */
    141.     $fcolor = imageColorAllocate($img, 255, 255, 255);
    142.     imageString($img, 3, 10, 10, 'Angle: '.$_GET['a'], $fcolor);
    143.     imageString($img, 2, 10, 30, 'Triangles: '.count($object['poly']), $fcolor);
    144.  
    145.     //Заершающие действия...
    146.     define('STOP_TIME', microtime(true));
    147.     imageString($img, 2, 10, 50, 'Time: '.sprintf('%.5f', (STOP_TIME - START_TIME)), $fcolor);
    148.  
    149.     header('Content-type: image/png');
    150.     imageJpeg($img, '', 80);
    151. ?>
    Класс для работы с матрицами http://www.mlib.com.ru/3d/matrix.txt
    Полигон - треугольник - 3 вершины - 9 кооринат.
    Пример объекта: http://www.mlib.com.ru/3d/test.obj
     
  6. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    все понимаю но 3d это уже извращенческий фетишизм )
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Вот и я написал свой класс для работы с MySQL, конечно на ракетную установку такой не поставишь, а вот для 99% веб-скриптов очень даже подойдёт...

    PHP:
    1. <?php
    2. Class Vladson_MySQL {
    3.     var $link;
    4.     function Vladson_MySQL() {
    5.         if (!extension_loaded('mysql')) die('MySQL extension is not loaded.');
    6.     }
    7.     function connect($host="localhost", $user="root", $pass="", $base="test") {
    8.         return is_resource($this->link = @mysql_connect($host, $user, $pass)) ? @mysql_select_db($base) : $this->link;
    9.     }
    10.     function sql_query($sql, $is_array=false) {
    11.         return is_resource($result = @mysql_unbuffered_query($sql)) ? $this->fetch($result, $is_array) : (false !== $result ? mysql_affected_rows() : $result);
    12.     }
    13.     function fetch($result, $is_array) {
    14.         $array = array();
    15.         while ($temp = @mysql_fetch_assoc($result)) {
    16.             $array[] = count($temp) > 1 ? $temp : current($temp);
    17.         }
    18.         return count($array) > 1 || $is_array ? $array : current($array);
    19.     }
    20.     function disconnect() {
    21.         return @mysql_close($this->link);
    22.     }
    23. }
    24. ?>
    Собственно всё что его отличает от других которые я видел что он возвращает данные в том виде в котором хочется, без танцев с бубном (только один танец "is_array" есть, но без него совсем никак)

    Трудно объяснить на словах подробности, думаю тут и так из кода видно что он и как делает...

    PHP:
    1. <?php
    2. header('Content-type: text/plain');
    3.  
    4. include 'vladson_mysql.php';
    5. $mysql = & new Vladson_MySQL();
    6.  
    7. // ссоединяемся (BOOL)
    8. var_dump($mysql->connect());
    9.  
    10. // если запрос должен вернуть только одно значение (STRING) или один ряд (ARRAY)
    11. var_dump($mysql->sql_query("SELECT RAND();"));
    12. var_dump($mysql->sql_query("SELECT COUNT(*) FROM `files`;"));
    13. var_dump($mysql->sql_query("SELECT `name` FROM `files` WHERE `id` = 1;"));
    14. var_dump($mysql->sql_query("SELECT `id`,`name` FROM `files` WHERE `id` = 1;"));
    15.  
    16. // если нужен список-массив (ARRAY) а не массив массивов с массивами
    17. var_dump($mysql->sql_query("SHOW DATABASES;", true));
    18. var_dump($mysql->sql_query("SELECT `name` FROM `files`;", true));
    19.  
    20. // если нужен результат (INT) сколько было затронуто рядов при операции
    21. var_dump($mysql->sql_query("DELETE FROM `files` WHERE `id` > 99;"));
    22. var_dump($mysql->sql_query("UPDATE `files` SET `id` = 1 WHERE `id` = 3;"));
    23.  
    24. // отссоединяемся (BOOL)
    25. var_dump($mysql->disconnect());
    26. ?>
    ОЧЕНЬ БЫ ХОТЕЛОСЬ УСЛЫШАТЬ КРИТИКУ
    (только конструктивную, а не флуд)
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    в php разве не ссылочная передача объектов по дефолту?

    не видно :) приведи, что он выводит :)

    а так, я бы рекомендовал сделать 3 функции, возвращающие двумерный, одномерный и безмерный масив ;) а не угадывать что там вернула одна единственная функция.

    sql зачем-то два раза повторяется...
     
  9. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    В 5 - да, в 4 - нет.
     
  10. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Привычка с 4-го пыха, но это пример а не сам код который критиковать надо
    Если тебе надо "угадывать" то займись лучше не программированием а например боксом :)
    (именно для того чтоб не нужно было угадывать а можно было контролировать стоит параметр-флаг "is_array")
    Ты бы ещё придрался почему "BOOL" в коментариях большими буквами и почему не "boolean"

    Давайте по существу (баги, глюки, дыры, и.т.д.)
     
  11. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    мдя... весь движок переписывать... :(

    Код (Text):
    1. foreach ($result as $row) echo $row['data'];
    этот код будет работать, если функция вернёт одну строку, а не две?

    просто не вижу смысла писать, что масло масляное. и, кстати, почему BOOL а не integer? :)
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Вторая часть это только пример использования, её мы не критикуем !!! (в твоём скрипте может быть "$asdfg->sql_query()" и вообще хрен знает что)
    Естественно, если будет 0 результатов то не сработает, если больше то да (один больше чем ноль вроде)
     
  13. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Кстати на тему
    этот класс был имеено написан для того чтоб всё было как можно проще...
     
  14. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Код (Text):
    1. $mysql->sql_query("SHOW DATABASES;", true)
    да.. непонятный параметр true - что может быть проще? :)
    лучше что-нибудь типа:
    Код (Text):
    1. $mysql->query_array("SHOW DATABASES;")
     
  15. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    зачем ты собаками давишь все ошибки? сообщения очень помогают при дебаге. если смущают выкидыши в браузер - напиши свой обработчик ошибок, который будет отфильтровывать то, что в данный момент тебе не нужно.
    я сейчас юзаю такую простенькую штуку:
    Код (Text):
    1. function _errors () {
    2.     static $err= array();
    3.     if (func_num_args()&&error_reporting()) {
    4.         $e= func_get_args();
    5.         $e[]= debug_backtrace();
    6.         $err[]= $e;
    7.     }
    8.     return $err;
    9. }
     
  16. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Если он тебе не понятен и в правду займись боксом
     
  17. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а, ну в таком случае предлагаю пойти дальше:
    Код (Text):
    1. $mysql->sql_query(array(1,15), true)
    где 1 и 15 - номера лексем, которые нужно записать через пробел, составив тем самым запрос.
     
  18. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    не, лучше так:
    Код (Text):
    1. $mysql->execfunc(1,array(1,15), true)
    , где первая единичка означает функцию делающую запрос.
     
  19. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ты явно не совсем понимаешь смысл этого класса, реально займись лучше боксом
     
  20. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    реально, типа, может объяснишь пацанам? \m/(-_-)\m/
     
  21. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Vladson
    dark-demon
    Да ладно вам. Какая разница, лишний метод или лишний параметр.
    Если бы Vladson сделал несколько методов, кто-нибудь обязательно прикопался бы к избыточному коду :D тяжела доля программиста.

    Vladson
    Класс неплох, но я сторонник немного другого подхода... по специальному методу на каждый тип запроса. Типа addLine, deleteLine, getLine, getLines... и так далее. И только для самых навороченных запросов - метод query, которому и передается весь текст запроса. Если уж делать абстракцию от низкоуровневых функций - так делать нормально ;)
     
  22. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Смысл кода не в абстракции, совсем наоборот !

    Смысл в том чтоб предоставить одну единственную функцию для посыла в неё запроса и возвращения сразу результата, без доп-танцев с бубном !!!

    Опять же задаю повторыный вопрос, кто нибудь видит реальные (а не моральные "типа я не сторонник итд") причины почему этот класс нельзя использовать в реальных приложениях ? (глюки, баги, нарушение сетевого этикета, нарушение чьих то религиозных убеждений, и.т.д.)
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    почему это должна быть именно одна функция? не логичнее ли для возвращения данных в иной форме использовать иную функцию?

    можно, разрешаю :)
     
  24. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Это увеличит код на 4-8 строк не добавляя никакого функционала, это нерационально !!!
     
  25. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    парсинг 4-8 строк - это самое узкое место в системе? :) тогда пиши всё в одну строку...
    если да, то стоит задуматься, а оправдан ли выбор именно языка php....