Как-то несколько лениво втягивается все после отпуска :) На работе ожидается много интересных задач, прям-таки, пребываю в нетерпении оных. + надо совершить победный рывок для mwc 1.6 и потихоньку реинкарнировать и отрефакторить mwc 1.5. Как - то пора уже поставить точку, а то пока многоточие..
вторник, 19 августа 2014 г.
среда, 30 июля 2014 г.
первый блин комом
Наконец-то, поставили новый двиг на сервер, который не игц. Узнал много нового. Некоторое из нового о себе :).
И кстати, пришел к выводу, что mailto все-таки вещь иногда ооочень полезная.
И кстати, пришел к выводу, что mailto все-таки вещь иногда ооочень полезная.
четверг, 24 июля 2014 г.
приключения с IMAP на php
В рамках корпоративной ERP-системы (упоминал в своей прошлой записи) разрабатывается web-mail-клиент (о как). Долго думал, использовать Pop3 или же imap. Все-таки выбрал imap, посмотрел в интернетах на наличие готовых решений. Нашел, но немного не того, пришлось пилить. Процесс, конечно еще продолжается, но костяк более-менее сделал (Скажу сразу, что дополнял класс. Он работает, но ряд вещей стоит все же переписать:
подключение и юзание:
да, кстати,есть небольшая бага: в некоторых случаях название атачей будет типа =?UTF_8?B?..... лечится просто :
/*
* Класс предназначен для считывания данных(писем) почты посредством работы (IMAP подключени к серверу)
*/
class ImapCheck
{
private $mbox;
private $htmlmsg;
private $plainmsg;
private $charset;
private $attachments = array();
private $unread;
private $hcharset;
private $filescount =0;
/* public function __get($name)
{
if ($name=='mail') return $this->unread;
else return null;
}*/
public function getmail()
{
return $this->unread;
}
/**
* Конструктор
* @param string $host хост
* @param string $login аккаунт ящика
* @param string $pwd пароль
* @param array $options
* [letterID] = null|int - если известен ид письма
* [search] =
* ALL - return all messages matching the rest of the criteria
ANSWERED - match messages with the \\ANSWERED flag set
BCC "string" - match messages with "string" in the Bcc: field
BEFORE "date" - match messages with Date: before "date"
BODY "string" - match messages with "string" in the body of the message
CC "string" - match messages with "string" in the Cc: field
DELETED - match deleted messages
FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
FROM "string" - match messages with "string" in the From: field
KEYWORD "string" - match messages with "string" as a keyword
NEW - match new messages
OLD - match old messages
ON "date" - match messages with Date: matching "date"
RECENT - match messages with the \\RECENT flag set
SEEN - match messages that have been read (the \\SEEN flag is set)
SINCE "date" - match messages with Date: after "date"
SUBJECT "string" - match messages with "string" in the Subject:
TEXT "string" - match messages with text "string"
TO "string" - match messages with "string" in the To:
UNANSWERED - match messages that have not been answered
UNDELETED - match messages that are not deleted
UNFLAGGED - match messages that are not flagged
UNKEYWORD "string" - match messages that do not have the keyword "string"
UNSEEN - match messages which have not been read yet
* флаги для поиска
*/
public function ImapCheck($host, $login, $pwd, $options = array('search'=>'ALL'))
{
$messages=array();
$folder="INBOX";
//$folder="[Gmail]/&BCEEPwQwBDw-"; // если вам захочется почитать спам на гугломыле.
$this->mbox = imap_open ("{$host}$folder", $login,$pwd) or die(imap_last_error());//OP_HALFOPEN
if(isset($options["search"]))
{
if(!isset($options["letterID"]) || $options["letterID"] == NULL)
{
$arr = imap_search ($this->mbox, $options["search"]);
if ($arr !== false)
{
foreach ($arr as $i)
$messages[]=$this->getLEtter($i);
$this->unread=$messages;
unset($messages);
}
else {$this->unread=false;}
}
else
$this->unread[$options["letterID"]]=$this->getLEtter($options["letterID"]);
}
else
die("parametr options->search are empty!");
}
/**
* заголовок от письма
* @param $num номер письма в ящике
* @return array
*/
public function getHeaderInfo($num)
{
$headerArr = imap_headerinfo ( $this->mbox, $num);
$elements = imap_mime_header_decode($headerArr->subject);
$subj = "";
for ($p = 0; $p < count($elements); $p++)
{
if($elements[$p]->charset !="default" && strtolower($elements[$p]->charset) !="utf-8")
{
$subj .= iconv($elements[$p]->charset, 'UTF-8', $elements[$p]->text);
$this->charset = $elements[$p]->charset;
$this->hcharset = $elements[$p]->charset;
}
else if($elements[$p]->charset =="default")
{
$subj.= iconv('KOI8-R','UTF-8', $elements[$p]->text);
$this->charset = 'KOI8-R';
$this->hcharset = 'KOI8-R';
}
else
{
$subj.=$elements[$p]->text;
$this->charset = 'UTF-8';
$this->hcharset = 'UTF-8';
}
}
if(!isset($headerArr->sender[0]->personal))
$headerArr->sender[0]->personal = "unknown";
return array(
'from'=> $headerArr->sender[0]->mailbox . "@" . $headerArr->sender[0]->host,
'to'=> $headerArr->to[0]->mailbox . "@" . $headerArr->to[0]->host,
'name'=> $this->decode($headerArr->sender[0]->personal) ,
'subject'=>$subj,
'Date'=>strtotime($headerArr->Date)
);
}
/**
* чтение письма по номеру
* @param $num номер
* @return array
*/
public function getLetter($num)
{
$return = $this->getHeaderInfo($num);
$this->getmsg($num); //читаем тело письма (сообщение)
//imap_setflag_full($this->mbox, $i, "\\Seen"); //прочли письмо, поставили флаг, что прочли
$return["charset"] = $this->charset;
$return["plain"] = $this->plainmsg;
$return["html"] = $this->htmlmsg;
$return["attach"] = $this->attachments;
$return["letterID"] = $num;
return $return;
}
private function decode($enc)
{
$parts = imap_mime_header_decode($enc);
$str='';
for ($p=0; $pcharset;
$part = $parts[$p]->text;
if ($ch!=='default')
$str.=mb_convert_encoding($part,'UTF-8',$ch);
elseif ($ch=='default')
$str.=mb_convert_encoding($part,'UTF-8','KOI8-R');
else $str.=$part;
}
return $str;
}
private function getmsg($mid)
{
$this->htmlmsg = $this->plainmsg = $this->charset = '';
$this->attachments = array();
$s = imap_fetchstructure($this->mbox,$mid);
if (!isset($s->parts))
$this->getpart($mid,$s,0);
else
{
foreach ($s->parts as $partno0=>$p)
$this->getpart($mid,$p,$partno0+1);
}
}
private function getpart($mid,$p,$partno)
{
$data = ($partno) ? imap_fetchbody($this->mbox,$mid,$partno): imap_body($this->mbox,$mid);
if ($p->encoding==4)
$data = quoted_printable_decode($data);
elseif ($p->encoding==3)
$data = base64_decode($data);
$params = array();
if (isset($p->parameters))
foreach ($p->parameters as $x)
$params[ strtolower( $x->attribute ) ] = $x->value;
if (isset($p->dparameters))
foreach ($p->dparameters as $x)
$params[ strtolower( $x->attribute ) ] = $x->value;
if (isset($params['filename']) || isset($params['name']))
{
$filename = (isset($params['filename']))? $params['filename'] : $params['name'];
if(isset($this->attachments[$filename])) //если уже есть в атачменте такой файл, делаем "версионность"
{
$this->filescount ++;
$filename = $this->filescount."_".$filename;
}
$this->attachments[$filename] = $data;
}
elseif ($p->type==0 && isset($data))
{
if (strtolower($p->subtype)=='plain')
{
$this->plainmsg .= trim($this->ConvBody($data)) ."\n\n";
}
else
$this->htmlmsg .= $this->ConvBody($data) ."
";
if(isset($params['charset']))
$this->charset = $params['charset'];
}
elseif ($p->type==2 && isset($data))
{
$this->plainmsg .= trim($this->ConvBody($data)) ."\n\n";
}
if (isset($p->parts)) {
foreach ($p->parts as $partno0=>$p2)
$this->getpart($mid,$p2,$partno.'.'.($partno0+1));
}
}
private function ConvBody($text)
{
if(!empty($this->hcharset) && $this->hcharset !='UTF-8')
{
$text = iconv($this->hcharset, 'UTF-8', $text);
}
return $text;
}
/**
* Закрыть имап подключение
*/
public function close()
{
imap_close($this->mbox);
}
}
//TODO: отловить момент, когда делают рассылку и данный пользователь так же учавствует в ней, выдает адрес, перввый из списка [to]
подключение и юзание:
require "inc/imap.php";
$options = array('search'=>'SINCE "'.date("j F Y",strtotime("-1 DAY")).'"');//тип поиска сообщений на почте - собираем сообщения со вчера по седня :)
$rm = new ImapCheck("{server.ru/imap}","mail@server.ru","password",$options);
$mail_list = $rm->getmail(); //получили письма
$rm->close();
выплюнет массив с письмами примерно так:
[from] =>откуда
[to] => кому
[name] => имя приславшего
[subject] => название
[Date] => дата, письма
[charset] => кодировка
[plain] => если обычный текст
[html] => если хтмл-код
[letterID] => id письма на сервере (не постоянно! по факту это просто количественный номер)
[attach] => Array
(
[название_изображения] => бинарное содержание(то есть можно обычным fput воткнуть куда надо)
)
iconv_mime_decode("название файла",0, "кодировка")
надеюсь, кому-то помог.
среда, 23 июля 2014 г.
о прошедшем о0
Давненько я тут ничего не постил, почти как год :) С того времени достаточно много всего поменялось/изменилось:
- наконец-то сделал MWC(e) 1.6
- начал изучение дополнительных ОО-языков
- несколько поднатаскался в T-SQL
- произошел ряд изменений в команде p4f.
Ну, по чуть-чуть обо всем.
Самая главная цель была дописать свеженький mwc, который потихоньку начал превращаться в CMS. Причем, в процессе создания напилил ( и продолжаем улучшать) совершенно нечаянно ERP-систему для фирмы, где я сейчас работаю. Писалась она не в 1 наглую рожу (мою), но еще есть грамотный Архитектор и T-SQL программист (хотя, последнее он яростно отрицает ^_^ , а зря). В общем, оно мне не плохо помогло самому поднатаскаться в SQL и осознать, что я несколько недооценивал СУБД. Двиг стал по-серьезнее, хотя, это все еще не совсем полноценная CMS (ну, на мой взгляд). Примечательно то, что чем более совершенствовал сам MWC, тем более приходило осознание, что му как-то не так уж и нужно мне вообще. Двиг готов, но по факту для му работает только на 1 хосте. И меня не тянет трындеть о нем направо и налево вообще о0, это давно стало уже хобби, нежели попыткой заработать на печеньки халтурой. До сих пор, я не использовал никаких глобальных фреймоврков а ля code engineer vii и т.п. Как-то слишком "гигантско" оно для цели небольшой кмс, хотя, бесспорно быстрее должна идти разработка (ну, в плане отсутствует разработка ядра, так как оно уже есть в виде самого фреймворка). Как то более безопасно выходит, что ли, когда знаешь все как и где и какие засады могут быть, а главное, четко представляешь возможности и пути улучшения.
Как ни странно, но использовать ООП в php меня сильно научили... java/c#, где сама концепция языка есть ООП.
Про команду сильно распространяться не хочу, так как есть ряд спорных моментов и исходя из возможных обид, напишу только что не сошлись характерами, в первую очередь. Сам античит как и ланчер перерабатываются, так как найден более простой и надежный способ защиты, на который следовало перейти уже давно. Но это отдельная история и писать пока что-либо подробно не стану, по крайней мере, пока.
Постараюсь оживить немного блог, но обещать не стану.
- наконец-то сделал MWC(e) 1.6
- начал изучение дополнительных ОО-языков
- несколько поднатаскался в T-SQL
- произошел ряд изменений в команде p4f.
Ну, по чуть-чуть обо всем.
Самая главная цель была дописать свеженький mwc, который потихоньку начал превращаться в CMS. Причем, в процессе создания напилил ( и продолжаем улучшать) совершенно нечаянно ERP-систему для фирмы, где я сейчас работаю. Писалась она не в 1 наглую рожу (мою), но еще есть грамотный Архитектор и T-SQL программист (хотя, последнее он яростно отрицает ^_^ , а зря). В общем, оно мне не плохо помогло самому поднатаскаться в SQL и осознать, что я несколько недооценивал СУБД. Двиг стал по-серьезнее, хотя, это все еще не совсем полноценная CMS (ну, на мой взгляд). Примечательно то, что чем более совершенствовал сам MWC, тем более приходило осознание, что му как-то не так уж и нужно мне вообще. Двиг готов, но по факту для му работает только на 1 хосте. И меня не тянет трындеть о нем направо и налево вообще о0, это давно стало уже хобби, нежели попыткой заработать на печеньки халтурой. До сих пор, я не использовал никаких глобальных фреймоврков а ля code engineer vii и т.п. Как-то слишком "гигантско" оно для цели небольшой кмс, хотя, бесспорно быстрее должна идти разработка (ну, в плане отсутствует разработка ядра, так как оно уже есть в виде самого фреймворка). Как то более безопасно выходит, что ли, когда знаешь все как и где и какие засады могут быть, а главное, четко представляешь возможности и пути улучшения.
Как ни странно, но использовать ООП в php меня сильно научили... java/c#, где сама концепция языка есть ООП.
Про команду сильно распространяться не хочу, так как есть ряд спорных моментов и исходя из возможных обид, напишу только что не сошлись характерами, в первую очередь. Сам античит как и ланчер перерабатываются, так как найден более простой и надежный способ защиты, на который следовало перейти уже давно. Но это отдельная история и писать пока что-либо подробно не стану, по крайней мере, пока.
Постараюсь оживить немного блог, но обещать не стану.
среда, 14 августа 2013 г.
14.08.2013
Уже как-то не оригинально начинать запись в этом блоге со слов "дааа.. что-то я давно тут не писал". На самом деле, новостей - гора и возвышенность рядом. Со временем, как обычно - "то оно есть и вдруг его нет" (c). ДА и, честно говоря разговаривать самому с собой - не весело :).
Ну да и ладно...
..Пообедав, в оставшееся обеденное время полез я на хабру, на хабре наткнулся на пост, почитал, в голове возникли образы со старых фильмов (или фильма, уже не помню): "в далеком будущем мир поделен между огромными корпорациями, борющимися за влияние..." блин, прямо нострадамусы какие-то.
И ведь оно действительно так. Идет война - в первую очередь информационная, призы которой - деньги, известность, власть и.. информация, на которой, сопсно, все и строится... Все следят друг за другом, собирают информацию вплоть до того, сколько раз бегал в туалет за день... Самое забавное, что мол вот! все для рекламы и т.п. но "мы то с вами знааааем" (c). заскрипел где-то голосок*
на самом деле, за все нужно платить, за удобство - тоже. только вот цена иногда страшная - обрушение стереотипов, стирание личностей (вспоминаем про нашу моду, да, голые ж... будут модны - будут толпы голозадых макак), но речь не об этом... думаю :)
у меня случился парадокс - выбирал себе планшетник... по сути, выбирался даже не производитель а.. ось о0. выбор стоял адройд vs иось, много народу советовало, мол, бери себе адройдовоз, это офигенно, столько преимуществ, система открытая, пересоберешь её и прям все супер будет...
меня ломало, на самом деле... Переломный момент наступил после размышлений(вот ведь, горе от ума, а) - слишком много стало гугла. Да, он удобен, хорош, и т.п. но эта зараза слишком любопытная, да, даже на иоси у меня есть ид, но яблоки пока что не специализируются на сборе информации личностной( привычки, предпочтения и т.п.) о клиентах/пользователях, в отличии от гугла. Я пожертвовал большей гибкостью системы, но в замен получил стабильность и приемлемую работу. Да, много есть углов у эплов из-за их "железного занавеса", но с другой стороны как-то спокойнее о0.
и да, хочется сказать, что я дико не люблю хромиум, который писан гуглом за то....
..а вот не скажу:
во-первых, не только гугл его пилил
во-вторых, никто не заставлял оперу переходить на это "чудо". У хромиума, на мой взгляд ооочень много недостатков, но, за все надо платить, в данном случае это цена за скорость и поддержку последних стандартов. Но вот для кого она приемлема, а для кого нет?
Ну да и ладно...
..Пообедав, в оставшееся обеденное время полез я на хабру, на хабре наткнулся на пост, почитал, в голове возникли образы со старых фильмов (или фильма, уже не помню): "в далеком будущем мир поделен между огромными корпорациями, борющимися за влияние..." блин, прямо нострадамусы какие-то.
И ведь оно действительно так. Идет война - в первую очередь информационная, призы которой - деньги, известность, власть и.. информация, на которой, сопсно, все и строится... Все следят друг за другом, собирают информацию вплоть до того, сколько раз бегал в туалет за день... Самое забавное, что мол вот! все для рекламы и т.п. но "мы то с вами знааааем" (c). заскрипел где-то голосок*
на самом деле, за все нужно платить, за удобство - тоже. только вот цена иногда страшная - обрушение стереотипов, стирание личностей (вспоминаем про нашу моду, да, голые ж... будут модны - будут толпы голоз
у меня случился парадокс - выбирал себе планшетник... по сути, выбирался даже не производитель а.. ось о0. выбор стоял адройд vs иось, много народу советовало, мол, бери себе адройдовоз, это офигенно, столько преимуществ, система открытая, пересоберешь её и прям все супер будет...
меня ломало, на самом деле... Переломный момент наступил после размышлений(вот ведь, горе от ума, а) - слишком много стало гугла. Да, он удобен, хорош, и т.п. но эта зараза слишком любопытная, да, даже на иоси у меня есть ид, но яблоки пока что не специализируются на сборе информации личностной( привычки, предпочтения и т.п.) о клиентах/пользователях, в отличии от гугла. Я пожертвовал большей гибкостью системы, но в замен получил стабильность и приемлемую работу. Да, много есть углов у эплов из-за их "железного занавеса", но с другой стороны как-то спокойнее о0.
и да, хочется сказать, что я дико не люблю хромиум, который писан гуглом за то....
..а вот не скажу:
во-первых, не только гугл его пилил
во-вторых, никто не заставлял оперу переходить на это "чудо". У хромиума, на мой взгляд ооочень много недостатков, но, за все надо платить, в данном случае это цена за скорость и поддержку последних стандартов. Но вот для кого она приемлема, а для кого нет?
вторник, 7 мая 2013 г.
не знаю как назвать
Сегодня вышел интересный опыт - попался мне сайт одного человека из mu-comunity, он ко мне и раньше попадал, правда, другие версии, некоторые модули были под обфускацией. Я все как - то не решался её снять, но, в этот раз появилась, относительно свободная минута ну и ради интереса сел разбирать.
К своему удивлению, разобрал. Понадобился час времени для того, чтобы полностью расшифровать обфусцированные модули.. Ну и с "чистым" кодом я решил посмотреть на весь сайт. Был несколько удивлен, как-то все оказалось легко. Много с чем я не согласен, но это дело того, кто писал. Если посчитал, что так должно быть - значит, так и должно быть.
Но, не это главное. Когда, грубо говоря, я по кусочкам кода собрал весь сайт воедино... кхм.. получил легкое разочарование. Мне, беря во внимание разговоры, которые были про сайт от покупателей и просто по описаниям, казалось что это мегасложная махина, с неимоверным функционалом и уровнем абстракции в коде. Ан нет. Обычный, в общем-то, сайт с уклоном на функциональное программирование. Сравнивать его с MWC не стану, а то пойдут слухи, что я хейтер и лицемер.
На самом деле, если учесть работы автора в паблик (релиз первой паблик версии) видно, что человек решил отойти от того, что делал раньше, пересмотреть все.
А еще, честно говоря, надеюсь, что тот сайт, что мне попался достаточно старой версии и что в новой все действительно, как я думал.
К своему удивлению, разобрал. Понадобился час времени для того, чтобы полностью расшифровать обфусцированные модули.. Ну и с "чистым" кодом я решил посмотреть на весь сайт. Был несколько удивлен, как-то все оказалось легко. Много с чем я не согласен, но это дело того, кто писал. Если посчитал, что так должно быть - значит, так и должно быть.
Но, не это главное. Когда, грубо говоря, я по кусочкам кода собрал весь сайт воедино... кхм.. получил легкое разочарование. Мне, беря во внимание разговоры, которые были про сайт от покупателей и просто по описаниям, казалось что это мегасложная махина, с неимоверным функционалом и уровнем абстракции в коде. Ан нет. Обычный, в общем-то, сайт с уклоном на функциональное программирование. Сравнивать его с MWC не стану, а то пойдут слухи, что я хейтер и лицемер.
На самом деле, если учесть работы автора в паблик (релиз первой паблик версии) видно, что человек решил отойти от того, что делал раньше, пересмотреть все.
А еще, честно говоря, надеюсь, что тот сайт, что мне попался достаточно старой версии и что в новой все действительно, как я думал.
пятница, 5 апреля 2013 г.
о всем по немногу и о госах
Долго я как-то ничего не писал сюда. Новостей, на самом деле, накопилось много:
я ток-ток сдал госы ы... осталось написать диплом и радоваться жизни, как дипломированному специалисту.
Ну и касаемо MWC. Тепериче он становится MWCE, во-первых, чтобы не путали с конференцией мобайл, а во-вторых, это действительно уже становится движком. Причем, новая версия будет полноценной КМС, которую можно ставить как на ms sql, так и на mySql, как для му серверов, так и для любых иных проектов.
Ну и на сладость, купил себе лицензионную ИДЕ под проганье... потратил 100 баксов, но оно того стоило, офигенная штука!
В общем, постараюсь почаще тут отписываться...
И да, кстати, у кого есть возможность дать мне инвайт на хабре, буду оч признателен.
я ток-ток сдал госы ы... осталось написать диплом и радоваться жизни, как дипломированному специалисту.
Ну и касаемо MWC. Тепериче он становится MWCE, во-первых, чтобы не путали с конференцией мобайл, а во-вторых, это действительно уже становится движком. Причем, новая версия будет полноценной КМС, которую можно ставить как на ms sql, так и на mySql, как для му серверов, так и для любых иных проектов.
Ну и на сладость, купил себе лицензионную ИДЕ под проганье... потратил 100 баксов, но оно того стоило, офигенная штука!
В общем, постараюсь почаще тут отписываться...
И да, кстати, у кого есть возможность дать мне инвайт на хабре, буду оч признателен.
суббота, 2 марта 2013 г.
O crysis 3
Помню, когда поиграл во 2 кризис, облазил весь интернет, в поисках информации про 3 (играл я несколько позже, чем вышла игра). Так вот, в этот раз я чуть снова не пропустил начала веселья :) Как очухался, по быстрому полез на ориджин и купил обычную версию (не, ну как обычно, печаль была в том, что нужно было подождать пару дней и взять со скидкой, но желание посмаковать новую часть, теперь уже трилогии, было сильнее). Сразу скажу - не разочаровался. Отличное музыкальное сопровождение, обалденное качество cryengine, интересный сюжет (хотя, надо признать, что направление заезжено: как - то давно, с другом разговаривал по поводу кризиса 2 и он мне сказал: "это же прототайп! чистой воды он!", но.. я не играл, возражать не стану и сейчас). Единственное что не 1 я заметил - как то быстро все прошло, то есть, создалось ощущение, что вроде только начал, а уже конец. НО могу сказать что я просидел за игрой 12 часов, правда, не занимался спидраном : вычищал некоторые зоны под корень с луком наперевес, наслаждаясь, так сказать, новым девайсом :).
Пройдя кризис 3, ощутил дежа вю: полез в интернет с вопросом "будет ли кризис 4?", ответ нашел - будет, но это будет нечто кардинально новое. Заинтриговали ребята с крайтека, будем ждать. Хотя, сама история показалась какой-то незаконченной:
- что было с психом, как поймали? он был аж не один, а с толпой в нанокостюмах... как что и где?
- куда совсем пропал алькатрас - да, да, да, личность пророка его поглотила, но как-то ощущается недосказанность что ли..
- что было в период между 2 и 3 частами ?! вах, жуть как интересно, так как там тоже осталось много вкусностей.
В общем, как минимум на парочку дополнений (как кризис вархед) тут набралось, на мой взгляд.
Иээх, буду внимательно следить, что же будет в 4 кризисе... или в кризис: хроники чего-то там, или в что-то там оф кризис... время покажет :D
Пройдя кризис 3, ощутил дежа вю: полез в интернет с вопросом "будет ли кризис 4?", ответ нашел - будет, но это будет нечто кардинально новое. Заинтриговали ребята с крайтека, будем ждать. Хотя, сама история показалась какой-то незаконченной:
- что было с психом, как поймали? он был аж не один, а с толпой в нанокостюмах... как что и где?
- куда совсем пропал алькатрас - да, да, да, личность пророка его поглотила, но как-то ощущается недосказанность что ли..
- что было в период между 2 и 3 частами ?! вах, жуть как интересно, так как там тоже осталось много вкусностей.
В общем, как минимум на парочку дополнений (как кризис вархед) тут набралось, на мой взгляд.
Иээх, буду внимательно следить, что же будет в 4 кризисе... или в кризис: хроники чего-то там, или в что-то там оф кризис... время покажет :D
среда, 26 декабря 2012 г.
ого...
Как же я давно сюда не заходил! Последний раз был я тут.. ого.. 29 сентября. Ну, жаловаться на время, я думаю, не стоит. Ведь когда захотел - вроде как и нашел. В общем-то готовлюсь к диплому.
Решил отписаться здесь, так как думаю с небольшой но все же проблемой этой сталкивалось большинство.
Суть: приперло мне по работе узнать количество рабочих дней в php, как ни странно, ни 1 встроенной функции не нашел (от зараза... ) , решил не унывать и пошел щупать гуглю. После тесного общения с оной нифига вразумительного не нашел, лишь пару человеков намекали на то, как можно реализовать сию штуковину, то есть, функцию по рассчету.
В общем, мой моск решил сию задачу, возможно даже верно, код нижее:
Решил отписаться здесь, так как думаю с небольшой но все же проблемой этой сталкивалось большинство.
Суть: приперло мне по работе узнать количество рабочих дней в php, как ни странно, ни 1 встроенной функции не нашел (от зараза... ) , решил не унывать и пошел щупать гуглю. После тесного общения с оной нифига вразумительного не нашел, лишь пару человеков намекали на то, как можно реализовать сию штуковину, то есть, функцию по рассчету.
В общем, мой моск решил сию задачу, возможно даже верно, код нижее:
/** * Считает рабочие дни недели (без учета праздников, т.е убирает выходные) * @cdays(int) - количество дней до нужной даты *Сопсно, получилось вот такое вот чудо, не знаю, насколько оно верно буит отрабатывать у кого - то, у меня она пока работает как надо. если кто-то найдет ошибку, оч прошу сообщить :) За сим пока откланиваюсь, но обещаю появляться почаще.количество рабочих дней(int) **/ function WorkDays($cdays) { if($cdays<0) { $koef =-1; $cdays=abs($cdays); } else $koef =1; $weekends = floor($cdays/7)*2; //выходные с целых недель в сроке $freeDay = $cdays%7; //кол-во дней, недотянувшее до целой недели $cdays-=($weekends+$freeDay); //вычитаем точно известные выходные и вычитаем все "пока лишние" дни if ($freeDay>0)//если есть свободные дни { $nownum = @date('w'); //номер дня недели(сегодняшнего), как точка отсчета $all = $nownum+$freeDay; //сегодняшний день недели + кол-во дней if ($all-7 >= 0) //если во время срока точно есть выходные $freeDay-=2; elseif($all-6 >=0) $freeDay--; $cdays+=$freeDay; } return $cdays*$koef; }
суббота, 11 августа 2012 г.
немного размышлений и новостей
Давненько я тут ничего не писал. 2 патча на сайт успел запилить, а тут как то все не отписывался, хотя, поводов то уже было много, и мыслей тоже. В общем, начинать надо сначала, наверно :)
что порадовало: порадовала тема вафлана, где он решил излить историю создания ммв, позже платного wbv, зацепил меня там момент
Немного позже (год-полтора) уже стартовал тот MWC, который пишется/модернизируется сейчас. Да, примерно 20% сайта были уже готовые модули, правда я их усиленно переписал под свой двиг, но как бы про уникальные вещи, которые разбрелись по вебам тоже есть.
Вообще забавно, самый мой первый релиз мвц был как раз с таким вот описанием, позже я ушел на сухую констатацию возможностей и краткое описание, а те, кто начинал с описания возможностей пришел как раз к тому с чего я начинал.
Хотя, вебы действительно очень похожи, принципами работы, модулями, я как то в последнее время даже не уверен, стоит ли вообще устраивать эти "кто лучше" или нет. Так как многим нравится одно, вторым другое. Кому - то удобнее так, кому -то вообще дев нравится...
Что касается последнего апдейта.. пришлось вымученно сделать капчу отключаемой, так как у многих в дизах её нет и вписывать явно не хотят/не могут. Хотя я сугубо против отключения, но если надо... пусть не руками лазят по коду, а в настройках отключают...
вообще, чем дальше пишу, тем больше понимаю, что близится 2.0... Просто еще раз переписывать весь двиг придется, так как в этом иногда такие куски кода нахожу, что в панике сижу и думаю "КАК!? КАК Я ТАКОУЮ :?*"№;%№;: МОГ НАПИСАТЬ?!!!"..
но 2.0 вряд ли будет фришным, ой как вряд ли.
что порадовало: порадовала тема вафлана, где он решил излить историю создания ммв, позже платного wbv, зацепил меня там момент
Так же MuWebClone был основан из всего разного, в нём и MMW, и DSW, и DEW ну вообщем всякое разное.На самом деле MWC был основан 2 раза: 1й раз это был переписанный му веб 0.8, затем в него вошел 0.3 мувеб.. в общем, учился я тогда прогать только. Потом настал перерыв у проекта. Далее, был никому не известный сайт, который писал я же, и он был полностью на класах, но, по моему мнению, тогда это было уныло и проект не удался, хотя работает. Рано тогда мне было писать в классах, ой как рано.
Немного позже (год-полтора) уже стартовал тот MWC, который пишется/модернизируется сейчас. Да, примерно 20% сайта были уже готовые модули, правда я их усиленно переписал под свой двиг, но как бы про уникальные вещи, которые разбрелись по вебам тоже есть.
Всё самое сочное решил воссоединить в одно единое, простота, скорость и надёжность была моя цель.на самом деле, это была не только его цель. Начинал писать новый движек я с этим девизом, да и, наверное все сейчас стремятся к этому.
Вообще забавно, самый мой первый релиз мвц был как раз с таким вот описанием, позже я ушел на сухую констатацию возможностей и краткое описание, а те, кто начинал с описания возможностей пришел как раз к тому с чего я начинал.
Хотя, вебы действительно очень похожи, принципами работы, модулями, я как то в последнее время даже не уверен, стоит ли вообще устраивать эти "кто лучше" или нет. Так как многим нравится одно, вторым другое. Кому - то удобнее так, кому -то вообще дев нравится...
Что касается последнего апдейта.. пришлось вымученно сделать капчу отключаемой, так как у многих в дизах её нет и вписывать явно не хотят/не могут. Хотя я сугубо против отключения, но если надо... пусть не руками лазят по коду, а в настройках отключают...
вообще, чем дальше пишу, тем больше понимаю, что близится 2.0... Просто еще раз переписывать весь двиг придется, так как в этом иногда такие куски кода нахожу, что в панике сижу и думаю "КАК!? КАК Я ТАКОУЮ :?*"№;%№;: МОГ НАПИСАТЬ?!!!"..
но 2.0 вряд ли будет фришным, ой как вряд ли.
пятница, 27 июля 2012 г.
о сайте да о скриптике MMOTOP
Фух, что-то закрутился я и забыл выложить пару апдейтов, но фанаты сайта не дремлют, бомбардируют асю. Спасибо им за это.
На самом деле, как то неуклюже я состряпал скрипты голосования, даже не сами а парсер. А точнее парсер ммо топа. В сайте он пока стандартный, но я уже начал клепать класс - заготовочку, так сказать, для удобства.
в общем то пока подключив данный скрипт и набрав
в методе MWCreadTop я подумываю реализовть уже исполнение непосредственно для моего движка
На самом деле, как то неуклюже я состряпал скрипты голосования, даже не сами а парсер. А точнее парсер ммо топа. В сайте он пока стандартный, но я уже начал клепать класс - заготовочку, так сказать, для удобства.
/**
* Класс, читающий статистику, предоставляемую ММО ТОПом по контролю голосования на сервере
* v 0.1
**/
class MMOTop
{
/**
* Получает текстовый файл контента с MMOTOPa
* @content - string адрес файла статистике на ММО ТОПЕ (узнается в пункте меню "статистика" в панеле пользователя на ммо топе)
* @type - int если равен 0, то Сортирует массив по ключам, сохраняя отношения между ключами и значениями от большего к меньшему. В случае с топом, сортирует голоса по дате от старых к новым
* возвращает массив со строками
**/
function get_content($content, $type=0)
{
$contentZ = file_get_contents($content);
$m = explode("\n", $contentZ);
if ($type == 0) krsort($m);
return array_diff($m, array(null));
}
/**
* возвращает массив с голосами формата
* [0] = voter ID [1] = date [2] = IP [3] = Nick(account) [4] = votes
* @ar - массив, возвращенный функцией get_content
* @t - int если, то преобразует дату в время (ф-я time())
**/
function getVoteArray($ar,$t=0)
{
$i=0;
foreach($ar as $id=>$value)
{
$asd=explode(" ",$value);
$r[$i][0]=$asd[0]; // voter ID
if ($t==0) $r[$i][1]=strtotime($asd[1]);
else $r[$i][1]=$asd[1]; // date
$r[$i][2]=$asd[2]; // IP
$r[$i][3]=$asd[3]; // Nick(Account)
$r[$i][4]=$asd[4]; // votes (1 - simple 2 - sms)
$i++;
}
return $r;
}
/**
* Функция принимает @address (string) адрес статистики ммо топа
* возврашает массив [n] = {[0]=voter ID [1]=date [2]=IP [3]=Nick(Account) [4] = votes}
**/
function ReadTop($address)
{
$array = MMOTop::get_content($address);
return MMOTop::getVoteArray($array);
}
function MWCreadTop ($adr, $topnum,)
{
}
/**
* Ищет в массиве @votequery сответсвие @value
* возвращает индекс первого найденного соотвествия
**/
function findmatch($value,$votequery)
{
foreach ($votequery as $id=>$oa)
{
if(trim($oa[0])==$value)return $id;
}
return -1;
}
}
в общем то пока подключив данный скрипт и набрав
$votear = MMOTop::ReadTop(<адрес стаститсики>);можно получить двумерный массив с проголосовавшими, причем по дефолту он будет по возрастанию даты
в методе MWCreadTop я подумываю реализовть уже исполнение непосредственно для моего движка
суббота, 7 июля 2012 г.
не о чем
Не понятно, почему нужно постоянное соперничество. Споры, соревнования... ох. Очень неприятный момент был сегодня. Написал мне друг, 1 из p4f, дал ссылку на помойку(в ранних постах, если кому интересно могут узнать, что за ресурс). В общем, нехотя открыл я форум, в принципе, уже точно зная к чему все сведется... Суть такова:
столкнулось 2 взгляда на решение 1 проблемы :
1. считает, что следует использовать шифрование встроенное (клиент <->сервер), с использованием Xor, ибо нет смысла изобретать и навешивать что-то когда есть готовый механизм.
2. считает, что использование xor весьма легко можно сломать, и предлагает использовать навесное, но более серьезное и затратное шифрование. Оно более надежно, а главное, универсально для любых версий и для использования в других проектах в целом.
На самом деле, у меня сразу возникла аналогия со спором: *nix vs win. Я попытался объяснить своему другу, что в этом споре нету выигрыша, что они придут к 1 и тому же, разными способами. Но его похоже зациклило на том, что произошел переход на личности, и со словами тебе не понять ушел в оффлайн.
Я не знаю, что его там так ослепило, то ли чувство обиды, то ли то, что он прав... Нет терпимости, нет скидок на недостатки оппонента. Возможно, просто повышенная нервозность.
Спор-то вышел не о чем, а кончился опять агрессией и обидами.
Конечно, то, что началось дальше в теме было еще неприятнее. Начался разбор полетов - влезли какие то совершенно непонятные личности со своими доводами по поводу всей системы, в которую в общем-то втачивается шифрование и с яростной критикой, совершенно беспочвенной, так как исходного кода никто не видел. Обвинения в использовании чужих сурсов, резкий троллинг по поводу методов защиты. Самое ведь забавное, что даже до вершины айсберга личность не дошла, ибо в принципе видела только то, что хотела видеть. Откуда столько агрессии у этой личности, я не знаю, да и не интересно. Неприятно стало потому, что человек не знает сколько трудов было положено на это все, сколько перекопано мануалов, мсднов, примеров, сколько потрачено сил на логику. И, буквально, в 1 мгновение кто-то устраивает толлинг. Всегда возникает 1 вопрос: а кто ты, чтобы критиковать или утверждать что-то если ты сам ничего подобного не можешь написать, зато посмотрев 1 день, сумев найти брешь или недоработку утверждать - говно.
Он пока не знает о 2.0 версии, которая на голову выше предыдущей... Опять будут искать и если найдут еще злее будет реакция? К чему это все? Не понятно.
Вообще, вся комьюнити сгнила. Всем нужна халява и получше, но никто не хочет и пальцем шевелить. Все больше понимаю, что пора отсюда сваливать и чем быстрее, тем лучше.
столкнулось 2 взгляда на решение 1 проблемы :
1. считает, что следует использовать шифрование встроенное (клиент <->сервер), с использованием Xor, ибо нет смысла изобретать и навешивать что-то когда есть готовый механизм.
2. считает, что использование xor весьма легко можно сломать, и предлагает использовать навесное, но более серьезное и затратное шифрование. Оно более надежно, а главное, универсально для любых версий и для использования в других проектах в целом.
На самом деле, у меня сразу возникла аналогия со спором: *nix vs win. Я попытался объяснить своему другу, что в этом споре нету выигрыша, что они придут к 1 и тому же, разными способами. Но его похоже зациклило на том, что произошел переход на личности, и со словами тебе не понять ушел в оффлайн.
Я не знаю, что его там так ослепило, то ли чувство обиды, то ли то, что он прав... Нет терпимости, нет скидок на недостатки оппонента. Возможно, просто повышенная нервозность.
Спор-то вышел не о чем, а кончился опять агрессией и обидами.
Конечно, то, что началось дальше в теме было еще неприятнее. Начался разбор полетов - влезли какие то совершенно непонятные личности со своими доводами по поводу всей системы, в которую в общем-то втачивается шифрование и с яростной критикой, совершенно беспочвенной, так как исходного кода никто не видел. Обвинения в использовании чужих сурсов, резкий троллинг по поводу методов защиты. Самое ведь забавное, что даже до вершины айсберга личность не дошла, ибо в принципе видела только то, что хотела видеть. Откуда столько агрессии у этой личности, я не знаю, да и не интересно. Неприятно стало потому, что человек не знает сколько трудов было положено на это все, сколько перекопано мануалов, мсднов, примеров, сколько потрачено сил на логику. И, буквально, в 1 мгновение кто-то устраивает толлинг. Всегда возникает 1 вопрос: а кто ты, чтобы критиковать или утверждать что-то если ты сам ничего подобного не можешь написать, зато посмотрев 1 день, сумев найти брешь или недоработку утверждать - говно.
Он пока не знает о 2.0 версии, которая на голову выше предыдущей... Опять будут искать и если найдут еще злее будет реакция? К чему это все? Не понятно.
Вообще, вся комьюнити сгнила. Всем нужна халява и получше, но никто не хочет и пальцем шевелить. Все больше понимаю, что пора отсюда сваливать и чем быстрее, тем лучше.
Подписаться на:
Сообщения (Atom)