Утро, кофе, расписание...

Обожаю такое утро. Проснешься, в панике посмотришь на время, поймешь, что опаздываешь на первую пару, подскочишь, умоешься, покушаешь и только потом взглянешь на расписание, в котором черным по белому написано, что во вторник — 1 пары нет, 2-ая — это философия-лекция, и только на 3-ю пару нужно обязательно появиться! А потом — расплываешься в улыбке — как же все таки хорошо, что можно поспать ещё полчасика :-)

Учебное

Таня сдала программирование на 5 (вот только что звонила). Сама! Молодец!! :) Ещё осталась ей физика и все, а у меня дела немного похуже — сдал только базы данных, получил допуск по всем предметам, ни одного автомата (это у меня нормально. Ни одного автомата за всю историю института :D). Учится нет никакого желания, но надо. Так что скоро сяду за лекции, учить и решать билеты, писать очередные шпоры. В прочем я начинаю по этому скучать :)

Google Charts — строим графики зависимостей

Как я уже говорил — моя практика в университете заключается в том, что я должен написать приложение на php, которые будет подсчитывать количество повторяющихся в тексте символов и которые строго определены в конфиге (который может содержаться и в текстовом файле и просто передаваться через textarea). Как только мне задали это задания — я подумал о Google Charts о котором недавно читал на хабрахабре.
Вчера я сел и написал это небольшое приложение:

function graphfile($SUPPORTCHARS, $file=false, $text=false)
{
	$str = array();	  //for sting
	$ch=0;
	if($text && !$file)
{
	$file = fopen("tmp/tmp.txt", "w");
	fwrite($file, $text);
	fclose($file);
	$file = fopen("tmp/tmp.txt", "r");

}
	while(!feof($file))
	{
		$str = fgets($file);
		$lenstr = strlen($str);
		for($i=0;$i<=$lenstr;$i++)
		{
			if($str[$i]!=NULL && strstr($SUPPORTCHARS, $str[$i]))
			{
				$pt = $ch;
				$tr = 0;
				for($j=0;$j<$ch;$j++)
				{
					if($chars[$j][1]==$str[$i])
					{
						$pt = $j;
						$tr = 1;
					}
				}
				if($tr!=1)
				{
					$chars[$pt][1]=$str[$i];
					$chars[$pt][0]=0;
				}
				for($j=0;$j<=$lenstr;$j++)
				{
				if($str[$j]==$chars[$pt][1])
					{
						$str[$j]=NULL;
						$chars[$pt][0]++;
					}
				}
				if($tr!=1) $ch++;
			}
		}
	}
	fclose($file);
	$charturl = "http://chart.apis.google.com/chart?cht=bvs&chxt=x,y,x&";
	$width = $ch*20;//chs=$widthx$height;
	$height = 400;
	do{
		$height--;
		$width--;
	}while(($width*$height)>300000 || $width>1000);
	sort($chars);
	$vars = "0:|";
	$data = "2:|";
	$maxv = 0;
	$chb = 15;
	for($i=0;$i<$ch;$i++)
	{
		$vars .= $chars[$i][0]."|";
		$data .= $chars[$i][1]."|";
		if($chars[$i][0]>$maxv) $maxv = $chars[$i][0];
	}
	$charturl .= "chs=".$width."x".$height."&";
$simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
$chartData = "s:";
  for ($i = 0; $i < $ch; $i++) {
    $currentValue = $chars[$i][0];
    if ($currentValue > -1) {
    $chartData.=substr($simpleEncoding,61*($currentValue/$maxv),1);
    }
      else {
      $chartData.='_';
      }
  }
   $charturl .= "chd=".$chartData."&chbh=".$chb."&chco=76A4FB&chxl=".$vars."1:|0|".($maxv/2)."|".$maxv."|".$data;
	?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=<?=$_CHARSET;?>" />
<title><?=_TITLE;?></title>
</head>
<body>
<h3><i><?=_TITLE;?></i></h3>
		<p><i><?=_GRAPHTITLE;?></i></p>
<?=$error;?>
<table>
	<tr>
		<td>
			<?php
				 echo "<a href = \"".$charturl."\" target = \"_blank\"><img src = \"".$charturl."\" border = \"0\" width = \"".$width."\" height = \"".$height."\"/></a>";
			?>
		</td>
	</tr>
	<tr>
		<td>
				<a href = "index.php"><?=_NEWGRAPH?></a>
		</td>
	</tr>
</table>
</body>
</html>
	<?php
}

В прочем в построении графика не было ничего необычного. С помощью отдельной функции я считал повторяющиеся в тексте символы, которые разрешены для учета.
Те, кому не терпится посмотреть исходных код программы я могу предложить посмотреть исходный код функции, которая обрабатывает данные из файла и строит графики.
(далее...)