tag:blogger.com,1999:blog-28920367513973187672024-03-06T08:02:12.023+03:00Блог программиста-самоучкиВ этом блоге я буду публиковать все то, что я нашел интересное в сети, а так же свои небольшие заметки и не обязательно это будет программирование)))PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.comBlogger26125tag:blogger.com,1999:blog-2892036751397318767.post-34419101545911084322016-12-02T12:12:00.000+03:002016-12-02T21:35:57.503+03:00Yeastar TA410 и Asterisk 1.8<div dir="ltr" style="text-align: left;" trbidi="on">
Для подключения внешних аналоговых линий к серверу IP телефонии используются специальные шлюзы, одним из которых и является Yeastar TA410. Это шлюз на 4 порта FXO (FXS служат наоборот для подключения аналоговых телефонов абонентов) Есть еще его старший брат Yeastar TA810 в котором уже 8 портов.<br />
<div>
<br /></div>
<div>
Данный шлюз представляет из себя такой же Asterisk сервер с версией 1.6 и веб админка. Подробнее его характеристики есть на сайте <a href="http://ipmatika.ru/products/voip-pstn/yeastar-ta410/" target="_blank">ipmatika.ru</a> там же лежит новая прошивка и инструкция на английском.</div>
<div>
<br /></div>
<div>
Производитель рекомендует регистрировать не шлюз на сервере, как например Cisco SPA 3110, а наоборот - сервер регистрируется на шлюзе.</div>
<div>
<br /></div>
<div>
Мне пришлось настраивать связку сервер и шлюз в среде, когда и шлюз и сервер находятся за разными NAT и оба имеют белые IP адреса.</div>
<div>
<br /></div>
<div>
Поддержка ipmatika посоветовала воспользоваться инструкцией на сайте <a href="http://xgu.ru/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_GSM/CDMA/UMTS_%D1%88%D0%BB%D1%8E%D0%B7%D0%BE%D0%B2_Yeastar_TG100/200/400/800/1600_%D0%BA_Asterisk" target="_blank">Подключение GSM/CDMA/UMTS шлюзов Yeastar TG100/200/400/800/1600 к Asterisk</a></div>
<div>
<br /></div>
<div>
Чтобы связать сервер и шлюз необходимо зайти в веб-админку в раздел Шлюз.</div>
<div>
Далее необходимо создать VoIP линии. Их может быть три типа:</div>
<div>
<ul style="text-align: left;">
<li><b>SIP-аккаунт</b> (сервер подключается к шлюзу)</li>
<li><b>VoIP-линия</b> (шлюз подключается к серверу)</li>
<li><b>VoIP-канал</b></li>
</ul>
</div>
<div>
Логично предположить что мы создаем VoIP линию по протоколу SIP на шлюзе и заводим новый аккаунт в sip.conf на сервере, таким образом подключаем шлюз к серверу. Но такая связка у меня не заработала. Я смог зарегистрироваться со шлюза на своем сервере и принимать входящие звонки, а при исходящих - шлюз упорно искал набираемый номер во внутренних номерах и не хотел набирать его на внешней линии.</div>
<div>
<br /></div>
<div>
Попробовав создать SIP аккаунт на шлюзе для исходящих звонков, так же потерпел фиаско. Сервер писал что статус ОК, а шлюз - что к аккаунту никто не подключен. Ошибок в консоле сервера и шлюза никаких не было(((</div>
<div>
<br /></div>
<div>
Поскольку шлюз - по большому счету такой же сервер Asterisk, то решил попробовать связать их по родному протоколу для связи серверов - IAX2</div>
<div>
<br /></div>
<div>
<ol style="text-align: left;">
<li>Пробросил порт <b>4569</b> udp на сервер и шлюз</li>
<li>Завел на сервере аккаунт в файле<b> iax.conf</b></li>
<li>Изменил протокол <b>с SIP на IAX</b> в уже созданном SIP аккаунте и VoIP линии</li>
<li>В секцию <b>[global] </b>файла <b>iax.conf </b>добавил строчку</li>
</ol>
</div>
<div>
<b>register => fxo_out:pass@xx.xx.xx.xx,</b></div>
<div>
где хх.хх.хх.хх белый ip шлюза, fxo_out - логин из SIP аккаунта шлюза, а pass - пароль.</div>
<div>
<br /></div>
<div>
После этого делаем <b>iax2 reload</b> на сервере</div>
<div>
И смотрим на шлюзе статус линий в разделе <b>Статус-Статус портов FXO</b></div>
<div>
<br /></div>
<div>
Диалплан на сервере у меня был уже прописан в файле <b>extensions.conf </b></div>
<div>
Если вы внесли какие-то изменения в него, то не забывайте сделать <b>dialplan reload </b></div>
<div>
<br /></div>
<div>
Прежде чем проверять звонки идем в раздел<b> Шлюз - VoIP порт->порт FXO</b> и добавляем там маршрут для звонка. </div>
<div>
<ul style="text-align: left;">
<li>Источник IAX SIP аккаунт</li>
<li>Назначение: Порт FXO</li>
<li>Упрощенный режим: Да</li>
</ul>
</div>
<div>
<br /></div>
<div style="text-align: left;">
Аналогично создаем маршрут в разделе <b>Порт FXO -> VoIP/Порт FXO</b></div>
<div>
<ul style="text-align: left;">
<li>Источник IAX SIP аккаунт</li>
<li>Назначение: Порт FXO</li>
<li>Упрощенный режим: Да</li>
<li>Горячая линия: номер сервера, на который будет звонить шлюз при входящем звонке с города.</li>
</ul>
</div>
<div>
Тут можно указать либо внутренний номер на который принимать звонки, либо номер, который в дальнейшем обрабатывать в<b> extensions.conf</b>, например так</div>
<div>
<br /></div>
<div>
<div>
<b>exten => 2085554,1,Dial(SIP/1059&</b><b>SIP/1050</b><b>,30,tT)</b></div>
<div>
<b>exten => 2085554,n,HangUp()</b></div>
</div>
<div>
<br />
Чтобы позвонить через наш транк:<br />
exten => _XXXXXXX,1,Dial(IAX2/voip2fxo:password@xx.xx.xx.xx/${EXTEN})<br />
<br /></div>
<div>
П.С. <span style="color: red;">не забывайте сделать настройки безопасности</span> для сервера и шлюза, если они смотрят в интернет. Как минимум запретите регистрацию со всех IP кроме доверенных, для этого на шлюзе активируйте функцию <b>Enable IP Restriction</b> (закладка <b>Дополнительно</b>, в настройках <b>SIP-аккаунт</b>а) и укажите там IP с которых можно подключаться/ В моем случае здесь только внешний IP моего сервера с маской сети <b>255.255.255.255.</b></div>
<div>
Для сервера запрет устанавливается в параметре <b>permit </b>в описании аккаунта в файле <b>iax.conf</b></div>
<div>
Только теперь уже указываем белый IP шлюза.</div>
<div>
Дополнительно я отбрасываю все пакеты с порта 4569, которые отправлены не с IP шлюза/сервера. </div>
<div>
Так же настоятельно вам рекомендую настроить <b>fail2ban </b>на сервере и проверить не открыт ли доступ к tcp портам<b> 8022, 80 и udp 5060</b> для кого попало</div>
<div>
<br /></div>
<div>
Note. для доступа к шлюзу по ssh активируйте сервис SSH в разделе Система - Сервисы и используйте для входа </div>
<div>
<ul style="text-align: left;">
<li><b>логин root</b></li>
<li><b>пароль ys123456</b></li>
</ul>
</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-47803252743907389312012-08-07T13:11:00.000+04:002012-08-07T13:11:59.603+04:00Beckup сервер на Ubuntu<div dir="ltr" style="text-align: left;" trbidi="on">
Развернуть сервер для резервных копий на Ubuntu проще простого.<br />
<br />
В Linux среде для этих целей используется программа Rsync, которая входит в стандартную поставку Ubuntu.<br />
<br />
Чтобы активировать ее делаем следующее:<br />
<br />
<span style="background-color: white;"><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">/etc/default/rsync</span><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">====фрагмент====</span><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">RSYNC_ENABLE=true</span><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">====фрагмент====</span><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><br />Создаем файл настроек<br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">sudo touch /etc/rsyncd.conf</span></span><br />
<span style="background-color: white;"><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">sudo nano /etc/rsyncd.conf</span><br style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;" /><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;">В файле настройки rsync пишем:</span></span>
<br />
<span style="background-color: white;"><span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px; text-align: -webkit-auto;"><br /></span></span>
<span style="background-color: white;"><span style="text-align: -webkit-auto;"></span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"># GLOBAL OPTIONS</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">pid file=/var/run/rsyncd.pid</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><br /></span></span>
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">#motd file=/etc/motd</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">#log file=/var/log/rsyncd</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"># for pid file, do not use /var/run/rsync.pid if</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"># you are going to run rsync out of the init.d script.</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"># pid file=/var/run/rsyncd.pid</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">#syslog facility=daemon</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">#socket options=</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><br /></span></span>
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"># MODULE OPTIONS</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">[beckup]</span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>comment = Rsync file storage 2</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;">#куда бекапить</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>path = /mnt/beckup2/beckup</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>use chroot = true</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>log file = /var/log/rsyncd/backups2.log</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>read only = false</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>list = yes</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>uid = psv</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>gid = psv</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>strict modes = yes</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>ignore errors = no</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>ignore nonreadable = yes</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>transfer logging = false</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>timeout = 600</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>refuse options = checksum dry-run</span></span><br />
<span style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz</span></span><br />
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
<br /></div>
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
и стратуем сервер</div>
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
<br /></div>
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
sudo servise rsync start</div>
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
<br /></div>
<div style="font-family: 'Ubuntu Beta', UbuntuBeta, Ubuntu, 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif; font-size: 14px; line-height: 19px;">
Все наш сервер запущен и готов принимать данные по протоколу rsync://</div>
</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-71004003987460457422012-03-06T11:29:00.001+04:002012-03-06T11:29:00.095+04:00Asterisk в Ubuntu - команда DialВ предыдущем посте я писал как настроить связь между внутренними абонентами и мы для этих целей в диалплане использовали команду Dial следующим образом:<br />
<br />
<i><b>exten => 100,1,Dial(SIP/100)</b></i><br />
<br />
сегодня я покажу как с помощью этой команды заставить звонить сразу несколько телефонов или сначала на один, и если он не берет трубку, то уходил другому абоненту.<br />
<br />
[sip_dial]<br />
exten => 101,1,Dial(SIP/101&SIP/102)<br />
<br />
При входящем звонке зазвенят телефоны с номерами 101 и 102. Звонок примет тот, кто раньше поднимет рубку. Если второй номер поднимет трубку после, то он НЕ будет слышать разговор абонента 101.<br />
<br />
[sip_dial]<br />
exten => 101,1,Dial(SIP/101,10)<br />
exten => 101,2,Dial(SIP/102,10)<br />
<br />
При входящем звонке зазвенит телефон у абонента 101. Если он в течении 10 секунд не возьмет трубку, то звонок уйдет на абонента 102.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-87634786411801521752012-03-02T10:38:00.003+04:002012-03-02T10:38:00.991+04:00Asterisk в Ubuntu - внутренняя связьВ предыдущем посте я писал как установить сервер VoIP телефонии на Ubuntu/ В этой статье я расскажу как настроить внутренние номера и звонки между ними.<br />
<br />
Нам понадобится:<br />
Установленный сервер Asterisk<br />
Программа X-Lite (программный телефон для VoIP телефонии) - 2 шт.<br />
<br />
Запускаем mc с правами администратора:<br />
<br />
<i><b>sudo</b> mc</i><br />
<br />
Если mc у вас не установлен, то установите его командой <br />
<br />
<i><b>sudo apt-get install</b> mc</i><br />
<br />
Asterisk устанавливается по умолчанию в папку /etc/asterisk/. Переходим в эту папку и на всякий случай скопируем файлы sip.conf и extensions.conf куда-нибудь, чтобы можно было откатиться в случаи чего. <br />
Открываем для редактирования файл sip.conf выбрав его и нажав F4. <br />
Найдем вначале файла строчку<br />
<i>;allowguest=no</i><br />
и снимем с нее комментарий. Это нужно чтобы запретить гостевое подключение к серверу. Если этого не сделать можно круто попасть на $$$, особенно если ваш сервер смотрит во внешний мир.<br />
<br />
теперь переходим в самый конец файла и дописываем:<br />
<br />
[100]<br />
type=friend<br />
secret=pass100<br />
nat=yes<br />
host=dynamic <br />
username=User100<br />
dtmfmode=rfc2833<br />
disallow=all<br />
allow=ulaw<br />
context=sip_dial<br />
callerid=100<br />
<br />
[101]<br />
type=friend<br />
secret=pass101<br />
nat=yes<br />
host=dynamic <br />
username=User101<br />
dtmfmode=rfc2833<br />
disallow=all<br />
allow=ulaw<br />
context=sip_dial<br />
callerid=101<br />
<br />
Все. Сохраняемся и закрываем файл.<br />
<br />
Переходим в консоль asterisk <br />
<br />
<i><b>sudo</b> asterisk -r</i><br />
<br />
и выполняем там команду <br />
<br />
<i>show sip users</i><br />
<br />
Если все сделали правильно, то вы должны увидеть таблицу с нашими двумя абонентами.<br />
<br />
таким образом мы создали абонентов с номерами 100 и 101<br />
<br />
Данные параметры означают следующее:<br />
<br />
<b>[100]</b> - имя клиента. Наличие скобок обязательно<br />
<br />
<b>type=friend</b> - описывает тип клиента, в нашем случае friend. Вообще существует три типа user – это когда идентификация клиента осуществляется по полю From SIP заголовка, который исходит от клиента. peer – идентификация происходит по адресу хоста с которого осуществляется регистрация. И тот тип, что мы применили friend – это смесь peer и user, идентифкация происходит любым методом(либо адрес хоста, либо юзернейм).<br />
<br />
<b>secret</b> – это пароль пользователя.<br />
<br />
<b>nat=yes</b> – обозначает, что клиент может находится за натом и для открытия медиаканала при звонке этого пользователя требуется трансляция заголовков. Если будут клиенты не только из локальной сети, то лучше у всех ставить yes<br />
<br />
<b>host=dynamic</b> – привязка к адресу хоста клиента отсутствует. Если необходимо чтобы этот клиент подключался только с определенного IP то указываем разрешенный IP<br />
<br />
<b>username=User100</b> – имя пользователя. Этот логин потом используется в настройках сип клиента.<br />
<br />
<b>dtmfmode=rfc2833</b> – метод передачи dtmf – тонов набора номера. Существует еще метод info, должен совпадать с настройками в SIP клиенте.<br />
<br />
<b>disallow=all</b> – запрещаем все кодеки<br />
<b>allow=ulaw</b> – разрешаем кодек ulaw, кодек должен быть такой, который поддерживается клиентом. Возможно указать несколько кодеков через запятую.<br />
<br />
<b>context=sip-dial</b> – контекст описывает в какой секции диалплана будут обрабатываться звонки клиента<br />
<br />
<b>callerid=100</b> – Ваш номер, который будет высвечиваться у абонентов при исходящем звонке<br />
<br />
<br />
Клиентов завели, теперь необходимо научить сервер звонить. Для этого открываем для редактирования файл extensions.conf и в конце файла дописываем:<br />
<br />
<i>[sip_dial]<br />
exten => 100,1,Dial(SIP/100)<br />
exten => 101,1,Dial(SIP/101)</i><br />
<br />
Не забываем при редактировании оставлять пустую строку в конце файла. Из-за отсутствия символа перевода строки могут появиться ошибки.<br />
<br />
Теперь устанавливаем на компьютеры программные телефоны и настраиваем их. Выбираем в меню softphone->Account settings и заполняем:<br />
<br />
Account name: 100<br />
User ID: 100<br />
Domain: ip_сервера_asterisk<br />
password: User100<br />
Register with domain and recive calls: галочка<br />
Proxy: галочка<br />
Address: ip_сервера_asterisk<br />
<br />
Остальные значения оставляем по умолчанию. На этом настройка закончена и наши абоненты могут звонить друг другу.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-64166784875271209432012-02-24T15:33:00.000+04:002012-02-24T15:33:01.282+04:00Asterisk в Ubuntu - установкаЕсть два способа установить сервер Asterisk на Ubuntu<br />
<br />
1. Сборка из исходников<br />
2. Установка из репозитория<br />
<br />
Первый способ у меня не получился. При попытки скомпилировать DAHDI драйвер выдавались ошибки. Поэтому я пошел вторым путем.<br />
<br />
Обновимся перед установкой:<br />
<br />
<i><b>sudo apt-get update<br />
sudo apt-get upgrade<br />
</b></i><br />
<br />
Базовая установка требует:<br />
* - Установку библиотеки LibPRI, которая добавляет поддержку ISDN<br />
* - Установку библиотеки libSS7, которая реализует работу по протоколу SS7<br />
* - Установку DAHDI, обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса Daahdi плюс программные эхоподавителели с другой. Драйвера интерфейсов позволяют использовать аппаратные средства (карты) для соединения Asterisk с традиционными аналоговыми или цифровыми телефонными сетями<br />
* - Сам сервер Asterisk.<br />
<br />
Ставим следующие пакеты: <br />
<br />
<i><b>sudo apt-get install</b> libri1.4 libss7-1 libss7-dbg libss7-dev dahdi dahdi-dkms dahdi-linux asterisk asterisk-config asterisk-sounds-main</i><br />
<br />
Проверить установлен ли пакет можно командой dpkg -l|grep имя_пакета, например так:<br />
<br />
<i><b>dpkg -l|grep</b> asterisk</i><br />
<br />
Устанавливать надо в том порядке в котором я написал.<br />
<br />
Если пакеты что-то потянут за собой, то ставьте все зависимости.<br />
<br />
После установки в системе появится еще один пользователь asterisk под которым и будет запускаться сам сервер, так же он пропишется в автозагрузку при рестарте.<br />
<br />
Перезагружаем сервер<br />
<br />
<i><b>sudo reboot</b></i><br />
<br />
Пробуем зайти в консоль Asterisk<br />
<br />
<i><b>sudo</b> asterisk -r</i><br />
<br />
Запускать необходимо именно от root иначе вы не подключитесь к консоли и будут ошибки.<br />
<br />
В следующей статье опишу как настроить два номера и совершать звонки между ними.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-39650633446413567022011-12-12T12:58:00.001+04:002011-12-22T10:28:39.611+04:00Русские буквы в консоли Ubuntu 11.10 ServerЕсли установит Ubuntu 11.10 server, то из коробки она вместо русских букв в консоле показывает квадратики. Лечится это так:<br />
В консоле пишем:<br />
sudo dpkg-reconfigure console-setup<br />
<br />
В появившемся мастере выбираем:<br />
UTF-8<br />
пятый пункт<br />
16<br />
VGA<br />
на вопрос консоли вводим:<br />
/dev/tty[1-6]<br />
<br />
Теперь русский шрифт отображается нормально, но после перезагрузки все возвращается обратно. Чтобы это не происходило делаем следующее:<br />
<br />
sudo nano /etc/rc.local<br />
<br />
перед exit0 дописываем:<br />
<br />
setupcon<br />
<br />
Сохраняемся и перезагружаем сервер. Все должно работать.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com5tag:blogger.com,1999:blog-2892036751397318767.post-23884226427122249242011-12-03T17:15:00.000+04:002011-12-03T17:15:45.994+04:00SAMBA в Ubuntu 11.10 Server (Общие папки)Столкнулся с задачей организовать файл сервер. <br />
<br />
Клиенты Windows 7 Pro должны заходить под логином и паролем и иметь свою домашнюю папку на сервере, к которой имею доступ я и сам клиент и общую шару. <br />
<br />
Как оказалось это дело пяти минут, когда разобрался. Итак, приступим.<br />
<br />
Первым делом устанавливаем пакеты и если понадобятся. то и все зависимости.<br />
<br />
<b>sudo apt-get install samba samba-common libcups2</b><br />
<br />
Теперь останавливаем SAMBA сервер если он запущен.<br />
<br />
<b>sudo /etc/init.d/smbd stop</b><br />
<br />
Создадим общую папку на сервере:<br />
<br />
<b>mkdir -p /home/shares/forall<br />
chown -R root:users /home/shares/forall/<br />
chmod -R ug+rwx,o+rx-w /home/shares/forall/</b><br />
<br />
Осталось самое важное - настройка конфига smb.conf<br />
<br />
<b>sudo nano /etc/samba/smb.conf</b><br />
<br />
В разделе [GLOBAL] указываем:<br />
<br />
<b><i># имя рабочей группы<br />
workgroup = WORKGROUP<br />
# адрес сервера имен Windows, чтобы сервер отображался в сетевом окружении<br />
wins support = yes<br />
wins server = 192.168.0.1<br />
#нужно чтобы клиенты на Linux могли подключится к SAMBA<br />
security = user</i></b><br />
<br />
Найдите далее секцию [homes] и закомментируйте все строчки в ней символом # вначале строки<br />
<br />
В конце файла пишем:<br />
<b><i>[forall]<br />
comment = All Users Shares<br />
path = /home/shares/forall<br />
valid users = @users<br />
force group = users<br />
create mask = 0660<br />
directory mask = 0771<br />
writable = yes<br />
<br />
[homes]<br />
comment = Home Directories<br />
browseable = no<br />
valid users = %S<br />
writable = yes<br />
create mask = 0700<br />
directory mask = 0700</i></b><br />
<br />
Все. Нажимаем Ctrl+O чтобы сохранить изменения. Enter чтобы подтвердить и Ctrl+X чтобы выйти.<br />
<br />
Теперь необходимо еще проверить входит ли ваш пользователь в группу users и добавить остальных пользователей.<br />
<br />
Чтобы проверить в какие группы входит наш пользователь вводим:<br />
<br />
<b>sudo id my_login</b><br />
<br />
где my_login ваш логин в системе.<br />
Если в списке групп нет группы users, то добавим себя в нее<br />
<br />
<b>sudo usermod -a -G ftp my_login</b><br />
<br />
Теперь добавим еще одного пользователя ivan в систему<br />
<br />
<b>sudo useradd ivan -m -G users</b><br />
<br />
и зададим ему пароль посложнее. Если вы не хотите чтобы этот пользователь входил на сервер, то не сообщаем ему пароль или пропустите этот шаг:<br />
<br />
<b>sudo passwd ivan</b><br />
<br />
Осталось создать пароли пользователей для Samba:<br />
<br />
sudo smbpasswd -a my_login<br />
<br />
и для созданного пользователя:<br />
<br />
sudo smbpasswd -a ivan<br />
<br />
Пароль должен отличаться от пароль пользователя в системе.<br />
Ну и перезапускаем Samba сервер:<br />
<br />
<b>sudo /etc/init.d/smbd restart</b><br />
<br />
На этом все закончилось.<br />
В windows переходим по адресу:<br />
<b>\\ip_сервера\</b> или сразу в общую папку <b>\\ip_сервера\forall</b><br />
В качестве логина и пароля указываем либо своего, либо созданного пользователя.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-44737872780853838602011-09-02T11:49:00.000+04:002011-09-02T11:49:16.228+04:00"Будущее началось" или Глобальная социальная сеть.<iframe width="480" height="295" src="http://www.youtube.com/embed/oIhcdi3leqE?fs=1" frameborder="0" allowFullScreen=""></iframe>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-78213886664760780862011-05-26T16:33:00.002+04:002011-05-26T16:36:24.795+04:00Skype не работает или Как починить скайпСегодня 26 мая 2011 года по всему миру перестал работать скайп. Вроде еще как-то работает на Android и MacOS. Пользователи Windows и Linux не могут запустить Skype. Сайт http://www.skype.com работает нестабильно. Вот что там написано в те редкие разы когда все же удается пробиться к ним:<br />
<br />
<i>Skype engineers are working on the problem, the company said. But the fix may take “a few hours,” and advanced features like video calling might not be available until after that.<br />
<br />
…<br />
<br />
So what went wrong? The company says the problem has to do with its “supernodes” — a crucial part of its peer-to-peer networking system. Almost any computer in the network can be a Skype supernode, and these act like directories for the service, telling Skype things like who is online. Skype says a problem with some versions of Skype took a bunch of supernodes down, meaning that people weren’t able to log on as normal.</i><br />
<br />
Если у вас все работает, то попросите кого-нибудь из друзей отправить вам файл или позвонить. <br />
<br />
<b>Пока найдено следующее решение.</b><br />
<br />
под W7 заставить работать можно удалив файл <br />
shared.xml из папки C:\Users\%username%\AppData\Roaming\Skype<br />
<br />
Или, если XP, то удалив его тут: C:\Documents and Settings\%username%\Application Data\Skype<br />
<br />
Для Linux<br />
rm ~/.Skype/shared.xml<br />
<br />
Для MacOS <br />
rm ~/Library/Application\ Support/Skype/shared.xmlPSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-48485559893212137642011-05-10T13:42:00.001+04:002013-03-03T22:53:55.387+04:00Раздаем интернет в офисе или 3proxy Часть третья "SOCKS и FTP"<div dir="ltr" style="text-align: left;" trbidi="on">
Если вы читали мои предыдущие посты, то это значит что у Вас уже есть рабочий HTTP прокси сервер и сейчас мы к нему добавим SOCKS и FTP чтобы наши пользователи могли ходить в интернет через шифрованный канал и имели доступ по протоколу передачи файлов (FTP - File Transfer Protocol).<br />
<br />
Делается это очень просто. Добавьте в файл 3proxy.cfg строки<br />
<br />
<i><b>socks -p1080</b></i><br />
<i><b>ftppr -p2121</b></i><br />
<br />
Таким образом мы запустили SOKCKS на порту 1080, а фтп на порту 2121<br />
<br />
П.С. Если кому что не понятно - спрашивайте в комментах, постараюсь помочь.</div>
PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com2tag:blogger.com,1999:blog-2892036751397318767.post-90008565099137671442011-05-08T11:13:00.007+04:002011-05-10T13:48:22.113+04:00PHP автоматическая конвертация в UTF-8 с автоопределением кодировки<div dir="ltr" style="text-align: left;" trbidi="on"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Tahoma; font-size: 13px;">Часто спрашивают как избавится от крякозябель, иероглифов, ромбиков и знаков вопросов вместо текста.</span><br />
<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Tahoma; font-size: 13px;">Меня всегда выручала эта функция на PHP которая переводит в UTF-8 кодировку любой текст, причем исходная кодировка определяется автоматически. Пользуйтесь. Может кому тоже будет полезна.</span><br />
<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Tahoma; font-size: 13px;"><br />
</span><br />
<i><b>mb_convert_encoding ($str, "UTF-8", mb_detect_encoding($str));</b></i><br />
</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-85400457868011373572011-04-15T17:49:00.000+04:002011-04-15T17:49:54.485+04:00Раздаем интернет в офисе или 3proxy Часть вторая - "Закручиваем гайки""<div dir="ltr" style="text-align: left;" trbidi="on">В этом посте я подробно остановлюсь на управлении каналом в интернет для пользователей 3proxy.<br />
Сервер 3proxy позволяет ограничивать как входящую так и исходящую скорость для авторизованных или всех клиентов сервера. Делается это так:<br />
<b><i>bandlimin 1000000 * 192.168.0.10</i> </b><br />
ограничиваем входящую скорость на уровне 1Мбит для клиента с ip 192.168.0.10<br />
<i><b>bandlimout 900000 * 192.168.0.10</b></i><br />
ограничиваем ему же исходящую скорость до 900Кбит/с<br />
<br />
Если кому-то наоборот нужно дать неограниченный по скорости канал, то делаем это так<br />
<i><b>nobandlimin * 192.168.0.11<br />
nobandlimout * 192.168.0.11</b></i><br />
<br />
Все вроде нормально: скорость ограничили, лимит трафика установили, а теперь продолжим закручивать гайки пользователям - запретим им посещение некоторых сайтов типа социалок и файл архвов, но прежде я расскажу еще об одной возможности.<br />
<br />
Чтобы не захламлять конфигурационный файл списком ip адресов, их можно вынести в отдельный текстовый файл, а в файле конфигурации вместо ip подставить ссылку на этот файл, например так:<br />
<i><b>$"С:\3proxy\users.txt"</b> </i><br />
причем ip адреса в текстовом файле должны идти друг за другом, без пробелов, а разделителем должна выступать запятая.<br />
<br />
Ну а теперь вернемся к ограничению просмотров сайтов. Создадим три файла: users.txt, admin.txt и ban.txt. В первый запишем список ip через запятую без пробелов всех пользователей кроме себя и своего друга. Во второй оставшиеся два ip. Файл ban.txt будет у нас содержать список запрещенных ресурсов. Ресурсы указываются через запятую, так же как и ip и представляют собой список слов. Если данное слово встречается в URL, то сайт блокируется для выбранных пользователей. Символ * означает любое количество любых символов до или после указанного слова, в зависимости от того, где она стоит, вначале или конце блокирующего слова. Я использую примерно такой список блокировки:<br />
<i><b>*sex*,*porn*,*adult*,*xxx*,*gamepark*,*vagina*,*mpp3*,*seks*,*virgin*,*pipisk*,*pastushka*,*1xuk.ru*,*teens*,*zaycev*,*lubovmorkov*,*mp3*,*bannerbank*,*yadro*,*dosug.nu*,*lesbo*,*lesbian*,*eroti*,*viporg.ru*,*intim*,*erohost*,*eross*,*teenfant*,*nudist*,*pimpserver*,*banner*,*ads.sup.com*,*rb.mail.ru*,*counter.rambler.ru*,*carol.ru*,*video.mail.ru*,*pelotka*,*akadostream*,*media.kino-govno.com*,*odnoklassniki.ru*,*vkontakte.ru*,*zhuki.mail.ru*,*fishki.net*,*dofiga.net*,*dating*,*deposit*,*rutracker.org*,*rapida*,*qip.ru*,*24video.net*,*letitbit.net*,*youtube.com*</b></i><br />
<br />
Довольно неплохо справляется с блокировкой порно и соц сетей, а так же различных depositfiles. Анализируя пару месяцев список посещаемых сайтов вашими пользователями вы сможете подкорректировать данный шаблон под свою организацию.<br />
<br />
Ну а теперь добавим сами правила в 3proxy.cfg<br />
<i><b>allow * $"C:\3proxy\admin.txt" * * * 1-7 00:00:00-23:59:59 <br />
deny * * $"C:\3proxy\ban.txt" <br />
allow * $"C:\3proxy\user.txt" * * * 1-7 00:00:00-23:59:59</b></i><br />
<br />
Параметры 1-7 00:00:00-23:59:59 означают с первого по седьмой день недели и с 00.00 до 23.59, т.е. всегда. При желании можно разрешить в обед проверить контактик и посмотреть порно))), но это я оставляю на ваше усмотрение.<br />
<br />
Вот собственно и все, что хотел я вам рассказать в этом посте. Как всегда жду комментов, а в следующих частях как и обещал мы поднимем еще SOСKS5 и ftp прокси, а так же почту, чтобы клиенты могли получать свои письма не через веб интерфейс, а почтовыми клиентами.</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com5tag:blogger.com,1999:blog-2892036751397318767.post-10771683657533613612011-04-06T19:48:00.005+04:002011-04-07T10:32:37.124+04:00Раздаем интернет в офисе или 3proxy Часть первая "Инсталляция"<div dir="ltr" style="text-align: left;" trbidi="on">Задача: <br />
В офис заходит витая пара с 2мбит'ным инетом. Необходимо его раздать на 10 машин. Так же хочется иметь возможность считать трафик по пользователям, устанавливать им лимиты, ограничивать скорость, трафик, запрещать некоторые сайты. Все компьютеры объединены в локальную сеть. Есть сервер с двумя сетевыми картами.<br />
Все это можно сделать разрешив использовать подключение к интернету для всех (расшарить подключение по локальной сети которое идет к провайдеру). Делается это следующим образом в WinXP выбираем Пуск-Сетевое окружение. В правой части окна нажимаем Отобразить сетевые подключения. Выбираем подключение, которое идет к провайдеру и нажимаем на нем правую клавишу мыши - Свойства. Переходим на закладку Дополнительно и отмечаем галочкой пункт Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера. Все.<br />
Из минусов - интернет мы конечно всем дали, но вот о никаком контроле и ограничении пользователей речи быть не может.<br />
Чтобы получить все плюшки, необходим прокси-сервер. Их существует великое множество (Squid, UserGate, CCProxy, 3Proxy). Все без проблем находятся поисковиком. Рассмотрим их немножко поподробнее:<br />
<b>Squid </b>- проект с открытыми исходниками, и бесплатный. Имеет версии под Windows и Linux. Позволяет очень гибко контролировать и управлять каналом в интернет. Из минусов - сложен в настройке, как и большинство программ портированных с Linux. Все делается через конфигурационные файлы и об интерфейсе вам придется тут забыть. Все ручками.<br />
<br />
<b>UserGate </b>- уже платное решение, но с удобным интерфейсом и не менее богатыми настройками чем вышеописанный прокси. Я не стал его даже устанавливать по той лишь причине что планируется перевод сервера на Linux и нет желания разбираться потом в другой программе и платить за него, зная что потом снесу тоже не хочется.<br />
<br />
<b>CCProxy </b>- идеальное решение, если вы не имеете опыта администрирования и настройки прокси. Все удобно и понятно, но возможностей мало, бесплатен только если им пользуется менее 10 клиентов и работает только под Windows<br />
<br />
<b>3proxy </b>- это то что нужно!!! Маленький (несколько килобайт), кросплатформенный, позволяет гибко управлять каналом, бесплатный, открыты исходники. Из минусов нет графического интерфейса для настройки, но это компенсируется тем, что все настройки делаются в одном файле, причем очень логично и не запутанно как в том же SQUID. Автор из России и с удовольствием помогает в официальном форуме программы.<br />
Выбор очевиден.<br />
<br />
Под сервер взят старенький комп в Windows XP. Решение не самое лучшее, но пока пойдет.<br />
Итак: <br />
<ol style="text-align: left;"><li>Идем на сайт http://www.3proxy.ru и скачиваем последнюю версию. Так же советую прочитать How-To(На русском) на сайте программы и многие вопросы отпадут сами собой.</li>
<li>Распаковываем скачанный архив в каталог например c:\3proxy</li>
<li>Создаем в каталоге файл c:\3proxy\3proxy.cfg. Это файл конфигурации прокси. Теперь настроить наш прокси-сервер. </li>
</ol>Открываем файл в блокноте и пишем следующие строчки:<br />
<i><b>monitor "с:\3proxy\bin\3proxy.cfg"</b></i><br />
Это чтобы в будущем изменения в настройках применялись сразу после сохранения файла конфигурации<i><b><br />
</b></i><br />
<i><b>internal 192.168.0.1<br />
external 82.209.xx.xx</b></i><br />
где после internal идет ip сервера в локальной сети, а после external ip выданный провайдером.<br />
Теперь укажем DNS сервера. Я использую сервера, которые бесплатно предоставляет Google. Вы можете использовать их же или указать сервера своего провайдера, тогда придется заменить 8.8.8.8 на первичный DNS сервер провайдера, а 8.8.4.4 на вторичный соответственно<br />
<i><b>nserver 8.8.8.8<br />
nserver 8.8.4.4</b></i><br />
<i></i><br />
<i><b></b></i><br />
укажем размер DNS кэша<br />
<i><b>nscache 1152000</b></i><br />
и разрешим кэширование DNS<br />
<i><b>dnspr</b></i><br />
<br />
Чтобы иметь статистику по пользователям скажем серверу чтобы вел логи по дням и хранил только последние 30 шт. Чтобы было проще потом их анализировать укажем формат записи логов такой же как использует прокси-сервер SQUID. Это даст нам возможность использовать любой лог-анализатор, который работает с squid<br />
<i><b>logformat "L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"</b></i><br />
<i><b>log С:\3proxy\logs\3proxy.log D<br />
rotate 30</b></i><br />
<br />
Теперь об авторизации на прокси. 3Proxy позволяет авторизовать клиентов по ip, логину/паролю или через Домен Windows (только для сервера на Windows). Мы будем использовать первый вариант.<br />
<i><b>allow * 192.168.0.1<br />
allow * 192.168.0.10<br />
allow * 192.168.0.11<br />
allow * 192.168.0.12 </b></i><br />
<i><b>deny *</b></i><br />
<br />
Вместо ip указываем ip своих машин которым нужен интернет и последней строчкой запрещаем интерет всем, кто не прошел авторизацию.<br />
<br />
Если вы хотите ограничить объем потребляемого трафика и иметь on-line статистику по количеству потребляемого трафика клиентами, то добавим следующие строчки:<br />
<i><b>counter "С:\3proxy\3proxy.3cf"</b></i> D "С:\3proxy\traf\traf"<br />
здесь мы создаем счетчики<br />
<i><b>countin "1/Server" M 50000 * 192.168.0.1 * * *<br />
countin "2/User" M 900000 * 192.168.0.10 * * *<br />
countin "3/User2" M 900000 * 192.168.0.11 * * *<br />
countin "4/User3" M 900000 * 192.168.0.12 * * *</b></i><br />
и устанавливаем лимиты пользователям, где М - это мегабайты, а цифры - собственно предел. Если просто хотите знать сколько клиеенты потребляют трафика, но не ограничивать его лимит, то укажите такой лимит, который они не выкачают.<br />
<br />
Указываем что мы используем авторизацию по ip<br />
<br />
<i><b>auth iponly</b></i><br />
и запускаем прокси на порту 3128<i><b> </b></i><br />
<i><b>proxy -p3128 -n -t</b></i><br />
Почти все. Еще немного и будем проверять, но прежде еще укажем настройки админки<br />
<i><b>admin -p8080</b></i><br />
Запускаем админку на порту 8080. Я сознательно пропускаю авторизацию для админки, сейчас в нее может попасть любой. После того как настройка будет закончена и все заработает позаботьтесь об авторизации сами или удалите вообще эти строки.<br />
Сохраняемся и закрываем файл.<br />
4. Открываем командную строку. Пуск-Выполнить пишем cmd и Ок.<br />
5. С трепетом в душе запускаем наш прокси командой.<br />
<i><b>c:\3proxy\3proxy.exe c:\3proxy\3proxy.cfg</b></i><br />
Если вы сделали что-то неправильно в конфигурационном файле, то программа вам сообщит ошибку и номер строки.<br />
6. Запускаем браузер и в его настройках устанавливаем галочку использовать прокси-сервер и указываем ip и порт. По моим конфигам это 192.168.0.1 и 3128 соответственно. Если вы что-то меняли, то подставьте свое.<br />
7. Проверяем работу сервера пробуя перейти на любой сайт. сли сайт открылся все ок.<br />
8. Идем в папку c:\3proxy\log и смотрим лог файл. Там должны появится записи о посещении нами веб сайта.<br />
Перейдя по адресу http://192.168.0.1:8080 мы попадаем в админку, в которой можно посмотреть счетчики трафика, содержимое конфига и запущенные службы.<br />
<br />
9. Если все работает устанавливаем 3proxy как сервис Windows и забываем про него. Для этого в командной строке пишем:<br />
C:\3proxy\<span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre;">3proxy.exe --install</span><br />
10. Перезагружаем компьютер и идем настраивать браузеры клиентов.<br />
<br />
В следующих частях я научу вас ограничивать скорость пользователям, мы запустим SOKS5 сервер, научимся пользоваться портмапингом, почтой за проксей, поднием ftp прокси и установим анализатор логов.<br />
<br />
</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com2tag:blogger.com,1999:blog-2892036751397318767.post-46361057540474992282011-04-02T10:50:00.001+04:002011-04-07T10:18:54.582+04:00Как быстро установить ОС+Софт на одинаковые системники<div dir="ltr" style="text-align: left;" trbidi="on">Любой сис.админ (а именно этим я сейчас и зарабатываю) часто сталкивается с такой проблемой.<br />
Начальство все-таки разорилось и закупило несколько новых системников для своего офиса. Вам, по должностным обязанностям необходимо установить и настроить на них весь софт и установить их на рабочие места.<br />
Устанавливать ОС, софт, производить настройку системы повторяя одно и тоже от компьютера к компьютеру бесит неимоверно. Вроде особо не напрягаешься, но в тоже время и отойти от них на долго не можешь. А если надо обновить еще несколько программы через интернет (привет Касперский с его огромными базами и Windows Update). У мня например свежая Windows 7 захотела еще обновлений на 600 Мб. И так можно продолжать еще долго...<br />
Есть несколько способов установить ОС и софт почти в автоматическом режиме:<br />
<br />
<ol style="text-align: left;"><li>Использовать установку по сети в сочетании с автоматической установкой программ</li>
<li>Создать образ диска одного компьютера сразу после всех установок и настроек и клонировать его.</li>
</ol><div>Первый вариант я отмел по двум причинам:</div><div><ul style="text-align: left;"><li>Мне пришлось все равно обновлять систему и тащить лишнее 600Мб для каждой машины, а этого делать не хотелось.</li>
<li>Для автоматической установки программ потребовалось бы написать скрипт, а это опять время, сэкономить которое и есть сия цель</li>
<li> Этот вариант требует DHCP сервер, который почему-то не захотел работать в моей сети (возможно конфликт с уже существующим и реально работающим DHCP сервером).</li>
</ul><div>Поэтому был выбран второй вариант, с созданием образа свеженькой системы и клонированием его на остальные машины (благо конфигурация у всех одинаковая).</div></div><div>Итак запустив установку Windows на первый компьютер с LiveCD я отправился искать бесплатную программу для клонирования жесткого диска. После просмотра программ из первой десятки выдачи гугла я остановился на <a href="http://clonezilla.org/">CloneZilla</a>.</div><div>CloneZilla - это созданный на основе ядра Linux загрузочный диск, который умеет создавать образ выбранного диска или просто клонировать винчестер. Плюсом является то, что возможно писать образ на USB винт или флешку, по протоколу SAMBA (Общие папки windows), NFS (Общие папки Linux).<br />
C официального сайта можно скачать как версию для LiveCD так и программу, которая создаст LiveUSB. Мне лично о душе второй вариант.<br />
<br />
Поскольку в моей сети уже работал файловый сервер на 2Тб, то я заливал образ именно на него. Настройки вполне логичные: указать ip машины и файлового сервера, удаленную папку для образа ну и всякие маски, шлюзы.<br />
<br />
Сделав клон свеженькой установленной и настроенной операционной системы (даже диски разбивать вручную не надо, если клонировать полностью диск) я приступил к установке Windows на остальные машины. Подключил их все к свитчу, загрузил по очереди с флешки и показал откуда брать образ для раскатки на диске. Примерно 10-15 минут ожидания и у меня уже готовый парк машин для дальнейшей установки по рабочим местам.<br />
<br />
П.С. Кто-то скажет что проще было-бы установить из сети, но во-первых у меня это не получилось из-за проблем с DHCP и второе, когда понадобится быстро переустановить ОС на одном из этих ПК, то это не займет у вам больше 10-15 минут. Я оценил это, когда комп передавался от одного сотрудника другому и надо было все почистить от старого.</div><div><br />
</div><div><br />
</div><div><br />
</div></div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-49592169293968240322010-11-27T18:35:00.002+03:002011-04-07T10:20:51.659+04:00Посоветуйте движок для фотоблога часть 2<div dir="ltr" style="text-align: left;" trbidi="on">Поиски CMS для фотоблога (см. <a href="http://psvlab.blogspot.com/2010/11/blog-post.html">первую часть</a>) так ни к чему хорошему и не привели, поэтому решил разработать собственную систему управления фотоблогом. Вот требования к функционалу:<br />
<ol><li>Минимум навыков для оформления шаблона страниц блога</li>
<li>Автоматический ресайз загружаемых фото</li>
<li>Галерея для просмотра фото на Java Script</li>
<li>Облако тэгов</li>
<li>Распределение фото по альбомам</li>
<li>Просмотр выбранных альбомов</li>
<li>Список последних загруженных фото</li>
<li>Возможность оставить комментарий под фото</li>
<li>Показ данных EXIF в случае их наличия в файле</li>
<li>Защита комментариев от спама с помощью каптчи</li>
<li>Возможность предварительной модерации комментариев перед публикацией их в блоге</li>
<li>Нанесение логотипа на фотки</li>
<li>RSS ленты для фото, комментариев, отдельных альбомов, комментариев к отдельным альбомам, комментариев к выбранным фотографиям</li>
</ol>В перспективе:<br />
<ol><li>Ипорт изображений из Picasa, Flickr, ВКонтакте, FaceBook</li>
<li>Элементарные операции по коррекции фоток</li>
</ol>Кому интересна данная тема и кто хотел бы попробовать мою CMS пишите комменты, бета-тестеры будут нужны<br />
<br />
П.С. На данный момент выполнены пункты 1-7, 9(работает пока не очень стабильно), 12</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com1tag:blogger.com,1999:blog-2892036751397318767.post-65605128284791929972010-11-07T16:31:00.001+03:002011-04-07T10:20:02.980+04:00Посоветуйте движок для фотоблога<div dir="ltr" style="text-align: left;" trbidi="on">В качестве оригинального подарка для своей девушки решил создать для нее личный(ее) фотоблог.<br />
<br />
<b><u>Почему не подходят готовые площадки для блогов:</u></b><br />
1.Использовать готовую площадку типа ЖЖ и ей подобным невозможно, поскольку сайт будет на собственном домене и хостинге (в ЖЖ возможность привязки домена платная, насколько я понимаю)<br />
2.Многие хотят повесить мне свою рекламу - я против. Может сам решу на пиво заработать, повесив Яндекс.Директ или Адсенс<br />
3.Очень скудные возможности по поводу редактирования шаблона. Нет возможности сделать "все по другому".<br />
<br />
<b>Из плюсов:</b> - не надо парится по поводу необходимого размера и нагрузки на хостинг. А в случае работы с фото - это очень важно.<br />
<br />
<b>Вывод: </b>использовать CMS<br />
<br />
<b><u>Требования к CMS:</u></b><br />
1.Маленькая и удобная<br />
2.Обязательно на <u>Русском </u>языке (чтобы ей было все понятно и меня лишний раз не дергали)<br />
3.Удобный шаблонизатор. Переделка верстки в шаблон CMS должна быть очень простой.<br />
4.Наличие таких модулей как: тэги, галерея, последнии 5 постов, возможность сжимать загружаемые картинки и модуль чтения и отображения EXIF данных фото.<br />
<br />
Joomla, Drupal - не подошли из-за своей громоздкости.<br />
ModX - почти то что надо, но многое надо допиливать.<br />
Pixelpost (pixelpost.org) - почти то что надо, но не понятно как создать свою тему, документации по этому поводу в рунете точно нет. Если бы к нему еще и русский интерфейс...<br />
<br />
В общем кто что еще посоветует??? Пока остановлюсь на Pixelpost.org</div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-49249806110083076172010-10-31T19:23:00.000+03:002010-10-31T19:23:47.439+03:00В Gmail появилась папка "Приоритетные"Сейчас заглянул в почту и увидел новость. Google сделала автоматическую сортировку писем по важности. <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDzN_gVuY_52-WsI6LCmz6FMG9IQaQjf5Psv2jtpOiYbZced-TKS1bymp7ODGLzbvK4twxvZ2AXjzDiv75mk4RzKUGz-ufqQBW1sNw1ru57sZ76ZWSncIOV4NFZiQtG5YWdnC_z3omMCFX/s1600/11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDzN_gVuY_52-WsI6LCmz6FMG9IQaQjf5Psv2jtpOiYbZced-TKS1bymp7ODGLzbvK4twxvZ2AXjzDiv75mk4RzKUGz-ufqQBW1sNw1ru57sZ76ZWSncIOV4NFZiQtG5YWdnC_z3omMCFX/s1600/11.JPG" /></a></div><br />
Чем больше вы переписываетесь с человеком или чем чаще среди новых писем выбираете именного этого адресата, тем выше рейтинг адресата.<br />
Другими словами появилась еще одна папка Приоритетные, в которую скидываются только важные письма.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-59033391859481639582010-10-10T17:32:00.000+04:002010-10-10T17:32:36.209+04:00Логотип сайта на картинкахЧасто возникает задача на картинках своего сайта печатать название сайта или помещать его логотип. Нижеприведенный код позволяет при закачке картинки на сервер рисовать в нижнем правом углу логотип.<br />
<br />
Нам понадобится:<br />
1. Библиотека GD2 (благо почти га всех хостингах она есть).<br />
2. Файл с самим логотипом logo.png (не забудьте сделать фон прозрачным)<br />
<br />
Собственно код:<br />
<pre class="brush: php">$uploaddir="../pic/"; //путь до каталога с картинками
$file_name="pic.jpg"; //имя файла с картинкой
$logo_h = getimagesize("logo.png");
//$logo_h = getimagesize(imagettftext("text"));
//если надо писать текст
$pic_h = getimagesize($uploaddir.$file_name);
$logo = imagecreatefrompng ("znak.png");
//$logo = imagettftext("text");
$pic = imagecreatefromjpeg ($uploaddir.$file_name);
//вычисляем координаты для размещения логотипа на картинке
imagecopy ($pic, $logo,
$pic_h[0] - $logo_h[0],
$pic_h[1] - $logo_h[1],
0,0,
$logo_h[0],
$logo_h[1]);
//сохраняем картинку с логотипом
imagejpeg ($pic, $uploaddir."new_".$file_name, "100");
//убиваем переменные
imagedestroy ($logo);
imagedestroy ($pic);
</pre>Готовые картинки сохраняются в том же каталоге, но с препиской new_ в начале имени файла.<br />
<br />
Данный код следует вставить перед загрузкой картинок и проверять. Если файла new_ нет, то запускаем этот код и генерируем картинку, иначе грузим из кэша. Проверить существование файла можно функцией:<br />
<pre class="brush: php">is_file("pic.jpg");
</pre>Или же рисуем логотип при закачке файла на сервер, но тогда надо добавить код, удаляющий оригинал. Например так:<br />
<pre class="brush: php">unlink("pic.jpg");
</pre>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com1tag:blogger.com,1999:blog-2892036751397318767.post-62790188609559144312010-08-28T10:34:00.001+04:002010-10-10T17:34:38.725+04:00PHP Как получить дату и время которая будетЕсли с тем как получить текущую дату и время проблем не возникает ни у кого. Например сделав это так:<br />
<pre class="brush: php">date("Y-m-d H:i:s");
</pre>То вот чтобы узнать время через N секунд, минут или дней у некоторых возникает проблема. Как решаю это я.<br />
<pre class="brush: php">date("Y-m-d H:i:s", mktime(date("H"), date("i")+15, date("s"), date("m"), date("d"), date("y")));
</pre>Прибавляя необходимое число дней, секунд или(и) минут мы сформируем заданную дату.<br />
H - это часы<br />
i - минуты<br />
s - секунды<br />
m - месяц<br />
d - число<br />
y - год<br />
<br />
В примере выше я получаю метку времени через 15 минут. Вот так, очень просто, получить время через N секунд, минут, дней.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-38862411460600341692010-08-19T21:29:00.000+04:002010-08-19T21:29:45.919+04:00Хвала Google DocsКак же удобно оказывается вести документацию по проектам в Google Docs!!! Пять минут назад из-за скачка напряжения вырубился комп. В это время я заполнял большую и сложную таблицу. Загрузил комп, открыл Firefox и вот передо мной снова мой документ, правда последняя редактируемая ячейка оказалось пустой, но не вся таблица же)))<br />
+1 корпорации добра)))PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-56594405339952460292010-08-15T10:48:00.000+04:002010-08-15T10:48:27.950+04:00Короткая заметка про мативациюВсем, кто работает дома (будь то работа над собственным проектом, фриланс или же просто удаленная работа) знакома такая проблема как мотивация себя на работу. Про это написано куча статей, но я хочу предложить еще один маленький способ который мне помогает.<br />
Итак. Время для работы есть, задач много, как их выполнить вы тоже знаете, но не прет работать и все. Как быть? <br />
1. Просто запустите среду разработки.<br />
2. Посмотрите что вы делали в прошлый раз и еще немного порадуйтесь, какой вы молодец, как круто реализовали эту фишку вчера.<br />
3. Выберите самую маленькую из нереализованных функций. Пусть это будет не мега класс, а простая функция в пять строчек.<br />
4. Возьмите и напишите ее.<br />
5. Обыгрывайте ее. Дополняйте код дополнительными функциями, необходимыми для реализации намеченного функционала.<br />
Самое главное это начать)))PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-18060203394880976612010-07-22T18:11:00.001+04:002010-07-22T18:16:56.164+04:00Подсветка кода в блогах на blogger.comЗахотелось сделать посты в своем блоге более привлекательными и юзабильными, поэтому и решил добавить подсветку в примерах кода.<br />
Изучение Google.com и проба нескольких решений привела к следующему результату.<br />
<b>SyntaxHighlighter</b> - это полнофункциональный самостоятельный скрипт подсветки синтаксиса (code syntax highliter) поддерживающий кучу языков, имеющий удобный небольшой тулбарчик с кнопками, позволяющими выводить исходник в отдельном окне, копировать его в буфер обмена или печатать. Теперь не надо после копи-паста удалять на каждой строчке лишние символы. Скрипт абсолютно мультиплатформенный и может работать в любом блоге хоть в WordPress, хоть в Joomla!, хоть в Blogger.com.<br />
Как же установить SyntaxHighlighter в свой блог на blogger.com.<br />
1. Заходим в админку своего блога.<br />
2. Нажимаем <b>Дизайн<b> - </b>Изменить HTML</b><br />
3. Перед закрывающим тэгом <b></head></b> добавляем вот такой код:<br />
<pre class="brush: html, js"><link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shCore.js' type='text/javascript'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushDelphi.js' type='text/javascript'/>
<script src='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Scripts/shBrushJScript.js' type='text/javascript'/>
<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
</pre><br />
C 5 по 9 строчку идет подключение подсветки необходимых языков. У меня это PHP, XML, C#, Delphi, JS. Для подключения дополнительных языков необходимо скопировать любую из этих строчек и изменить имя подключаемого файла на необходимое. Полный список поддерживаемых языков, их brush алиасов и файлов, необходимых для их подсветки, можно узнать на сайте <a href="http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/">alexgorbatchev.com</a>. <br />
<br><br />
4. Чтобы подсветка отображалась необходимо заключать куски кода в тэги <b><pre class="brush: html"></pre><br />
</b>, заменяя значение <b>html</b> свойства <b>brush</b> на алиас языка, синтаксис которого необходимо подсвечивать. Теперь все готово и должно работать. Стоит только обратить внимание,для того, чтобы всё корректно работало, необходимо внимательно следить, чтобы в исходниках, которые ты вставляешь в блог, символ "<b><</b>" был заменён на <b>"&lt;"</b>.PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0tag:blogger.com,1999:blog-2892036751397318767.post-75979181040588776472010-07-19T15:02:00.040+04:002010-07-19T16:25:19.117+04:00Обратный отсчет на Java ScriptПонадобилось установить на страницу счетчик который отсчитывает сколько времени осталось до истечения 15 минут.<br />
Не смотря на то, что в сети полно примеров, многие из них не комментированы и поэтому не понятны людям не сильно знакомым с JS (как я например).<br />
Собственно сам таймер.<br />
Место для вывода результата текстовое поле <br />
<pre class="brush: html"><table border="0"><tr> <td align="center"><font face="Arial"><strong>Осталось:</strong></font></td> <td align="center"><br />
<form name="d"><p><input type="text" size="8" name="d2"></p></form></td> <td align="center"><font face="Arial"><strong>минут!</strong><br />
</font></td> </tr>
</table></pre>собственно сам код скрипта<br />
<pre class="brush: js"><!--
/*Обратный отсчет*/
var seconds=0
var minutes=0
var min=14
var sec=0
document.timer.time.value='14:59'
function display(){
if (seconds>=60){
seconds=0
minutes+=1
min=14-minutes;
}
else
seconds+=1
sec=59-seconds
if (min>=0) {
document.timer.time.value=min+":"+sec
setTimeout("display()",1000)
}
}
display()
//-->
</pre>В этой строчке задается время отсчета в миллисекундах. При желании можно модифицировать код так, что он будет показывать обратный отсчет не минут, а допустим секунд с десятыми или сотыми долями. <br />
Для этого заменяем 1000 на 100 тут<br />
<pre class="brush: js">setTimeout("display()",1000)
</pre>А так же замените в коде все 14 на 29 и 59 на 9 или 99.<br />
<br />
<p><b>Внимание</b> Не стоит использовать этот код в таких случаях как задержка перед выполнением какого-то скрипта (аля rapida.com), т.к. данное значение легко подменить пользователем. Для решения подобной задачи используйте контроль времени на стороне сервера, а данный код просто для информирования пользователя</p>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com2tag:blogger.com,1999:blog-2892036751397318767.post-57578688248614975232010-04-10T19:44:00.002+04:002010-07-19T15:42:28.309+04:00Отправка почты с SSL шифрование (Indy 10 + Open SSL)Такие почтовые сервера как <a href="http://mail.google.com/">Google</a>, <a href="http://www.yahoo.com/">Yahoo</a> или <a href="http://www.msn.com/">MSN</a> требуют при авторизации на своих SMTP серверах использовать шифрование SSL.<br />
В данном посте я расскажу как отправлять почту из программ написанных на Delphi используя шифрование SSL.<br />
Нам понадобится:<br />
<ul><li>Indy версии 10, поскольку в нем добавлена возможность использования Open SSL (9 версия не подойдет). Я использовал версию 10.0.52 (взять можно <a href="http://www.indyproject.org/downloads/10/indy10.0.52_source.zip">тут</a>)</li>
<li>Пакет Open SSL, у меня стабильно заработал с версией 0.9.8h</li>
</ul><p><span style="font-size: large;"><b>Устанавливаем Indy 10.</b></span></p>Перед установкой необходимо удалить предыдущую версию Indy. Для этого идем по меню Component-Install Packages и удалем все со словом Indy.<br />
Следующим шагом распаковываем архив скачанный с сайта <a href="http://www.indyproject.org/">Indy</a><br />
Теперь необходимо добавить пути Library path. Для этого переходим по пункту Tools-Environment Options-Library и добавляем Library path пути к следующим папкам<br />
<ol><li>System</li>
<li>Core </li>
<li>Protocols</li>
<li>Super Core </li>
</ol><br />
Теперь открываем и компилируем пакеты в следующем порядке:<br />
<ol><li> пакет IndySystemX0.dpk (где X – это версия Delphi) (папка System)</li>
<li> пакет IndyCoreX0.dpk (где X- это версия Delphi) (папка Core)</li>
<li> пакет IndyProtocolsX0.dpk (где X – это ваша версия Delphi) (папка Protocols).</li>
<li>пакет IndySuperCore70.dpk (для Delphi 7) (папка Super Core)</li>
</ol><br />
Далее открываем и устанавливаем:<br />
<ol><li>пакет dclIndyCoreX0.dpk (папка Core)</li>
<li>пакет dclIndySuperCore70.dpk (папка Super Core) только для Delphi 7</li>
<li> пакет dclIndyProtocolsX0.dpk (папка Protocols)</li>
</ol><br />
Установка <b>Indy</b> завершена.<br />
<br><br />
<p><span style="font-size: large;"><b>Установка Open SSL.</b></span></p>Установка <b> </b>Open SSL не требуется. Все что необходимо, распаковать DLL библиотеки в каталог с проектом.<br />
<br><br />
<p><span style="font-size: large;"><b>Собственно отправка почты.</b></span><br></p>Кидаем на форму следующие компоненты:<br />
idMessage, idSMTP, IdSSLIOHandlerSocketOpenSSL<br />
<br />
Теперь пишем вот такой код:<br />
<pre class="brush: delphi">{формируем тело сообщения}
IdMessage1 := TIdMessage.Create;
IdMessage1.From.Address := Fromadres.Text;
IdMessage1.Recipients.EMailAddresses := Toadres.Text;
IdMessage1.Subject := UTF8Encode(subject.Text);
IdMessage1.Date:= now;
{настройка компонентов перед отправкой}
IdSMTP := TIdSMTP.Create(nil);
IdSMTP.Host:=ed_smtpserver.Text;
IdSMTP.Port:=ed_port.text; // обычно при использование ssl 495, 587 или стандартный 25
IdSMTP.Username:=login.Text;
IdSMTP.Password:=ed_.pass.Text;
IdSMTP.AuthType:=atDefault;
{это необходимо использовать для SSL}
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdSSLIOHandlerSocketOpenSSL.Destination := IdSMTP.Host+':'+IntToStr(IdSMTP.Port);
IdSSLIOHandlerSocketOpenSSL.Host := IdSMTP.Host;
IdSSLIOHandlerSocketOpenSSL.Port := IdSMTP.Port;
IdSSLIOHandlerSocketOpenSSL.DefaultPort := 0;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdSMTP.UseTLS := utUseExplicitTLS;
{отправляем письмо}
IdSMTP.Connect();
except
MessageBox(handle,pchar('ОШИБКА!!! Подключение к SMTP серверу не удалось'+#10+#13+
'Проверьте настройки программы, а так же не блокируется ли'+#10#13+
'порт SMTP сервера антивирусом или файреволом(брандмауэром)'), pchar(Mail.Caption), 48);
exit;
end;
IdSMTP.Send(IdMessage1);
Application.ProcessMessages;
IdSMTP.Disconnect;
</pre>на событие OnClose вешаем следующее:<br />
<pre class="brush: delphi">{очищаем память}
idMessage1.Free;
IdSSLIOHandlerSocketOpenSSL.Free;
idSMTP.Free;
</pre><div style="font-family: Times,"Times New Roman",serif;"><span style="font-size: x-small;"><span style="font-size: small;">Вот собственно и все. Жду ваших комментариев.</span> </span></div>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com10tag:blogger.com,1999:blog-2892036751397318767.post-32015428865813710702010-01-16T17:43:00.030+03:002010-04-10T18:30:23.275+04:00Управление проектами. Часть 1.<div class="separator" style="clear: both; text-align: left;">Я начинаю цикл статей о такой интересной теме, как управление проектами. Сейчас вспомнил одну цитатку:</div><blockquote>Без управления - нет попеды.</blockquote><div class="separator" style="clear: both; text-align: left;">И это относится ко всему, в т.ч. и к программированию. Какой бы грамотный код вы не создавали - без грамотного управления всем проектом вы в лучшем случае делаете много лишнего кода (работы). </div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Когда проектов всего один-два и над ними работаете полностью один вы, то вам вполне хватит папочки вот такой структуры:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><i>My project</i></div><div class="separator" style="clear: both; text-align: left;"><i> Source</i></div><div class="separator" style="clear: both; text-align: left;"><i> Setup</i></div><div class="separator" style="clear: both; text-align: left;"><i> Tools</i></div><div class="separator" style="clear: both; text-align: left;"><i> www</i></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">В папке <i>Source</i> храним исходники проекта, <i>Setup</i> - каталог для дистрибутивов каждой версии, <i>Tools</i> - дополнительные самописные утилиты (например скрипты сборки дистрибутивов или тестовые программки) и <i>www</i> - копия веб-сайта данного проекта.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Если проект коммерческий и требуется оказывать тех. поддержку своим клиентам, то для этой цели используется QIP + Web интерфейс почтовой службы.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Разберем минусы данного подхода:</div><br />
<div class="separator" style="clear: both; text-align: left;">Практически отсутствует контроль версий, если только вы не делаете резервных копий, в следствии чего невозможно откатится назад (или это очень тяжело сделать) в случае когда новые изменения привели к неработоспособности, написанного до этого, кода</div><ul><li>При большом количестве проектоов очень неудобно ими управлять</li>
<li>Нет доступа к проектам с другого компьютера, и как следствии отсутствии синхронизации при работе на нескольких компьютерах (можно конечно использовать флешки и внешнии USB HDD, но данный способ тоже ограничен)</li>
<li>Предоставить доступ к проекту для другого разработчика невозможно. (Совместная работат невозможна.)</li>
<li>Теряется история общения с клиентами (она или рассредоточена между несколькими машинами (например история переговоров в ICQ) или ее сложно систематизировать (много писем в почтовом ящике)</li>
</ul><div class="separator" style="clear: both; text-align: left;">Это только самые очевидные и часто встречающиеся проблемы. Выше указанный список может продолжить каждый сам.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Что нам надо?</div><ul><li>Удобное место хранения файлов проекта</li>
<li>Синхронизация проектов между различными машинами</li>
<li>Централизованное место для хранения истории общения с клиентами и оперативность ее получения</li>
<li>Ведения списка текущих задач</li>
<li>Ведение и учет исправлений ошибок в проекте</li>
</ul><br />
<div class="separator" style="clear: both; text-align: left;">Все выше описанное мы сможем получить, подключив к нашему домену проекта службы <a href="http://www.google.ru/">Google</a>. Подключив необходимые службы к своему домену мы становимся "владельцами собственного Googl'a" на своем сайте. Расскажу об этих службах поподробнее и о том чем они могут быть нам полезны:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrrDI3hupfWTtsEl3p22YlQQFfAw-dNJw32-UUu_CpgBS8OJfHe2M42oSjriqCjNV3Uq6-IUrx1hRZggf6ozqMOxSVjkaPRJKS0jrou3gamj8xUk1MY4-4TEK0i-R7MM4H_-D9Nk5vQ5h/s1600-h/google+Apps.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ps="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrrDI3hupfWTtsEl3p22YlQQFfAw-dNJw32-UUu_CpgBS8OJfHe2M42oSjriqCjNV3Uq6-IUrx1hRZggf6ozqMOxSVjkaPRJKS0jrou3gamj8xUk1MY4-4TEK0i-R7MM4H_-D9Nk5vQ5h/s640/google+Apps.bmp" /></a></div><a href="http://mail.google.com/">G-mail</a> - почтовая служба google. Предоставляет почтовый ящик практически неограниченного размера (более 7 Гб). Очень интересной особеностью является то, что все письма соединяются в цепочки и сортируются по Теме. Так ведя переговоры по какой-то теме, пусть даже и с разными людьми (например, с отделом закупок и бухгалтерией) - все письма окажутся в одной цепочке. Так же к любому письму можно приклеить Ярлык (своего рода тэги) и осуществлять поиск только по письмам с определенным <strike>тэгом</strike> Ярлыком. В завершение обзора этой службы нельзя не отметить очень качественный поиск писем и просто безупречную работу АНТИ-СПАМ фильтра. <br />
<br />
<a href="http://www.google.com/calendar/">Calendar</a> - он-лайн календарь для вашего проекта. Я например создал два календаря. В одном отмечаю текущие задачи по проекту для себя и во втором (открытом для других участников проектов) я отмечаю даты контрольных точек выполнения проектов и другую общую информацию<br />
<br />
<a href="http://www.google.com/talk/">G-talk</a> - обмен мгновенными сообщениями через Jabber сервер google. Что-то типа аськи, но может запускаться и как win32 приложение, а так же прямо в браузере. Позволяет не только переписываться, но совершать голосовые и видео звонки.<br />
<br />
<a href="http://docs.google.com/">Docs</a> - документы Google. Word, Excel, PowerPoint в стиле веб 2.0 Позволяют вести всю документацию без установки ПО Office на компьютере, совместно использовать (в том числе и редактировать) любые документы. Еще одним плюсом будет возможность скачать подготовленный файл в любом из форматов (pdf, OpenOffice, MS Office). C недавних пор Google Docs позволяет загружать не только файлы документов, а вообще любые файлы. Данная функция полностью решает проблему с хранение файлов проекта.<br />
Как же все это можно применить?<br />
В Excel ведем список задач разделив их на три листа (Добавить, Исправить, Доделать)<br />
В Word справочную и другую документацию по проекту.<br />
Новые (или промежуточные) версии компилируются координатором проекта и выкладываются в Документы Google<br />
<br />
<i>если интересно комментируйте, напишу продолжение </i>PSVlabhttp://www.blogger.com/profile/09613263424569289916noreply@blogger.com0