Мои заметки, мысли...
пятница, 16 ноября 2012 г.
среда, 9 марта 2011 г.
Арифметические операции с переменными в bash
Для выполнения сложения, вычитание, умножения, деление, получение остатка от деления в bash можно использовать выражения следующего вида:
$[$OPER1 + $OPER2]
где
OPER1 - имя первого операнда выражения.
OPER2 - имя второго операнда выражения.
+ - арифметическая операция.
Пример:
bash-3.00$ OPER1=100
bash-3.00$ OPER2=20
bash-3.00$ echo $[$OPER1+$OPER2]
120
bash-3.00$ echo $[$OPER1-$OPER2]
80
bash-3.00$ echo $[$OPER1/$OPER2]
5
bash-3.00$ echo $[$OPER1*$OPER2]
2000
bash-3.00$ echo $[$OPER1%$OPER2]
0
$[$OPER1 + $OPER2]
где
OPER1 - имя первого операнда выражения.
OPER2 - имя второго операнда выражения.
+ - арифметическая операция.
Пример:
bash-3.00$ OPER1=100
bash-3.00$ OPER2=20
bash-3.00$ echo $[$OPER1+$OPER2]
120
bash-3.00$ echo $[$OPER1-$OPER2]
80
bash-3.00$ echo $[$OPER1/$OPER2]
5
bash-3.00$ echo $[$OPER1*$OPER2]
2000
bash-3.00$ echo $[$OPER1%$OPER2]
0
вторник, 22 февраля 2011 г.
Проблема с запуском apache2 на solaris 10
После установки apache2 на solaris 10, если использовать стандартную конфигурацию появляется критическая ошибка:
[Tue Feb 22 10:41:56 2011] [alert] (22)Invalid argument: setgid: unable to set group i
d to Group 4294967295
Если внимательно почитать комментарии в конфигурационном файле можно найти и причину этого
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!
Что в буквальном переводе означает
Некоторые типы ядер операционных систем не поддерживают системные вызовы setgid(Group) или semctl(IPC_SET) в случае, если значение параметра Group более 60000. Не используйте директиву Group #-1 на этих ОС
Таким образом причина ошибки связана с несовместимостью системного вызова на solaris.
Для исправление этой ошибки необходимо вручную создать группу/пользователя под которым будет выполняться apache2.
Например так:
useradd -s /bin/true apache2user
groupadd apache2group
usermod -g apache2group apache2user
Теперь соответственно изменяем директивы в httpd.conf на
User apache2user
Group apache2group
Одно замечание - необходимо поменять хозяени папок apache2 на нашего пользователя apache2user:
chown -R $PATH_TO_APACHE apache2user
chgrp -R $PATH_TO_APACHE apache2group
[Tue Feb 22 10:41:56 2011] [alert] (22)Invalid argument: setgid: unable to set group i
d to Group 4294967295
Если внимательно почитать комментарии в конфигурационном файле можно найти и причину этого
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!
Что в буквальном переводе означает
Некоторые типы ядер операционных систем не поддерживают системные вызовы setgid(Group) или semctl(IPC_SET) в случае, если значение параметра Group более 60000. Не используйте директиву Group #-1 на этих ОС
Таким образом причина ошибки связана с несовместимостью системного вызова на solaris.
Для исправление этой ошибки необходимо вручную создать группу/пользователя под которым будет выполняться apache2.
Например так:
useradd -s /bin/true apache2user
groupadd apache2group
usermod -g apache2group apache2user
Теперь соответственно изменяем директивы в httpd.conf на
User apache2user
Group apache2group
Одно замечание - необходимо поменять хозяени папок apache2 на нашего пользователя apache2user:
chown -R $PATH_TO_APACHE apache2user
chgrp -R $PATH_TO_APACHE apache2group
четверг, 9 декабря 2010 г.
SMPP - краткое описание на русском
Описание
SMPP протокол, который используется мобильными операторами для организации службы коротких сообщений (SMS).
Согласно своему имени протокол SMPP определяет клиента (ESME) и сервер (часто называемого SMSC).
Клиент инициализирует TCP соединение и выполняет команду bind для организации соединения со специфичными параметрами.
Схемы соединения клиента:
1. receiver — клиент может только получать сообщения от SMSC.
2. transmitter — клиент может только отправлять сообещения на SMSC
3. transceiver — клиент осуществляет двухстороннюю передачу сообщений.
Таким образом для организации двухстороней передачи сообщений можно либо установить соединение тип transceiver, либо устанавливать 2 соединения типов transmitter и receiver.
Для завершения SMPP сессии используется команда unbind.
После установки SMPP соединения происходит обмен сообщениями, называемыми PDU (protocol data unit). Общение между клиентом и сервером происходит по принципу запрос-ответ (request-response). Запросы содержат в себе определенное уникальное в данной сессии число, и в свою очередь ответные PDU, содержат в себе то же самое число — благодаря этому механизму возможна асинхронная передача сообщений.
Протоколом определены несколько команд для отправки разных типов сообщений, замены и отмены ранее отправленных сообщений и т. д. Наиболее часто используемой из них командой является submit_sm — отправка простого текстового сообщения. Ответом на эту команду является PDU submit_sm_resp. Отчет о доставке сообщения посылается в виде PDU deliver_sm.
Также стоит сказать про ограничение длины SMPP сообщений. В протоколе SMPP, длина поля short_message ограничена 254 байтами, однако нижележащие протоколы накладывают другие требования. Например GSM ограничивает длину коротких сообщений в 140 байт.
Пример организации соединения и отправки текстового сообщения на языке Perl с использованием модуля Net::SMPP
#!/usr/bin/perl -w
use strict;
use Net::SMPP;
#Номер от которого отправляется СМС
my $SMPP_SOURCE_ADDR='FROM';
#Номер кому отправляется СМС
my $SMPP_DEST_ADDR='79000000000';
#Инициируем соединение типа transceiver
#В параметрах указываем system_id и password - аналог имени пользователя и пароля для аутентификации на SMSC
#адрес и порт, с которым соединяемся и версию протокола SMPP
my $smpp = Net::SMPP->new_transceiver('192.168.1.1',
system_id => 'username',
password => 'password',
port => '2775',
smpp_version=> 0x34
)
or die "Can't connect to SMSC: $!";
&send_message($SMPP_SOURCE_ADDR, $SMPP_DEST_ADDR, 'Hello SMS!!!');
#Процедура отправки сообщения submit_sm
#В параметрах send_message передаем адрес отправителя, адрес получателя, то есть его номер телефона и текст
#сообщения
#Параметры source_addr_ton, source_addr_npi, dest_addr_ton, dest_addr_npi определяют дополнительные параметры
#адресов отправителя и получателя. Подробнее о них в спецификации протокола SMPP.
sub send_message {
my ($sm_source_addr, $sm_dest_addr, $sm_message) = @_;
my $result = eval {
my $pru = $smpp->submit_sm(
source_addr_ton => 0x05,
source_addr_npi => 0x01,
source_addr => $sm_source_addr,
dest_addr_ton => 0x01,
dest_addr_npi => 0x01,
destination_addr => $sm_dest_addr,
data_coding => 0x01,
short_message =>$sm_message
) or return 1;
return 0;
};
if ($result == 1){
"Can't send message: $!";
}
}
#Разрываем соединение с SMSC
$smpp->unbind();
Где-то уже не помню где нашел неофициальный перевод спецификации протокола SMPP на русский, вот он.
Если найдется его автор, скажу большое спасибо ))).
SMPP протокол, который используется мобильными операторами для организации службы коротких сообщений (SMS).
Согласно своему имени протокол SMPP определяет клиента (ESME) и сервер (часто называемого SMSC).
Клиент инициализирует TCP соединение и выполняет команду bind для организации соединения со специфичными параметрами.
Схемы соединения клиента:
1. receiver — клиент может только получать сообщения от SMSC.
2. transmitter — клиент может только отправлять сообещения на SMSC
3. transceiver — клиент осуществляет двухстороннюю передачу сообщений.
Таким образом для организации двухстороней передачи сообщений можно либо установить соединение тип transceiver, либо устанавливать 2 соединения типов transmitter и receiver.
Для завершения SMPP сессии используется команда unbind.
После установки SMPP соединения происходит обмен сообщениями, называемыми PDU (protocol data unit). Общение между клиентом и сервером происходит по принципу запрос-ответ (request-response). Запросы содержат в себе определенное уникальное в данной сессии число, и в свою очередь ответные PDU, содержат в себе то же самое число — благодаря этому механизму возможна асинхронная передача сообщений.
Протоколом определены несколько команд для отправки разных типов сообщений, замены и отмены ранее отправленных сообщений и т. д. Наиболее часто используемой из них командой является submit_sm — отправка простого текстового сообщения. Ответом на эту команду является PDU submit_sm_resp. Отчет о доставке сообщения посылается в виде PDU deliver_sm.
Также стоит сказать про ограничение длины SMPP сообщений. В протоколе SMPP, длина поля short_message ограничена 254 байтами, однако нижележащие протоколы накладывают другие требования. Например GSM ограничивает длину коротких сообщений в 140 байт.
Пример организации соединения и отправки текстового сообщения на языке Perl с использованием модуля Net::SMPP
#!/usr/bin/perl -w
use strict;
use Net::SMPP;
#Номер от которого отправляется СМС
my $SMPP_SOURCE_ADDR='FROM';
#Номер кому отправляется СМС
my $SMPP_DEST_ADDR='79000000000';
#Инициируем соединение типа transceiver
#В параметрах указываем system_id и password - аналог имени пользователя и пароля для аутентификации на SMSC
#адрес и порт, с которым соединяемся и версию протокола SMPP
my $smpp = Net::SMPP->new_transceiver('192.168.1.1',
system_id => 'username',
password => 'password',
port => '2775',
smpp_version=> 0x34
)
or die "Can't connect to SMSC: $!";
&send_message($SMPP_SOURCE_ADDR, $SMPP_DEST_ADDR, 'Hello SMS!!!');
#Процедура отправки сообщения submit_sm
#В параметрах send_message передаем адрес отправителя, адрес получателя, то есть его номер телефона и текст
#сообщения
#Параметры source_addr_ton, source_addr_npi, dest_addr_ton, dest_addr_npi определяют дополнительные параметры
#адресов отправителя и получателя. Подробнее о них в спецификации протокола SMPP.
sub send_message {
my ($sm_source_addr, $sm_dest_addr, $sm_message) = @_;
my $result = eval {
my $pru = $smpp->submit_sm(
source_addr_ton => 0x05,
source_addr_npi => 0x01,
source_addr => $sm_source_addr,
dest_addr_ton => 0x01,
dest_addr_npi => 0x01,
destination_addr => $sm_dest_addr,
data_coding => 0x01,
short_message =>$sm_message
) or return 1;
return 0;
};
if ($result == 1){
"Can't send message: $!";
}
}
#Разрываем соединение с SMSC
$smpp->unbind();
Где-то уже не помню где нашел неофициальный перевод спецификации протокола SMPP на русский, вот он.
Если найдется его автор, скажу большое спасибо ))).
вторник, 7 декабря 2010 г.
Простейшая конфигурация mod_proxy
Представим ситуацию:
У нас стоит веб-сервер, смотрящий в интернет, и внутренний ресурс внутри корпоративной сети. Появляется задача предоставления доступа к некоторым ресурсам внутреннего веб-сервера в интернет.
Если в качестве внешнего веб-сервера используется apache, то для этих целей можно и нужно использовать модуль mod_proxy. Насколько мне помниться во всей 2 линейке (apache2) модуль является встроенным и активируется при компиляции
./configure --enable-proxy
Простейшая настройка:
В httpd.conf добавляем следующие директивы:
ProxyRequests On
Order deny,allow
Allow from all
ProxyPass /external_site/ http://internal_site/
Здесь Мы указываем - что веб-сервер пропускал запросы вида /external/ и перенаправлял на url http://internal_site/
Вот в принципе для начала и все.
Полное описание директив здесь
У нас стоит веб-сервер, смотрящий в интернет, и внутренний ресурс внутри корпоративной сети. Появляется задача предоставления доступа к некоторым ресурсам внутреннего веб-сервера в интернет.
Если в качестве внешнего веб-сервера используется apache, то для этих целей можно и нужно использовать модуль mod_proxy. Насколько мне помниться во всей 2 линейке (apache2) модуль является встроенным и активируется при компиляции
./configure --enable-proxy
Простейшая настройка:
В httpd.conf добавляем следующие директивы:
ProxyRequests On
Order deny,allow
Allow from all
ProxyPass /external_site/ http://internal_site/
Здесь Мы указываем - что веб-сервер пропускал запросы вида /external/ и перенаправлял на url http://internal_site/
Вот в принципе для начала и все.
Полное описание директив здесь
понедельник, 6 декабря 2010 г.
Таблица HTML escape символов
Symbol | Code | Entity Name |
---|---|---|
™ | ™ | |
€ | € | |
Space |   | |
! | ! | |
" | " | " |
# | # | |
$ | $ | |
% | % | |
& | & | & |
' | ' | |
( | ( | |
) | ) | |
* | * | |
+ | + | |
, | , | |
- | - | |
. | . | |
/ | / | |
0 | 0 | |
1 | 1 | |
2 | 2 | |
3 | 3 | |
4 | 4 | |
5 | 5 | |
6 | 6 | |
7 | 7 | |
8 | 8 | |
9 | 9 | |
: | : | |
; | ; | |
< | < | < |
= | = | |
> | > | > |
? | ? | |
@ | @ | |
A | A | |
B | B | |
C | C | |
D | D | |
E | E | |
F | F | |
G | G | |
H | H | |
I | I | |
J | J | |
K | K | |
L | L | |
M | M | |
N | N | |
O | O | |
P | P | |
Q | Q | |
R | R | |
S | S | |
T | T | |
U | U | |
V | V | |
W | W | |
X | X | |
Y | Y | |
Z | Z | |
[ | [ | |
\ | \ | |
] | ] | |
^ | ^ | |
_ | _ | |
` | ` | |
a | a | |
b | b | |
c | c | |
d | d | |
e | e | |
f | f | |
g | g | |
h | h | |
i | i | |
j | j | |
k | k | |
l | l | |
m | m | |
n | n | |
o | o | |
p | p | |
q | q | |
r | r | |
s | s | |
t | t | |
u | u | |
v | v | |
w | w | |
x | x | |
y | y | |
z | z | |
{ | { | |
| | | | |
} | } | |
~ | ~ | |
Non-breaking space |   | |
¡ | ¡ | ¡ |
¢ | ¢ | ¢ |
£ | £ | £ |
¤ | ¤ | ¤ |
¥ | ¥ | ¥ |
¦ | ¦ | ¦ |
§ | § | § |
¨ | ¨ | ¨ |
© | © | © |
ª | ª | ª |
« | « | |
¬ | ¬ | ¬ |
| ­ | ­ |
® | ® | ® |
¯ | ¯ | ¯ |
° | ° | ° |
± | ± | ± |
² | ² | ² |
³ | ³ | ³ |
´ | ´ | ´ |
µ | µ | µ |
¶ | ¶ | ¶ |
· | · | · |
¸ | ¸ | ¸ |
¹ | ¹ | ¹ |
º | º | º |
» | » | » |
¼ | ¼ | ¼ |
½ | ½ | ½ |
¾ | ¾ | ¾ |
¿ | ¿ | ¿ |
À | À | À |
Á | Á | Á |
 |  |  |
à | à | à |
Ä | Ä | Ä |
Å | Å | Å |
Æ | Æ | Æ |
Ç | Ç | Ç |
È | È | È |
É | É | É |
Ê | Ê | Ê |
Ë | Ë | Ë |
Ì | Ì | Ì |
Í | Í | Í |
Î | Î | Î |
Ï | Ï | Ï |
Ð | Ð | Ð |
Ñ | Ñ | Ñ |
Ò | Ò | Ò |
Ó | Ó | Ó |
Ô | Ô | Ô |
Õ | Õ | Õ |
Ö | Ö | Ö |
× | × | × |
Ø | Ø | Ø |
Ù | Ù | Ù |
Ú | Ú | Ú |
Û | Û | Û |
Ü | Ü | Ü |
Ý | Ý | Ý |
Þ | Þ | Þ |
ß | ß | ß |
à | à | à |
á | á | á |
â | â | â |
ã | ã | ã |
ä | ä | ä |
å | å | å |
æ | æ | æ |
ç | ç | ç |
è | è | è |
é | é | é |
ê | ê | ê |
ë | ë | ë |
ì | ì | ì |
í | í | í |
î | î | î |
ï | ï | ï |
ð | ð | ð |
ñ | ñ | ñ |
ò | ò | ò |
ó | ó | ó |
ô | ô | ô |
õ | õ | õ |
ö | ö | ö |
÷ | ÷ | ÷ |
ø | ø | ø |
ù | ù | ù |
ú | ú | ú |
û | û | û |
ü | ü | ü |
ý | ý | ý |
þ | þ | þ |
ÿ | ÿ | |
Ā | Ā | |
ā | ā | |
Ă | Ă | |
ă | ă | |
Ą | Ą | |
ą | ą | |
Ć | Ć | |
ć | ć | |
Ĉ | Ĉ | |
ĉ | ĉ | |
Ċ | Ċ | |
ċ | ċ | |
Č | Č | |
č | č | |
Ď | Ď | |
ď | ď | |
Đ | Đ | |
đ | đ | |
Ē | Ē | |
ē | ē | |
Ĕ | Ĕ | |
ĕ | ĕ | |
Ė | Ė | |
ė | ė | |
Ę | Ę | |
ę | ę | |
Ě | Ě | |
ě | ě | |
Ĝ | Ĝ | |
ĝ | ĝ | |
Ğ | Ğ | |
ğ | ğ | |
Ġ | Ġ | |
ġ | ġ | |
Ģ | Ģ | |
ģ | ģ | |
Ĥ | Ĥ | |
ĥ | ĥ | |
Ħ | Ħ | |
ħ | ħ | |
Ĩ | Ĩ | |
ĩ | ĩ | |
Ī | Ī | |
ī | ī | |
Ĭ | Ĭ | |
ĭ | ĭ | |
Į | Į | |
į | į | |
İ | İ | |
ı | ı | |
IJ | IJ | |
ij | ij | |
Ĵ | Ĵ | |
ĵ | ĵ | |
Ķ | Ķ | |
ķ | ķ | |
ĸ | ĸ | |
Ĺ | Ĺ | |
ĺ | ĺ | |
Ļ | Ļ | |
ļ | ļ | |
Ľ | Ľ | |
ľ | ľ | |
Ŀ | Ŀ | |
ŀ | ŀ | |
Ł | Ł | |
ł | ł | |
Ń | Ń | |
ń | ń | |
Ņ | Ņ | |
ņ | ņ | |
Ň | Ň | |
ň | ň | |
ʼn | ʼn | |
Ŋ | Ŋ | |
ŋ | ŋ | |
Ō | Ō | |
ō | ō | |
Ŏ | Ŏ | |
ŏ | ŏ | |
Ő | Ő | |
ő | ő | |
Œ | Œ | |
œ | œ | |
Ŕ | Ŕ | |
ŕ | ŕ | |
Ŗ | Ŗ | |
ŗ | ŗ | |
Ř | Ř | |
ř | ř | |
Ś | Ś | |
ś | ś | |
Ŝ | Ŝ | |
ŝ | ŝ | |
Ş | Ş | |
ş | ş | |
Š | Š | |
š | š | |
Ţ | Ţ | |
ţ | ţ | |
Ť | Ť | |
ť | ť | |
Ŧ | Ŧ | |
ŧ | ŧ | |
Ũ | Ũ | |
ũ | ũ | |
Ū | Ū | |
ū | ū | |
Ŭ | Ŭ | |
ŭ | ŭ | |
Ů | Ů | |
ů | ů | |
Ű | Ű | |
ű | ű | |
Ų | Ų | |
ų | ų | |
Ŵ | Ŵ | |
ŵ | ŵ | |
Ŷ | Ŷ | |
ŷ | ŷ | |
Ÿ | Ÿ | |
Ź | Ź | |
ź | ź | |
Ż | Ż | |
ż | ż | |
Ž | Ž | |
ž | ž | |
ſ | ſ | |
Ŕ | Ŕ | |
ŕ | ŕ | |
Ŗ | Ŗ | |
ŗ | ŗ | |
Ř | Ř | |
ř | ř | |
Ś | Ś | |
ś | ś | |
Ŝ | Ŝ | |
ŝ | ŝ | |
Ş | Ş | |
ş | ş | |
Š | Š | |
š | š | |
Ţ | Ţ | |
ţ | ţ | |
Ť | Ť | |
ť | Ɂ | |
Ŧ | Ŧ | |
ŧ | ŧ | |
Ũ | Ũ | |
ũ | ũ | |
Ū | Ū | |
ū | ū | |
Ŭ | Ŭ | |
ŭ | ŭ | |
Ů | Ů | |
ů | ů | |
Ű | Ű | |
ű | ű | |
Ų | Ų | |
ų | ų | |
Ŵ | Ŵ | |
ŵ | ŵ | |
Ŷ | Ŷ | |
ŷ | ŷ | |
Ÿ | Ÿ | |
Ź | Ź | |
ź | ź | |
Ż | Ż | |
ż | ż | |
Ž | Ž | |
ž | ž | |
ſ | ſ |
Подписаться на:
Сообщения (Atom)