Pull to refresh
25
0
Дмитрий Корольков @funnybanana

Программист.

Send message
и такая байда со всей анимацией… предлагаю вам смотреть в сторону css свойства animation, transition и т.д
Сходил на страницу Preview, у вас там при наведении на строку поиска меняется цвет фона… при этом нет остановки анимации $(element).stop().animate({...}); из-за чего анимация зацикливается (если несколько раз водить по элементу) и продолжает воспроизводиться тогда когда это уже не требуется.

P.S тоже недавно скилл повышал по css3:

и даже почти кроссбраузерно…
Кликнул на колокольчик, ничего не произошло…
кликнул ещё раз… ещё, ещё, ещё, ещё, ещё, ещё, ещё, ещё, ещё, ещё…
потом отвёл мышь от колокольчика и…
анимация пошла но с жуткими лагами, FPS 5-10… видимо засчитались все ~20 кликов…
(последний хром, linux (KDE))

Потом один раз нажал и сразу отвёл мышь от колокольчика — анимация пошла плавно, очень красиво…
Захотелось сделать что-то похожее…
что бы писать команду в любом месте строки можно и strpos или substr_count использовать. И опять же команды все удобно держать в одном месте, отделив его от кода. Поэтому и такое странное решение с ключами массива…
прошу простить, я с утра не совсем уловил суть вашего вопроса…
что же, действительно тут вы правы:

for ($i=1; $i < strlen($text_lower); $i++) { 
  $text_lower_new = substr($text_lower, 0, $i);
  if (isset($commands[$text_lower_new])) {
      $text_lower = $text_lower_new;
      break;
  }
}


— так мы из "/save очень длинный текст" будем двигаться от 1го символа до последнего (предварительно ограничив длину до 200 символов)

/
/s
/sa
/sav
/save — бинго, ключ найден. И вместо того что бы проверять ключ 21 раз, мы проверили его 5 раз… Что в 4 раза быстрее на данном примере.

Но если целиться на расширение команд на будущее то может произойти так что команда будет содержать в себе первым словом другую команду, на примере:
статистика — покажет общую статистику
статистика вчера — показывает статистику за вчерашний день

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

P.S
if (strpos($text_lower, "/save") == 0) {
// действие
}


всё же условие, занимает значительно больше места нежели ключ в массиве… А вот то что я вместо strpos использую substr этому нет объяснения, видимо сонный был и затупил…

P.P.S вот за что люблю хабр, что тут люди всегда посоветуют то что лучше, сейчас заменю substr на strpos и временно переключу перебор строки с первого символа, а когда появятся противоречия в командах, верну обратно перебор с конца. Grogina, вам спасибо.
ну тут просто не очевидно на примере для чего это…
ну вот в @jReminderBot я пишу "/save очень длинный текст" и вместо того что бы поставить условие:

if (strlen($message['text']) >= 5 && substr($message['text'], 0, 5) == '/save') {
// выполняем запись текста после "/save" в бд
}

— я ищу этот ключ в массиве перебирая строку с конца до начала:
/save очень длинный текст
/save очень длинный текс
/save очень длинный тек
/save очень длинный те

/save оч
/save о
/save
/save — бинго! этот ключ есть и дальше идёт перебрасывание на функцию.

Таким способом после самой команды может быть любой длинны текст… Тот же FatherBot в телеграмм запрашивает параметр для команды отдельно — пишешь /setname, после он просит придумать новое имя и отправить следующим сообщением, в моём примере это бы выглядело следующим образом: "/setname Новое имя"

При этом имя функции я так же вписываю в сам массив, примерно так это выглядит:

$cmd = new Commands($message); // тут все функции

$commands = array(
  "всем привет" => "Дратути",
  "/save" => "fun_saveText"
);

// проверки тут разные, в цикле перебор строки и т.д всё копипастить не буду.. в предыдущем комментарии это есть.

if (strlen($commands[$text_lower]) > 3 && substr($commands[$text_lower], 0, 4) == 'fun_') {
  $fun_name = substr($commands[$text_lower], 4);
  if (method_exists($cmd, $fun_name)) {
    $answer = call_user_func(array($cmd, $fun_name));
  }else{
    $answer = "Функция {$fun_name} не найдена =(";
  }
}else{
  $answer = $commands[$text_lower];
}


ну и согласитесь писать ключи в массиве гораздо удобнее и компактнее нежели всегда писать условие под каждую команду… Видимо нужно было сразу написать что не ставил цели писать обычный ехо-бот… Ну а сам массив у меня уже перекочевал в json формат, вынесенный отдельно в файл и там уже более 40 функций по мониторингу основного сайта и ещё пару шуточных функций и ответов…

Я даже думал на хабре пост написать как на php этот бот пишется закрытыми глазами, но такие статьи уже не встречают восторгом тут…
Мой пример на php (чтобы разобраться в апи телеграмм потратил 5 минут):
$api = "https://api.telegram.org/bot111111111:AAHKeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
// получаем данные
$update = json_decode(file_get_contents("php://input"), TRUE);
$message = $update["message"];
// все команды
$commands = array(
  "всем привет"    => "Дратути",
  "кто самый"    => "Без сомнения {$message['from']['first_name']} {$message['from']['last_name']}",
);
// не учитываем регистр
$text_lower = mb_convert_case($message["text"], MB_CASE_LOWER);
// искать команду будем по первым 200 символам.
if (strlen($text_lower) > 200) $text_lower = substr($text_lower, 0, 200);
// крутим текст сообщения от конца до 1го символа в поисках существующего ключа в $commands
for ($i=0; $i < strlen($text_lower); $i++) { 
  $text_lower_new = substr($text_lower, 0, strlen($text_lower)-$i);
  if (isset($commands[$text_lower_new])) {
      $text_lower = $text_lower_new;
      break;
  }
}
// сам ответ
if (isset($commands[$text_lower])) $answer = $commands[$text_lower];
// отправляем ответ в чат
if (!empty($answer)) file_get_contents("{$api}/sendmessage?chat_id={$message["chat"]["id"]}&text={$answer}");


— при желании этот код можно сократить до 5 строк, но тогда его будет совсем сложно читать, поэтому не пойму тех кто хвастается кол-вом строк в коде.

image

На основе этого кода собрал бота который сидит у меня в рабочем чате и делает заметки, посмотреть на его работу можно добавив его: @jReminderBot
Я пользуюсь халявой от гугла:
image

Тоже делал подобный QueryBuilder у меня это выглядит так:

echo $sql->insert("table", array("id"=> "1", "name"=>"habr"))->send();
// получаем mysqli_insert_id


вместо array можно скормить и json
Но я вот не стал свой велосипед на хабр тащить…
На Linux Skype и вовсе последнюю неделю черти что вытворяет… Где же это ныне популярное Microsoft ♡ Linux????

Сопли
Официальное приложение с начала этого года перестало показывать некоторые групповые чаты, перешел на web-версию скайпа (даже скачал SkypeForLinux Alpha которая по сути тот же браузер только с иконкой в трее.) То что там нет демонстрации экрана и не работают видеозвонки — это тоже всё очень печально, а 2 дня назад и вовсе веб версия перестала работать и не работала целые сутки, я конечно сразу написал в тех. поддержку на что мне ответили: «ничего не ответили»
Через день скайп снова заработал, только теперь спустя некоторое время он перестаёт принимать и отправлять сообщения, при этом вы и не знаете что скайп выключился, пишете сообщения как обычно, только вам ничего не отвечают. И только после перезапуска — вас ругают что в середине рабочего дня куда-то пропал…

При этом версия для Linux на сайте в разделе «скачать» значится как «уже скоро», скачать то я конечно скачал, но выходит что это бета версия…

Вот решил со скайпом сравнить (скайп бета, и дискорд бета — всё честно):

image

AMD Athlon II x2 (+ 8 гигов оперативки)
Пожалуй добавлю ссылку на скачивание (скорее всего она будет активна в течении пару месяцев), потом можно будет найти актуальную ссылку тут: https://forum.unity3d.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
Мне было бы стыдно такое писать на хабр…

A теперь сюрприз для php-программистов


Очень надеюсь что это был сарказм…
7 лет эволюции:

image

P.S да, я не любитель виджетов image
Хорошо, буду ждать.
Честное слово, несколько раз пытался перейти на Vivaldi. но каждый раз не задерживаюсь на ней более суток… то пароли из хрома нельзя все вытянуть, то вместо настроек у меня черный экран, то внезапно пропадающие шрифты… но это ладно, на этот раз просидел на вашем замечательном браузере 2 часа, верстал спокойно страничку, жму F12 и в DevTools не нахожу привычной кнопочки переключения Toggle Device Toolbar (хотя она есть в хроме)
image
на крайний случай панель DevTools в хроме можно закрепить справа и таким образом масштабировать ширину окна примеряя верстку под разные экраны (у вас же окно DevTools вынесено отдельным окном)…

Все замечания отправлял куда нужно. Ещё в начале этого года, но ничего не меняется, подожду ещё год, может дойдут руки до этих незначительных правок…

P.S на этот раз меня ещё заманила иконка почты на скриншотах вашего браузера:
image

думал что будет как в старенькой imageпере — встроенный почтовик, ан-нет обознался. ну или сходу не разобрался как установить сие в браузер…

P.P.S хром зараза с каждым днём всё прожорливее и прожорливее… подсасывает порой 700 МБ оперативной памяти для одной вкладки…
Пока тут все видят уязвимость, я уже придумываю как я сортирую кнопочки авторизации у себя на сайте через социалки — используя сервисы где пользователь уже авторизован…

Т.е заходит пользователь на мой сайт, я ему предлагаю авторизоваться на сайте через VK|facebook|google+ и т.д — при этом на верх списка высовываю те кнопочки в которых пользователь уже авторизован… удобно же =)

Но… пока у меня дойдут до этого руки — возможно эту фишку уже пофиксят…
wow эффекта не вышло, на их примере верхняя строка входное изображение, вторая строка результат, а третья — оригинал:

image

Но достаточно просто прищурить глаза глядя на верхнюю строку и получаем тот же результат…

Для движущихся же объектов задача вполне имеет решение — многокадровое суперразрешение.

Достаточно быстро моргать глядя на видео, тогда лицо человека скрытого с помощью пикселизации — будет видно более разборчиво.
А я только в этом году начал использовать SVG и работаю с jQuery…
Я видимо уже совсем безнадёжен =( Не успеваю следить за всем… Даже html5 боюсь в проектах использовать…

Information

Rating
Does not participate
Location
Волгодонск, Ростовская обл., Россия
Date of birth
Registered
Activity