четверг, 26 ноября 2009 г.

Календарь выходных дней в украине (ical)

Сделал календарь всех государственных праздников Украины которые обьявляются выходными. Почему то готового не нашел - в списке предустановленых календарей в Google Calendar Украины вобще нету, а на тех сайтах которые где есть подобные календари, в них собраны все украинские и церковные праздники включая день врача итп. Всего 150 штук. Попробывал добавить - и так достаточно плотно забитый календарь стал еще менее читаемым.

Вобщем если кому пригодится - делюсь - календарь с десятью украинскими праздниками-выходными (в формате ical)

http://www.google.com/calendar/ical/di.mon.net.ua_fmu2s45fdua3123662ufd5p2gs@group.calendar.google.com/public/basic.ics

На всякий случай уточняю. В календаре забиты праздники, а не выходные, те если праздник попадает на выходной там так и написано. А выходные дальше переносятся:

Согласно ч. 3 ст. 67 КЗоТ Украины, если праздничный или нерабочий день совпадает с выходным, выходной день переносится на следующий после праздничного или нерабочего.

Таким образом, по графику пятидневной рабочей недели с выходными днями в субботу и воскресенье в 2010 г. намечены следующие переносы:

* 4 апреля (выходной день в воскресенье) переносится на 5 апреля (понедельник);
* 1, 2 мая (выходные дни в субботу, воскресенье) переносятся на 3, 4 мая (понедельник, вторник);
* 9 мая (выходной день в воскресенье) переносится на 10 мая (понедельник);
* 23 мая (выходной день в воскресенье) переносится на 24 мая (понедельник).

понедельник, 23 ноября 2009 г.

vim

Когда я начинал работу с Linux и выбирал редактор, я отказался от vim в пользу редактора nano из-за того что он мне показался более "Windows like" и из-за того что мне было лень разбиратся как работает vim. Но недавно мне пришлось работатать с удаленным сервером на коором был устанолен только vim. Поэтому волей-неволей пришлось разбиратся.

И в результате оказалось что vim далеко не столь непонятный и сложный как казалось вначале. Мало того, после того как я в нем разобрался, работать с vim стало удовольствием.

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

Если надо ввести текст просто нажимаем i и начинаем печатать. Допечатали - esc - и продолжаем редактирование.

Освоить основы можно с помощью специального обучающего файла который запускается командой vimtutor. Который представляет по сути собой текстовый файл открытый в vim в котором в несколько уроков можно потренироватся работать с редактором. Все очень наглядно и понятно.

Вот также несколько полезных ссылок для изучения и использования редактора:
Мини учебник на wikibooks
Список команд редактора

Ну и сразу несколько необходимых действий которые надо сделать что бы все функции редактора (например подсветка синтаксиса и онлайн помощь) были доступны.
1. Устанавливаем полную версию редактора (в ubuntu по умолчанию идет обрезанная)
sudo apt-get install vim
2. Делаем vim редактором по умолчанию
$ sudo update-alternatives –config editor

В появившемся меню выбираем usr/bin/vim.basic
3. Включаем подсветку синтаксиса:
sudo vim /etc/vim/vimrc
Расскометировать строки:
"syntax on

Для этого становимся курсором на знак кавычки в начале строки и нажимаем x(удалить символ под курсором) После этого сохраняемся и выходим:
:wq

вторник, 17 ноября 2009 г.

FTP сервер на базе PureFTPd и MySQL

PureFTP - отличный и легконастраиваемый фтп сервер. Сначала я установил его для работы без MySQL. Это оказалось очень не удобно, поэтому решил передеставить его таким образом что бы все логины пароли хранились в базе. Это дает отличную гибкость и удобство добавления/удаления пользователей, раздача доступов итп.

В инете масса информации как установить и настроить вышеупомянутый сервер. Вот подробный мануал по которому я ставил: http://forum.ubuntu.ru/index.php?topic=16733.0

Одно из немногих отличий в моем конфиге, это то что я не шифрую пароли:
MYSQLCrypt cleartext

так значительно удобнее управлять аккаунтами, но страдает безопасность.

mysql - GROUP_CONCAT

Есть таблица такого вида:
video_name    | genre

--------------+---------------

video1        | боевик

video2        | ужасы

video1        | мелодрамма

video1        | арт-хаус

video2        | триллер


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

SELECT video_name, GROUP_CONCAT(genre) as zhanr
FROM table
GROUP BY name

video_name    | zhanr

--------------+---------------

video1        | боевик, мелодрамма, арт-хаус

video2        | ужасы, триллер


Некоторые особенности. По умолчанию максимальная длина строки 1024. Если список жанров будет сильно длинным, то после 1024 знака строка обрежится. Для того что бы сделать длину строки больше, нужно один раз в начале сессии с mysql дать команду:

SET group_concat_max_len = 10000000;

среда, 11 ноября 2009 г.

Работаем с mysql

Подключение к базе:
mysql -h HOSTNAME -uUSERNAME -pPASSWD -DDATABASE ;
Просмотр доступных баз:
show databases;
Переключение на работу с нужной базой:
use DATABASE;
Просмотр таблиц:
show tables;
Просмотр структуры интересующей таблицы:
show columns from TABLENAME;
Выборка данных:
select КАКИЕ ПОЛЯ ПОКАЗАТЬ from ИМЯ_ТАБЛИЦЫ where УСЛОВИЯ;

Полезные штуки:
select count(*) ...
посчитает кол-во строк удовлетворяющих условиям

... group by КОЛОНКА
сгрупирует записи у которых если повторяющиеся значения в каком-то поле

... order by КОЛОНКА
отсортирует по полю

select date_format(time, '%Y-%m-%d')
форматирует поле с датой в нужном нам формате

limit 0, 30
ограничивает кол-во строк для вывода в формате: номер строки с которой начинать выборку, кол-во строк которые надо вывести

select sum(КОЛОНКА)
ссумирует значения в колонке

Примеры из жизни:

 select date_format(TIME, '%Y-%m-%d'), count(url) 
from ERRORS 
where code=504 or code=502 
group by to_days(TIME) 
order by TIME;
+-------------------------------+------------+
| date_format(TIME, '%Y-%m-%d') | count(URL) |
+-------------------------------+------------+
| 2009-11-06                    |        814 | 
| 2009-11-07                    |       1591 | 
| 2009-11-08                    |        761 | 
| 2009-11-09                    |       1145 | 
| 2009-11-10                    |       1917 | 
| 2009-11-11                    |       1438 | 
+-------------------------------+------------+

mysql> select count(*) 
from errors 
where code=504 and time between '2009-11-09 00:00:27' and now();
+----------+
| count(*) |
+----------+
|     4467 | 
+----------+
1 row in set (0.02 sec)

mysql> select sum(BYTESCOUNT) 
from CONTENTTRAFFIC 
where DATE = date_format(NOW(), '%Y-%m-%d');


mysql> select * 
from SITECALLSTATDETAILED 
group by REQUESTURL 
order by CNT desc 
limit 10 ;

mysql> select sum(BYTESCOUNT)  
from CONTENTTRAFFIC 
where DATE between '2009-10-10 00:00:00' and '2009-10-10 23:59:59';

mysql> select ROUND(sum(BYTESCOUNT)/1024/1024/1024), DATE  
from CONTENTTRAFFIC 
group by DATE 
order by DATE;