Home
entries friends calendar user info IceDice Int. Previous Previous
RaEssentia

Реклама

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

Собственно я захотел проверить что быстрее
if ($a>$b) $a= $b;
или
$a= max($a,$b);
Дело в том, что второй вариант записи я никогда в жизни не использовал, я всегда предпочитал первый, однако второй вариант недавно попался мне на глаза я и задумался - а может я всегда делал неправильно, так ведь и короче и красивее выглядит итп. Короче написал для бенчмарка такой код:
тута многа текста )
И как вы можете видеть второй вариант оказался в 2 раза медленнее! Я думаю это связано с тем, что в первом варианте происходит только сравнение, а изменение переменных лишь тогда, когда это нужно, а во втором изменение происходит каждый раз насильно независимо от значения, даже если оно одинаковое.

Многие могут сказать что 0.00275/1000= 0.00000275 это фигня и не оказывает на скорость исполнения скрипта никакого действия, но поверьте мне - если вы пишите онлайн игру в которой подобные проверки происходят по много десятков раз при каждом выполнении и множество других аналогичных случаев то это играет роль :) Я всегда стараюсь писать максимально эффективный код. Тем более что мне это ничего не стоит, так почему бы не делать сразу по человечески?

Пример: в результате скорость обработки скриптов в моей игре никогда не превышает 0.03 сек, при 150 онлайн, и я уверен что игра сможет потянуть без проблем и 1000 онлайн и даже 3000, но там уже будет зависеть от того, насколько эффективно производятся запросы в базу данных (тут я уже не насколько уверен в своих умениях, хотя пока вроде все отлично).

Вот так вот. Продолжу кодить как я всегда кодил :)

Tags: , , ,

в избранное
рассказать другу
Потыкавшись вчера над задачкой по созданию нормальной системы закачек для сайта, а также для учета статистики и так и не прийдя ни к какому решению [info]cluster_d подкинул мне гениальную идею с хардлинками!

Грубо говоря суть в следующем. У нас есть файл, но мы не хотим давать на него прямую ссылку, или даже ссылку через редирект (т.к. прямой адрес все равно можно увидеть в менеджере закачек). Как же это обойти? А очень просто - оригинальную папку где у нас _реально_ располагаются файлы мы делаем закрытой (закрываем к ней доступ через хэтацесс), а при необходимости скачать эти файлы делаем для них ДОПОЛНИТЕЛЬНЫЙ путь в операционной системе. То есть мы как бы "копируем" файл в еще одно место, но с той лиш разницей что он занимает ровно 0 байт места, то есть нисколько, за исключением информации о самом его пути (обычно один кластер).

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

Прилагаю исходный код варианта, как это реализовал я
Тут исходный код )

Вот такой вот хитрый способ :)

Закачка происходит по таким линкам:
founders.icedice.org/dl.php?fo_skin_engine.exe
А потом пользователя кидает на типа такой ссылки:
founders.icedice.org/temp/dl/e950c10dd43d/fo_default_skin_1.0.exe

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

В общем надеюсь кому-то это пригодится :) Если есть вопросы обращайтесь.

Tags: , , , ,

в избранное
рассказать другу
Встала необходимость написать нормальный счетчек закачек файлов на PHP, погуглил я это дело и пришел к выводу что НОРМАЛЬНЫЙ написать не удастся в любом случае...

Похоже есть всего 4 варианта:

1. Пользователь кликает на скачать, клик засчитывается, скрипт редиректит пользователя на файл (его прямой адрес).
Этот вариант мне вообще не подходит т.к. я не хочу делать доступными прямые пути к скачиваемым файлам.

2. Пользователь кликает на скачать, клик опять же засчитывается и выполняется скрипт типа такого:

//тут всякие проверки и учет статистики сделать
//теперь вывод хедеров
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize('./files/'.$_GET['file']));
header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');
header("Content-Transfer-Encoding: binary\n");
//и самого файла
echo file_get_contents('путь до файла');
Но этот вариант требует дочерта оперативки если файл будут качать активно. И при нормальном числе запросов вообще убить сервер можно.

3. Вариант передачи по кускам, который придумал я.
$f= fopen('./files/'.$_GET['file'],'r');
if ($f) {
	header("Content-Type: application/octet-stream");
	header("Content-Length: ".filesize('./files/'.$_GET['file']));
	header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');
	header("Content-Transfer-Encoding: binary\n");
	while(!feof($f)) {
		$part= fread($f,1024);
		echo $part;
		flush();
	}
	fclose($f);
....итд
//учет статистики и прочее
Плюс этого способа в том что он не подгружает в оперативку сразу весь файл, а передает его по 1 килобайту. НООООО минус заключается в том что если скорость скачивания у человека будет маленькая, то время выполнения скрипта закончится раньше, а если делать время не ограниченным, то опять же большое число запросов на скачивание могут исчерпать лимит числа одновременно запущенных пхп скриптов и тоже повесить сервак грубо говоря.
Но тут по крайней мере есть плюс в том что можно считать число УДАЧНО переданных файлов разместя прибавление единички к числу скачиваний уже ПОСЛЕ завершения передачи.
Но... этот вариант тоже совсем не подходит.

4. Похоже самый нормальный способ.
Я думал как же сделать так чтобы пхп обрабатывайл закачку, но при этом сам не был запущенным. И при этом самое главное чтобы не было прямой ссылки на файл как в варианте 1.
И тогда я пришел к:
die(file_get_contents('файл'));
После чего я погуглил и обнаружил, что я не первый кто до такого додумался (чего и следовало ожидать XD), но вариант вроде пока самый лучший из всех.
НО насколько я понимаю проблем с оперативкой это не решает, т.к. все равно весь файл находится в буфере до тех пор пока пользователь не заберет его...
...


Есть ли нормальные варианты того как сделать закачку файлов на пхп с корректной статистикой и без открытия прямых адресов?

Tags: , ,

в избранное
рассказать другу
Освоил еще одну технологию в пхп сегодня :)
DOM (Document Object Model), грубо говоря XML (eXtensible Markup Language). До этого xml я только парсил но никогда не создавал программно и когда я года 3 назад попытался разобраться в DOM, ничего не вышло, тогда еще слишком нубом был, зато сейчас снова появилась необходимость использовать XML для экспортирования некоторых данных из программы во внешние файлы.

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

Но что самое интересное сколько я не рыл инет я так и не смог найти никакой вразумительной статьи с примерами где бы четко разъяснялось КАК программно создавать DOM документы в пхп (опять же я имею в виду XML файлы). Поэтому проштудировав оригинал PHP.org я решил написать свою простенькую статью на тему DOM/XML в PHP.

Под катом статья-руководство с исходным кодом на PHP )
Таким вот образом происходит построение документа. И на выводе получится такой код:
Вот такой xml получится после выполнения этого кода )

Вот так вот.

Tags: , ,

в избранное
рассказать другу
Недавно увидел в статистике запросов к серверу с моей игрушкой такие строчки:

founders.icedice.org/index.php/BALTAZOR_ch.php
founders.icedice.org/index.php/Admin_ch.php
founders.icedice.org/index.php/inc_script_ch.php&inc=narod.ru/disk/6277508000/load_shell.php.html
founders.icedice.org/index.php/opf=1&_1001i0.login=Yuki&_1001i1.pass=789654123&_1001i2=%d0%92%d0%be%d0%b9%d1%82%d0%b8


Уже перепугался вначале что все ппц, шел залили, хотя нет, посмотрел по фтп - пусто. Я вначале не обралил просто внимание на "...org/index.php/inc_..." вот этот кусок. Потом нормально разобрались с админом сервера и выяснили, что это это были просто чьи-то жалкие попытки непонятно чего добиться :)
Видиме человек начитался каких-то книжек по хакингу, где таким образом можно ЮЗАТЬ шел, однако он не подумал о том, что предварительно его надо ЗАЛИТЬ :)
В общем все пучком. Не зря у меня на все входящие данные стоит проверка регэкспами))) При всем желании ничего во ввод не добавить лишнего.

И еще раз спасибо Кластеру за помощь!

Tags: , , , , ,

в избранное
рассказать другу
Что-то я последнее время (сегодня :)) увлекся криптографией. Вообще криптить мне нужно для своего проекта, но когда я начал копать эту тему всплыло ОЧЕНЬ много интересного! Реально криптография ОЧЕНЬ интересная наука и на полную грузит мозг, аж прямо кипит, когда анализируешь алгоритмы какие-либо. Давно я так интересно не проводил день.

Так вот, собственно о чем этот пост.
Я придумал несколько крипто алгоритмов, все они достаточно примитивные и используют стандартные операции типа chr ord, а также битовые изменения вида Xor и сдвига байтов. Подобные вещи используются повсеместно, однако дают достаточно неплохие результаты если подойти к этому с умом.

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

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

Вот это я и пытаюсь преодолеть. То есть я хочу каким-то образом сделать кодирование так, чтобы закодированная строка каждый раз получалась разная, но при этом раскодировалась все тем же ключом.

Идей как это реализовать у меня нету совершенно :) Кроме того что в генерации нужно использовать к примеру микротайм для придания случайного сида. Но вот далее... как сделать что-бы строка всегда была разная но при этом раскодировалась все тем же ключом...

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

пс- если интересно, вот один из моих крипто алгоритмов, достаточно простой, но имхо прикольный.

тут исходник алгоритма )

Tags: , , , ,

в избранное
рассказать другу
Кодил я седня свою гаму и понял, что без регэкспов ну никуда... А ведь давно пора было их выучить.
Ну в общем с помощью одного знакомого и великого гугля вроде разобрался в них =)
Итогом моего паручасового тыканья стало нечто что вы можете увидеть ниже.

листинг кода огромной и очень крутой функции =) )
Если кто знает как это можно сделать проще - пишите =)

Tags: , ,
Настроение: tired

в избранное
рассказать другу
Аннотация: прочитав это руководство вы сможете сотворить свою собственную галактику прямо у вас дома!

=) Ладно, не буду тут изображать, а сразу перейду к сути) Делаю же я вот свою онлайн игрушку и встал у меня вопрос - сделать генерацию галактик в ней. Ну я так подумал что в тесте (на время разработки) не суть важно как галактики будут выглядеть, главное чтобы хоть както выглядели и потому решил чтоб было в виде архимедовой спирали с рэндомной величиной.
Попросил комрада [info]ctarc написать функцию для архимедовой спирали на пхп (сам я в математике бээ =(((), а потом добавил туда интервал и рэндом и получилось вот такое чудо http://zalil.ru/upload/26229363 тут 6 картинок с разными параметрами.
Типа такого:


А вот исходники: тута они родимые )

Tags: , , , , , ,

в избранное
рассказать другу
Любой русский программист, после пары минут чтения кода, обязательно вскочит и произнесет, обращаясь к себе: переписать это все нафиг. Потом в нем шевельнется сомнение в том, сколько времени это займет, и остаток дня русский программист потратит на то, что будет доказывать самому себе, что это только кажется, что переписать это много работы. А если взяться и посидеть немного, то все получится. Зато код будет красивый и правильный. Hа следующее утро русский программист свеж, доволен собой и без единой запинки докладывает начальству, что переписать этот кусок займет один день, не больше. Да, не больше. Hу, в крайнем случае, два, если учесть все риски. В итоге начальство даст ему неделю и через полгода процесс будет успешно завершен. До той поры, пока этот код не увидит другой русский программист.
Продолжение истории... )

Tags: , , ,

в избранное
рассказать другу
Проблема огромных баннеров решена, и переходить на базовый аккаунт вовсе ненадо =)

Только ненадо делать так как говорят во многих жж - копировать код в настройки стиля журнала. Это противоречит правилам сервиса и вас могут удалить. Лучше воспользуйтесь способами ниже, они ничего не изменяют в самом ЖЖ, а просто препятствуют показу рекламы лично У ВАС на компьютере.

Однако первое, если вы еще не поставили, то сделайте это сейчас - установите плагин на Фаерфокс Adblock Plus. Без него вообще в инет выходить не рекомендуется =) Но это если вы юзаете ФФ, если нет то читаем дальше.

Вот все известные способы.:
Способ 1: Создаем пустой файл userContent.css, если у вас Firefox то в C:\Documents and Settings\[имя юзера]\Application Data\Mozilla\Firefox\Profiles\[ваш профиль]\chrome, для IE и оперы, где захотите. В файле пишем код представленный ниже (под катом), само собой сохраняем =)
Если вы используете ИЕ то меняем в настройках Tools->Internet options-> закладка General, нажимаем кнопку Accessibility. Ставим галочку на Format documents using my style sheet. В поле прописываем полный адрес файла куда вы го сохранили, например C:\userContent.css
Если юзаете оперу. Инструменты -> Настройки -> Дополнительно -> "Параметры Стилей". Адрес до таблицы стилей, например также как и выше.

Код )

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

Способ 2: Если юзаете ад блок плюс. Самый удобный и эффективный на мой взгляд. Добавте следующие фильтры:
"livejournal.com#DIV(class=adv)".
"http://ads.*"
"*/ad_base.css"
Само собой без кавычек. Добавить можно нажав на иконку ад блок плюса, а дальше "установки...".

Способ 2-Б: Тоже самое но если юзаете Opera.
Фильтры приведенные выше идут в Tools -> Advanced -> Blocked Content

Способ 3: Если вдруг что-то не получается то можете попробовать это. Но это только для браузера FireFox. Установите данный плагин который может удалять куски кода из страниц. Укажите кусок кода отвечающий за рекламу и включите его вырезание. Но это далеко не самый удобный вариант.

Способ 4: Если вы юзаете Эксплорер или Opera - тогда это можно сделать через проксю Proxomitron и Privoxy. Но там придется немного погемориться. Так что лучше юзать ФФ всетаки)

Давайте очистим ЖЖ от рекламы! Если данная информация оказалась вам полезной то пожалуйста разместите ссылку на этот пост у себя.

Плюсы данных способов в том что никто не сможет узнать и доказать что вы их используете поэтому они совершенно "легальны" и никто не сможет предъявить вам претензии за вырезанную рекламу.
Лично я юзаю способ номер 2, с ад блок плюсом =) Все отлично работает.

Tags: , ,
Настроение: predatory

в избранное
рассказать другу
Не знаю от чего я решил таким заняться, но спрогил я в общем движок для авто-тестов.
Наверное все хотябы раз сталкивались с заполонившими ЖЖ тестами типа "узнай какой ты помидор" или "сколько стоит твой блог" и прочее =)
Вот. Почти все эти тесты пишутся отдельно (для каждого создается свой код), а я же от нечего делать намутил движок где такие тесты можно создавать без прибегания к кодингу. Конечно в отличае от конкретно сделанных тестов тут нельзя сделать что угодно, но штуки типа "какой ты индюк", либо списка вопросов на которые нужно ответить, чтобы узнать свой результат сделать можно легче легкого, для чего и создавался этот двиг.

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

Ко всем тестам также можно получать хтмл код который потом постить в жж =)))
Так что если хотели сделать свой тест какойнить то это отличная возможность)

Tags: , , , ,

в избранное
рассказать другу
Решил вот попрогать на фрипаскале под линукс-ARM, а сайт фрипаскаль.орг почемуто не открывается и скачать последний дистр паскаля никак....
Но вообще я даже не о том хотел написать, мне вот интересно, а можно ли будет скомпилить прогу написанную на версии линукс-арм паскаля под x86 версию паскаля. Само собой исходники без включения ассемблера и уникальных для платформы либ. Чисто на стандартных штуках. По идее ведь можно? Ктонить из спецов может мне сказать? =)

Tags: ,

profile
RaEssentia
Name: RaEssentia
Website: IceDice Int.
calendar
Back Январь 2010
12
3456789
10111213141516
17181920212223
24252627282930
31
page summary
tags

Реклама

Настроить