Блог пользователя Nelex

test

Переполнение корневого раздела Debian/Ubuntu

В очередной раз столкнулся с тем что корневой раздел сильно засорился. Чем, было не понятно. Оказалось что при каждом apt-get update и aptitude update полученные списки файлов сохраняются в директории /var/lib/apt/lists/partial, это легко оказалось выяснить введя команду:
du -xh /var | sort -n |grep G
Из 61Гб под рутовый раздел, 31Гб занимали файлы в этой директории. Сразу оговорюсь, система стоит давненько, обновляю достаточно часто. Сижу на миксе из experimental/testing.

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

test

Хостинг который я рекомендую

Хостинг unihost.com

Нет времени распыляться на описание данного хостера, как делают многие блогеры, я лучше еще кусок какого-либо из своих проектов за это время напишу(На блог внимание не обращать, реально руки не доходят его переписать).
Скажу основное:
Повесил собственноручно около десятка сайтов на данный шаред хостинг за этот год. Из них несколько самописных на фреймворке Kohana 3, несколько на Drupal. 1000+ в день держит спокойно. Саппорт вменяем. Обращался раз 6 за год. Пару раз просто уточнить некоторые детали. Все вопросы очень быстро решаются через онлайн-чат с саппортом. ISPmanager, FTP доступ, PhpMyAdmin, прочее. Так что, со спокойной совестью рекомендую.

test

Профилирование запросов и статистика в СУБД MySQL/MariaDB

Что должен делать IT-шник постоянно? Правильно, это знает наверное каждый - учиться. И вот расширяя кругозор и углубляясь все больше и больше в использование Баз данных я сделал очередной виток в поиске полезной информации по инструментарию который использую.

test

Темы для Awesome WM

Простые темы

tree clean theme
Репозиторий тем для Aweome WM.
Качаем, скидываем в /home/username/.config/awesome/themes содержимое. Редактируем файл /home/username/.config/awesome/rc.lua
Заменяя в строке:
beautiful.init("/home/username/.config/awesome/themes/snow/theme.lua") на выбранную тему и делаем Ctrl+Mod4(у меня клавиша Windows)+r и смотрим. Сами скриншоты тем можно увидеть в папке 0-screenshots.

Темы поинтересней

Awesome темы покруче. Установка их несколько сложнее, но и вид у них гораздо интересней, достаточно глянуть пару скриншотов тем:
Тема Copland
Copland

Тема Powerarrow Darker
Powerarrow Darker

Установка внутри.

test

Прикольный и удобный FileManager/ImageManager для TinyMCE 4 или другого Wisywig

Responsivefilemanager

Действительно прикольный и удобный файлменеджер для загрузки файлов и картинок. Скачать можно на самом сайте плагина.

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

test

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

Валидация
Просто еще небольшая заметка на память, чтобы не копаться по всему интернету. HTML5+CSS3 сейчас сильно упрощает жизнь. Раньше столько сложностей было в том чтобы сделать резиновые формы, а сейчас достаточно использовать условные единицы измеряемые в %% от ширины(vw) или высоты(vh) viewport-а. Как многие знают, размер шрифта используемый единицы em, %% или другие, казалось бы динамические единицы измерения на самом деле берут всего-лишь значение базового шрифта, но сейчас можно использовать все те же vw и vh для задания пропорционального всем другим элементам размера шрифта. Замечу что в хроме и хромиуме, как возможно и во всем остальном на основе webkit, есть баг, при изменении размера окна, размер шрифтов автоматически не пересчитывается. Но этот баг вроде должны поправить к новым версиям.

Ну а сейчас тема немного о другом, раньше для проверки валидации формы на заполнение важных полей, нужно было использовать JS код, сейчас же это заменяется всего одним словом required внутри инпута. Конечно это не отменяет важности проверки на стороне сервера, но на стороне фронта все же проще.

Сама форма, к примеру

test

Linux: получаем хеш md5 строки в консоли

Очень маленькая заметка, но иногда нужно. =)

printf "string" | md5sum

Еще вариант

echo -n "string"|md5sum

А вот если без ключа -n, то получим уже совсем другой хеш.

Почему md5 отличается в bash и php?

Если передать в md5sum через echo без ключа -n, то в строку добавляется символ переноса строки. Соответственно и результат уже другой.

test

Скрипт удаления сессий PHP от хостера

Стала задачка выяснить почему сессии хранятся на сервере не более чем пол часа. После этого естественно происходит сброс сессий и пользователь оказывается разлогиненым. Полез в куки посмотреть, там время жизни куки составляло более года. Файл php.ini тоже выглядел вполне нормально, время жизни тоже около года. Немного поискав в кроне обнаружил такой вот скрипт от хостера. Позабавило. Видать для того чтобы не накапливалось большое количество файлов сессий. Вот только зачем удалять так часто?
Сам файл находился по пути /etc/cron.hourly/fornexrmphpsess
С таким вот интересным содержимым.

#!/bin/bash

#внимание!! скрипт рассчитан на выполнение оболочкой BASH!!!!

#засыпаем на случайное время - от 0 до 20 минут
T=$(($RANDOM/27))
sleep $T

#и удаляем все старые сессии PHP
find /tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/www/*/data/*tmp/ -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/lib/php*/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

test

CKEditor 4.3 и загрузка картинок в Kohana 3 Framework

Кратко и по сути о том как включить загрузку картинок для CKEditor и прикрутить все это к контроллеру Kohana 3. Ничего сложного, руководствовался статьей

В ckeditor/config.js добавляем строчку:

CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here. For example:
// config.language = 'fr';
// config.uiColor = '#AADC6E';
    config.filebrowserUploadUrl = '/upload/image';
};

Добавляем контроллер вида:

class Controller_Images extends Controller_Template
{

    public function action_upload(){
        $callback = $_GET['CKEditorFuncNum'];
        $error = '';
        if (!empty($_FILES['upload']['tmp_name'])) {
            $fileload = $_FILES['upload'];
//папку для картинок создаем заранее и даем права на запись
            $directory = $_SERVER["DOCUMENT_ROOT"]."/public/images/upload/";
            if ($file = Upload::save($fileload, NULL, $directory)) {
                $filename = md5(date("YmdHis").rand(5,50));
                $img = Image::factory($file);
                $img->render("jpg"); //фотки ведь желательно сохранять именно в jpg

                $img->save($directory . $filename . '.jpg');
                unlink($file);
                $http_path = '/public/images/upload/'.$filename.".jpg";
            }else {
                $error = 'Some error occured please try again later';
                $http_path = '';
            }
            echo "<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(".$callback.",  "".$http_path."", "".$error."" );</script>";
        }
    }
}

Не забываем дать доступ к роуту в bootstrap.php

Route::set('images', 'upload/image')
    ->defaults(array(
        'controller' => 'images',
        'action'     => 'upload',
    ));

Все. В "Вставить картинку" в CKEditor-е появиться вкладка Загрузить.

test

CSS: Масштабируем страницы в зависимости от разрешения экрана

CSS scale
Нужно было сохранять внешний вид страницы на разных разрешениях экрана, то есть на разных устройствах. Если для блоков можно выставить позиционирование относительно родительского блока, то с размерами шрифта все хуже, они средствами css не масштабируютья. Можно как вариант использовать JS для этих целей, но можно и css обойтись. Нынче это не так уж сложно, достаточно использовать медиа-потоки и приближение. Например:

@media screen and (min-width: 400px) and (max-width: 600px) {
  body {
    zoom: .35 !important; /* Old IE only */
    -moz-transform: scale(0.35);
    -webkit-transform: scale(0.35);
    transform: scale(0.35);
  }

}
@media screen and (min-width: 600px) and (max-width: 800px) {
  body {
    zoom: 0.45 !important; /* Old IE only */
    -moz-transform: scale(0.45);
    -webkit-transform: scale(0.45);
    transform: scale(0.45);
  }
}

И так далее. Возможно есть варианты получше, но этот работает.

test

Небольшой сниплет таймера обратного отсчета в секундах на JavaScript

Таймер обратного отсчета
Утянул со stackoverflow

var count=30;
var counter=setInterval(timer, 1000); //1000 равно 1 секунде

function timer()
{
  count=count-1;
  if (count <= 0)
  {
     clearInterval(counter);
     //Здесь делаем что-то после того как таймер достиг нуля
     return;
  }

  //здесь добавляем код, к примеру меняющий количество секунд в диве
//document.getElementById("timer").innerHTML=count + " секунд";
}

Все просто и красиво

test

Broadcom драйвер для Linux 3.12

Вот добрался до новой версии ядра, 3.12. Долгое время просто руки не доходили. Я уже несколько раз ранее собирал эти драйвера, но на более старые версии, к пример 3.10

Так вот собираем почти так же как и обычно. Качаем драйвера под свою архитектуру с сайта:

test

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы. Интересно.

Для тех кто еще не видел, стоит посмотреть запись выступления Олега Бунина с конференции 2013 года. iForum.

test

Олег Бунин, Построение высоко-нагруженных систем(запись с конференции IForum 2013)

Реально Бунина приятно слушать, много очень полезного, вынесенного из его опыта, в построении высоко-нагруженных системах. В докладе он рассматривает архитектуру под высокие нагрузки, кратко рассказывает о постановке задачи на разработку такой системы и рассматривает несколько примеров, в том числе построение сайта знакомств подобного Badoo и нагруженного новостного сайта.

test

MongoDB вместо MySQL/MariaDB как основная СуБД. Небольшие впечатления.

MongoDB
Если вы используете для своего проекта VPS/VDS сервер, вы вполне можете заменить реляционную базу данных на MongoDB. Познакомившись поближе вы увидите все те же знакомые понятия что и в реляционных базах, такие как: база данных, коллекция(собственно набор документов, а-ля таблица без жесткой структуры по полям), документы(те же кортежи из реляционных баз). Инструменты бекапа/восстановления присутствуют. Выборка данных тоже. Врапперы к PHP и другим языкам тоже.

Хороший мануал
Официальная дока по врапперу к PHP

Прикрутить MongoDB к проекту вместо MySQL\MariaDB не составит практически никаких усилий, а при грамотном подходе даст не мало преимуществ. Ставиться все очень просто из дистрибутива. Впечатления от монго хорошие. Может немного позже напишу более подробно о нем.

Еще немного ссылок внутри материала.

Страницы

Subscribe to RSS - Блог пользователя Nelex