Бесплатный планировщик от IBM developerWorks

Как-то давно проскальзывал линк на один технический материал по PHP, расположенный на сайте IBM. Еще тогда удивила полезность информации с данного ресурса. Про статью я забыл, но пару дней назад понадобился один специализированный софт, который есть у голубого гиганта. Пришлось там создавать аккаунт, и я ни разу не пожалел, что сделал это. Read On…

0.00 avg. rating (0% score) - 0 votes

Все уже придумали до нас

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

В данный момент прохожу один курс, так вот там встретил некое выражение:

Уменьшив сложность системы, часто можно увеличить ее информативность, исследуемость.

Сам курс больше в сторону бизнес-систем на основах высшей математики клонит, но как же блин точно подмечено! Еще бы я вышку в универе не прогуливал, а то сложновато приходится с формулами.

Про простоту еще у кого-то уже читал, вроде у Тормоза, там приводили цитату одного летчика

Совершенство достигнуто не тогда, когда нечего добавить, а тогда, когда нечего отнять

Такшта, Keep It Simple, Stupid 🙂

0.00 avg. rating (0% score) - 0 votes

Примеры использования strace для отладки скриптов

Strace — это встроенный перехватчик системных вызовов и сигналов в линуксе. Основная его цель — это перехват информации относительно какого-то процесса. Крайне незаменимая штука при отладке скриптов, особенно закодированных.

Пример использования — есть один сервис, который я написал, и обьявилась там проблема — каким-то неведомым образом права на файл, куда пишется лог, начали выставляться криво. А именно: вместо положенных rw — rw — rw стали w — wx — wT. Проблема тут в том, что надо указывать права при смене не как:

chmod('file.txt', '0666'); или
chmod('file.txt', 666);

в этом случае 0666 будет string, а вот так:

chmod('file.txt', intval('666', 8));

Так они уже будут в корректной форме.

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

strace php ./script.php 2>&1 | grep file.txt

Ответ будет вида:

open("/path/to/file.txt", O_RDWR|O_CREAT|O_APPEND|O_LARGEFILE, 0666) = 4
chmod("/path/to/file.txt", 0666) = 0

Вот так можно отмониторить все обращения к файлу
Read On…

5.00 avg. rating (90% score) - 1 vote

Что делать, если сбил все права?

Выставил я тут на рабочем сервере права на всю папку, в которой сайты лежат, 0777.  От души так, типа не жалко. Лучше и не спрашивайте, как так получилось))

Не, все работает конечно, но как-то немного стремно с полностью открытой на запись и выполнение папкой, доступной из веба жить 🙂 И папок вложенных куча, руками нереально все права поправить.

Вобщем, правится так.

Сначала всем ставим 0644

chmod -R 0644 ./*

Затем папкам ставим 0755

chmod -R 0755 ./$(find . -type d)

P.S. Ну и главное правило напоследок —  Не лезь, блять, с несоображающей головой на рабочий сервер. Надо сюда будет его отправить, там таких много))

P.P.S. Вики рулит )

Восстанавливаем текстовые файлы

find . -type f -exec chmod 644 {} \;

Потом папки

find . -type d -exec chmod 755 {} \;
0.00 avg. rating (0% score) - 0 votes

Размножение строк — функция генерации всех возможных значений из шаблона {}

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

<?php

function mashUp($str){
preg_match_all("/{(.*?)}/", $str, $out);
$headArr = $out[1];

for($i = 0; $i < sizeof($headArr); $i++)
{
	$valArr = preg_split("/(\||,|;|	)/", $headArr[$i]);
	($i == 0)? $sTotal = count($valArr) : $sTotal = $sTotal * count($valArr);
	$varr[] = $valArr;
}
for($i = 0; $i < $sTotal; $i++){
	$strings[$i] = $str;
}
foreach($headArr as $num => $val):
	$currPos = 0;	//позиция ключа в $varr
		for($i = 0; $i < $sTotal; $i++)
		{
			if($i == 0):
					if($num == 0)
					{
						$sChange = ( $sTotal / ( count($varr[$num]) ) );
					}
						else
					{
						($old)? $sChange = $old : $sChange = $sChange;
 						$sChange = ($sChange / (count($varr[$num])));
					}

					if(count($varr[$num]) < 2){
						$old = $sChange;
						$sChange = $sTotal;
						}
					if($num == (count($headArr) - 1))
					{
						$sChange = 1;
					}
					$sNum = $sChange;
			endif;

			if($sNum == 0){
					$sNum = $sChange - 1;
					$currPos++;
				} else {
					$sNum--;
				//$currPos++;
				}

			if($currPos > (count($varr[$num]) - 1))
			$currPos = 0;
			preg_match("/{(.*?)}/", $strings[$i], $res, PREG_OFFSET_CAPTURE, 0);
			$strings[$i] = preg_replace("!".preg_quote($res[0][0])."!si", $varr[$num][$currPos], $strings[$i]);
		}
endforeach;
return($strings);
}
$str = "some {1a|2a,3a;4a	5a} strings {1b|2b|3b} that {1c} need to {1d|2d} post {test|example|primer}";
echo maashUp($str);
?>
0.00 avg. rating (0% score) - 0 votes

Оптимизаторы в GoGetLinks

Обычно я не пишу на такие темы, но тут просто не сдержался. Анкор из задания:

аську тел сони эриксон бесплатно (оптимизатор запретил склонять текст ссылки )

B описании:

Ссылка обязательно должна быть окружена тематическим текстом: осмысленным предложением, а не парой слов типа «рекомендуем» или «на этом сайте».

Скорей всего, это будет первый рекламодатель, которого отправлю в блеклист.
Я играю в Blogowar.ru, чего и вам советую.

0.00 avg. rating (0% score) - 0 votes

MYSQL RAND(), как получить рандомную строку из БД

Чем дольше занимаюсь кодингом, тем чаще втыкаюсь в такие вещи, которые сто раз уже использовал, а на 101 сломал голову.

Есть таблица, в ней N тысяч записей, нужно вытащить одну рандомно, кой-чего с ней сделать, и если все ок то ее использовать, если нет то вернуть на место с соответствующей отметкой и взять другую, пока не будет найдена подходящая по условиям.
Я, особо не мудря, делаю цикл while до условия, пока не найдена подходящая запись. В цикле такой запрос к БД

SELECT * FROM `table` WHERE 1 ORDER BY RAND() LIMIT 1

По задумке, это возвращает каждый раз новую запись. Но у mysql есть такая приятная особенность — она кеширует запросы и в цикле каждый будет возвращаться одно и тоже поле. Наверно, если разрывать соединение, тогда будет возвращаться разное число. Я таких вещей в душе не знал, поэтому немного удивился, погуглив, что это самый дибильный способ вытащить рандомную запись из базы. На очень больших БД это завесит сервер напрочь.

Вариант получше заключался в том, чтобы вытащить максимальное значение записей и получить рандомное число в его пределах, затем запросить из базы строку с LIMIT рандомное число.

//запрос макс количества записей в переменную
SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table`

//далее запрос с этой переменной
SELECT * FROM `table` LIMIT $somevar, 1

Он же по тестам получился самый быстрый.

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

SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX( id ) * RAND( ) ) FROM `proxy` ) ORDER BY id LIMIT 1

Все варианты расписаны тут.

Единственное, что не устроило во втором варианте, это два запроса к базе.

3.75 avg. rating (75% score) - 12 votes
css.php