Про взгляд

upload successful

На протяжении всей нашей жизни появляется множество красивых, милых, забавных историй и моментов.
К сожалению многие из них со временем превращаются в отдалённые, плоские воспоминания, но если сконцентрироватся на моменте можно многое вспомнить.

Когда я вспоминаю истории из своей жизни, многие из которых связаны с другими людьми, часто получается вспомнить их глаза. Взгляд — как отпечаток мира. Чем, если не взглядом можно передать эмоции, чувства, ощущения, отношение, место, время, молодость, мудрость, прошлое.

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

Дождь

upload successful

А серый город снова плачет. Слёзы летние, на бледно-голубом небе мнутся темные тучи, прохладный и свежий воздух.
А девушка с глазами пророка смотрит в окно. Что там? Свет? Надежда на лето?
Душа тянется к стакану чего-то особенно крепкого и терпкого, сигарета не уталяет желание курить — дым не тот.

Лёгкая сырость с надеждой на завтра.

Выучить распределения или посмотреть “Вспоминая моих печальных шлюх”?

DLE картинки популярных новостей, RSS фидов и Похожих новостей

Уже долгое время передо мной стояла задача максимизировать заинтересованность пользователя контентом.

upload successful

upload successful

ЧТО МЫ ИМЕЕМ?
— Полная новость, на этой-же странице RSS поток с одной из категорий, топ новостей и похожие новости.

ЛЮДЯМ ЛЕНЬ ЧИТАТЬ
— Мало кто будет бегать глазами по куче текста в поисках чего-то интересного.

ЗАДАЧА:
— Нужна картинка рядом с анонсом новости (ссылкой на неё), ведь так гораздо проще найти что-то интересное на сайте.
— Стандартные возможности последних версий DLE частично реализуют такой функционал, но есть одно НО:
движок отдаёт нам картинку такого-же размера, как и в новости. Возникает резонный вопрос: Нафига?
Минусы: разный размер катинок, огромное количество «пустого» трафика.
Плюсы: это работает из коробки.
— Что нужно реализовать: маленький вес «картинки», обезка нестандартных картинок, нужная длина и ширина привью.

РЕШЕНИЕ:
— при разработке модуля VAuth было решено огромное количество вопросов, в том числе и качественная обработка аватарок пользователей из разных социальных сетей. Частью этого кода я и воспользовался для решения этой задачи.

Актулально для свежих версий DLE

  1. Привью для “топа новостей”

1.1 Создаём папку в uploads -> toppics с правами 0777
1.2 Открываем /engine/modules/topnews.php
1.3 Ищем

1
if ( count($images) ) {

1.4 Удяляем всё это условие

1.5 Пишем новое вместо старого:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
if ( count($images) ) {
$i=0;
foreach($images as &$url) {
$i++;
$img_hash = md5($url);
$hash_name = $img_hash . '_topnews_.' .$info['extension'];
$pos = strpos($url, 'http');
if ( !file_exists(ROOT_DIR . '/uploads/toppics/' . $hash_name) ) {
$avatar_size = 160;
$image_name = $hash_name;
$fullpath = ROOT_DIR . '/uploads/toppics/'.$image_name;
@unlink($fullpath);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$rawdata = curl_exec($ch);
curl_close($ch);
$im = imagecreatefromstring($rawdata);
$height = imagesy($im); // Высота
$width = imagesx($im); // Ширина
$width2 = $width;
$x = 0;
$y = 0;
if ($height > $width) {
$ratio2 = $height/$width;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$y = $shift;
$height = $width;
}
if ($width>$height) {
$ratio2 = $width/$height;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$x = $shift;
$width = $height;
}
$im2 = imagecreatetruecolor($avatar_size,$avatar_size);
imagecopyresized($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
imagecopyresampled($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
// delete the original image to save resources
imagedestroy($im);
imagejpeg($im2, $fullpath);
@chmod( $fullpath, 0666 );
// remember to free resources
imagedestroy($im2);
}
$url = '/uploads/toppics/'. $hash_name;
$tpl->copy_template = str_replace( '{image-'.$i.'}', $url, $tpl->copy_template );
$tpl->copy_template = str_replace( '[image-'.$i.']', "", $tpl->copy_template );
$tpl->copy_template = str_replace( '[/image-'.$i.']', "", $tpl->copy_template );
}
}

1.6 Сохраняемся и готово! Вставляем в шаблон топа новостей код {image-1} (1 - значит 1 картинка из новости) и радуемся жизни!) $avatar_size - отвечает за ширину и длину картинки (по умолчанию 160x160px) можно поменять на свой вкус)

В следующих обновлениях этого поста я расскажу как реализовать такую-же штуку в RSS фидах и “похожих новостях” как на jeeraf.ru

  1. Привью для “похожих” новостей

2.1 Создаём папку uploads/relatednews/ с правами 0777
2.2 Открываем /engine/modules/show.full.php
2.3 Ищем:

1
if (stripos ( $tpl2->copy_template, "{image-" ) !== false) {

2.4 Заменяем всё это условие на:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
if (stripos ( $tpl2->copy_template, "{image-" ) !== false) {
$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $related['short_story'], $media);
$data=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]);
foreach($data as $url) {
$info = pathinfo($url);
if (isset($info['extension'])) {
$info['extension'] = strtolower($info['extension']);
if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url);
}
}
if ( count($images) ) {
$i=0;
foreach($images as $url) {
$i++;
$img_hash = md5($url);
$hash_name = $img_hash . '_same_.' .$info['extension'];
$file_string = ROOT_DIR . '/uploads/relatednews/' . $hash_name;
if ( !file_exists($file_string) ) {
$avatar_size = 100;
$image_name = $hash_name;
@unlink($file_string);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$rawdata = curl_exec($ch);
curl_close($ch);
$im = imagecreatefromstring($rawdata);
$height = imagesy($im); // Высота
$width = imagesx($im); // Ширина
$width2 = $width;
$x = 0;
$y = 0;
if ($height > $width) {
$ratio2 = $height/$width;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$y = $shift;
$height = $width;
}
if ($width>$height) {
$ratio2 = $width/$height;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$x = $shift;
$width = $height;
}
$im2 = imagecreatetruecolor($avatar_size,$avatar_size);
imagecopyresized($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
imagecopyresampled($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
// delete the original image to save resources
imagedestroy($im);
imagejpeg($im2, $fullpath);
@chmod( $fullpath, 0666 );
// remember to free resources
imagedestroy($im2);
}
$url = '/uploads/relatednews/'. $hash_name;
$tpl2->copy_template = str_replace( '{image-'.$i.'}', $url, $tpl2->copy_template );
$tpl2->copy_template = str_replace( '[image-'.$i.']', "", $tpl2->copy_template );
$tpl2->copy_template = str_replace( '[/image-'.$i.']', "", $tpl2->copy_template );
}
}
$tpl2->copy_template = preg_replace( "#\[image-(.+?)\](.+?)\[/image-(.+?)\]#is", "", $tpl2->copy_template );
$tpl2->copy_template = preg_replace( "#\\{image-(.+?)\\}#i", "{THEME}/dleimages/no_image.jpg", $tpl2->copy_template );
}

2.5 Сохраняемся и готово! Вставляем в шаблон топа новостей код {image-1} (1 - значит 1 картинка из новости) и радуемся жизни!) $avatar_size - отвечает за ширину и длину картинки (по умолчанию 100px) можно поменять на свой вкус)

  1. Привью для отображаемых RSS лент (информеров):

3.1 Создаём папку /uploads/informer с правами 0777
3.2 Открываем /engine/modules/rssinform.php
3.3 Ищем:

1
foreach ( $xml->content as $content ) {

3.4 Ниже вставляем: ($avatar_size - отвечает за размер аватарки)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $content['description'], $media);
$data=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]);
foreach($data as $url) {
$info = pathinfo($url);
if (isset($info['extension'])) {
$info['extension'] = strtolower($info['extension']);
if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url);
}
}
if ( count($images) ) {
$i=0;
foreach($images as $url) {
$i++;
$img_hash = md5($url);
$hash_name = $img_hash . '_informer_.' .$info['extension'];
if ( !file_exists(ROOT_DIR . '/uploads/informer/' . $hash_name) ) {
$avatar_size = 160;
$image_name = $hash_name;
$fullpath = ROOT_DIR . '/uploads/informer/'.$image_name;
@unlink($fullpath);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$rawdata = curl_exec($ch);
curl_close($ch);
$im = imagecreatefromstring($rawdata);
$height = imagesy($im); // Высота
$width = imagesx($im); // Ширина
$width2 = $width;
$x = 0;
$y = 0;
if ($height > $width) {
$ratio2 = $height/$width;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$y = $shift;
$height = $width;
}
if ($width>$height) {
$ratio2 = $width/$height;
$shift = $width2*$ratio2;
$shift = $shift-$width2;
$shift = round($shift/2);
$x = $shift;
$width = $height;
}
$im2 = imagecreatetruecolor($avatar_size,$avatar_size);
imagecopyresized($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
imagecopyresampled($im2,$im,0,0,$x,$y,$avatar_size,$avatar_size,$width,$height);
// delete the original image to save resources
imagedestroy($im);
imagejpeg($im2, $fullpath);
@chmod( $fullpath, 0666 );
// remember to free resources
imagedestroy($im2);
}
$url = '/uploads/informer/'. $hash_name;
$tpl->set( '{image}', $url );
}
} else $tpl->set( '{image}', "{THEME}/dleimages/no_image.jpg" );

3.5 Ищем:

1
$xml->content[$i]['description'] = strip_tags( $xml->content[$i]['description'], "<br>" );

3.6 Заменяем на:

1
$xml->content[$i]['description'] = strip_tags( $xml->content[$i]['description'], "<br><img>" );

3.5 Тег для вывод ссылки на картинку в шаблоне: {image}

3.6 Готово!

Batman Life

upload successful

Кто, если не Бэтмен?) Хороший человек начинается с мелких добрых дел)

Вкус месяца: “Биф а-ля Рус с беконом”, очень сытный и вкусный бургер

31 Мая, 5 зачётов/день

upload successful

Картинка дня — «Рыжеволосая девушка»

Я не знаю как это можно назвать: «попутный ветер», «улица зелёных светофоров», «удача».
Но за сегодня мне удалось получить 5 зачётов у 5 разных преподавателей.

Сегодня утром переживаний и мандража небыло — проснулся в 7 утра, на 45 минут засел «Вконтакте». Потом душ. Сделал пару титульников к лабораторным работам, скинул всё, что нужно распечатать на внешний жёсткий диск (предварительно сделав копии всех .docx’ ов в .PDF), выпил кофе, продублировал папку с работами на жд компьютера. В универ к 11.40. Осталось полтора часа — засел писать парсер альбомов из вконтакте, время пролетело незаметно, а в кодинге добился определённых успехов.

Приехал в университет, прошёлся по нужным аудиториям:

— Экология к 13.30

— ТОЭ лабы к 14.30

— Физкультура к 15.00

— ТОЭ практика к 11.40 ((

— Метрология как получится

Снял денег в банкомате, так как печать одного листочка в нашем университете стоит 5 рублей, а их не мало.
Заметил одну интересную вещь: когда торопишься, люди, кладущие деньги на счёт телефона через банкомат несколько раз подрят довольно сильно раздражают)

Пошёл печатать документы — 15 минут очереди, 77 листов, 12 скрепок, 3 папки типа «Уголок»

Первый предмет — ТОЭ практика: время 13.00 — пришёл, показал задачи, сел решать контрольную, половину решил, преподаватель сказал принести её на экзамен и поставил «Зачёт».

Второй предмет — Экология: пришли на пару, отогнал назойливого бестактного студента от преподавательницы, прошёл 20 минут, показал свой курсавик, получил заветный «Зачёт» и 3)

Третий предмет — ТОЭ практика: у одногруппника нашлась ещё одна нужная лабораторная работа, побежал сканировать, центр «печати и сканирования» оказался закрыт на перерыв, пришлось улыбаться через стеклянную дверь) открыли) Снова в аудитории — рисуем схему пребора, подходим к преподавателю, показываем отчёты, протоколы, «Зачёт».

Четвёртый предмет — Физическое воспитание (Воллейбол): Небольшая очередь, подарок университету мячик «MIKASA MVA200», фирменный насос, «Зачёт».

Пятый предмет — Метрология: преподаватель в «1 Меде», 10 минут ходьбы, 30 минут ожидания, 6 лабораторных работ, «Зачёт».

Получилось так, что мы успевали подходить в нужные места в нужные отрезки времени.

Случайности не случайны.