1 сентября 2017 г.

Thunerbird 52.3.0 & self signed certificate

Раньше оно как было?

При попытке подключиться к почтовому серверу с самоподписанным сертификатом Thunderbird ругался, предупреждал и давал возможность добавить сертификат в исключения.
Это можно было сделать как при подключении, так и при помощи менеджера сертификатов.



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

Но это было раньше. Вышло обновление 52.3.0 и пришел пушной зверек.

При попытке добавить исключение при подключении к серверу:



В соответствующем окне пропала кнопка Добавить исключение. И оно тупо информирует нас о том, что сертификат левый и все!

В менеджере сертификатов пропала возможность импортировать сертификат из файла. Ну просто тупо её выпилили.



А Добавить исключение показывает предыдущее окно, в котором таки нет кнопки Добавить исключение.

Таким образом, возникло ощущение, что Thunderbird решил бороться с самоподписанными сертификатами. Просто и незатейливо выпилив функционал добавления исключений в списки сертификатов.

Де%%$ы бл%#ь.

Приходиться удалять Thunderbird, ставить предыдущую версию и в ней добавлять исключения.

2 июня 2017 г.

pjsip и Билайн

Конфиг транка для модуля pjsip и билайна.
В некоторых местах вместо sip.beeline.ru написан IP этого сервера - 195.239.174.100
Это бжжжж не спроста. Если там писать имя сервера, дальше регистрации дело не идет. Подробнее об этом в предыдущем посту.

[Bi]
type=aor
qualify_frequency=60
contact=sip:195.239.174.100:5060

[Bi]
type=auth
auth_type=userpass
password=bigpassword
username=74955555555@sip.beeline.ru

[Bi]
type=endpoint
transport=0.0.0.0-udp
context=from-pstn
disallow=all
allow=g729,ulaw,alaw,gsm,g726,g723
aors=Bi
language=ru
outbound_auth=Bi
from_domain=sip.beeline.ru
from_user=74955555555
t38_udptl=no
t38_udptl_ec=none
fax_detect=no
t38_udptl_nat=no
dtmf_mode=auto

[Bi]
type=identify
endpoint=Bi
match=195.239.174.100

[Bi]
type=registration
transport=0.0.0.0-udp
outbound_auth=Bi
retry_interval=120
max_retries=10
expiration=3600
auth_rejection_permanent=no
contact_user=74955555555
server_uri=sip:195.239.174.100:5060
client_uri=sip:74955555555@sip.beeline.ru:5060

[0.0.0.0-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
external_media_address=83.10.10.10
external_signaling_address=83.10.10.10
allow_reload=yes
local_net=192.168.1.0/24

MTT vs Beeline

Не знаю, что я делаю не так, но не могу настроить sip от Beeline. Коннект проходит, но при разговоре голос слышно только с одной стороны. Да, я знаю про особенности sip и nat :) но... у конкурентов билайна все работает :)

Сначала пробовал на железяке: не работает.
Для проверки своей криворукости взял аккаунт у МТТ. У них все работает.
Тупо меняю в настройках sip.beeline.ru на voip.mtt.ru и... у билайна не работает, у  МТТ все летает.

Ладно, двойной NAT, все может быть. Настраиваю sip клиента на мобиле и вперед через LTE. У билайна не работает, у МТТ все пучком.

Объясняю ситуацию парням из билайна, в ответ рекомендации типа:
- отключите на роутере (микротик) модуль sip.
- вместо sip.beeline.ru пишите IP адрес.
Звиздец.

Ок, кручу астериск. У меня он на pjsip. Билайн же выпендривается, даёт логины типа 74955555555@sip.beeline.ru. Пока разобрался как в pjsip эти хитрые логины вбивать... Но вообщем зарегистрировался на сервере билайна. Регистрация проходит, а вот звонки вообще не того, не идут. Сразу после команды INVITE отваливаются, причем мой астериск им говорит, что они у нас не зарегистрированы. Единственное отличие INVITE от билайна и МТТ: у первого стоит мой внутренний IP (192.168.х.х), а у МТТ реальный IP роутера.

И что мне с этим делать?

P.S. Пока писал это пост, победил астериск. Добился соединения и звонка у билайна, но звук в одну сторону так и не ходит.
Как вы думает работает ли МТТ на астериске? Ага :) без проблем, звоню, общаюсь. Бугагашеньки.

12 апреля 2017 г.

javafx RowFactory или как я красил строки таблицы.

Задача тривиальная: в зависимости от значения в наборе данных, надо красить строку зелёненким цветом.
Примеров решений задачи в инете, вагон и маленькая тележка.

Обычно рекомендуют что то типа такого:

tableView.setRowFactory((row) -> {
            return new TableRow(){
                @Override
                public void updateItem(MainTable item, boolean empty){
                    super.updateItem(item, empty);
                    if (item == null || empty) {
                        setStyle("");
                    } else {
                        Iterator it = tableZakaz.getItems().iterator();
                        while (it.hasNext()) {
                            Long zakazIndex = it.next().getProductIndex();
                            Long pIndex = item.getIndex();
                            if ( Objects.equals(zakazIndex, pIndex) )   {
                                setStyle("-fx-background-color:lightgreen");
                            } 
                        }
                    }
                }
            };
        });

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

Решение, простое.

До вызова
super.updateItem(item, empty);
Сбросьте стили.

tableView.setRowFactory((TableView row) -> {
            return new TableRow(){
                @Override
                public void updateItem(MainTable item, boolean empty){
                    // Сначала обязательно сбрасываем стиль.
                    setStyle("");
                    // и только после этого вызываем метод super.updateItem
                    super.updateItem(item, empty);
                    if (item == null || empty) {
                        setStyle("");
                    } else {
                        Iterator it = tableZakaz.getItems().iterator();
                        while (it.hasNext()) {
                            Long zakazIndex = it.next().getProductIndex();
                            Long pIndex = item.getIndex();
                            if ( Objects.equals(zakazIndex, pIndex) )   {
                                setStyle("-fx-background-color:lightgreen");
                            } 
                        }
                    }
                }
            };
        });

17 марта 2017 г.

LXC error cpio: cap_set_file

Ндя, "Всё глыбже и глыбже." (с) не я

Собираю контейнер под FreePBX. И тут у меня вдруг не устанавливается апач из стандартных пакетов. Выдает ошибку: cpio: cap_set_file

Лечится явным прописыванием в конфиг файл контейнера параметров:
lxc.cap.drop = mac_admin mac_override
#lxc.cap.drop = setfcap
lxc.cap.drop = sys_module sys_nice sys_pacct
lxc.cap.drop = sys_rawio sys_time

Обратите внимание, что в глобальных параметрах, lxc.cap.drop = setfcap был определен. Если его не прописывать явно в конфиге, то все будет пучком.

LXC контейнер, systemd-journal грузит CPU на 100%

Ну вот, таки начал разбираться с LXC.
Базовая система Centos 7, контейнер Centos 7 и сразу бабах! CPU 100% на процессе systemd-journal. Контейнер не отзывается, и грохается жестко только через kill -9.

Проблема в закольцованном файле kmsg, который создается при запуске контейнера в директории rootfs.dev.
Лечится удалением ссылки из rootfs.dev и отменой записи сообщений ядра.

1. В конфигурационном файле контейнера config добавляем строку:
lxc.kmsg = 0. Он запрещает создание файла kmsg.

2. Директория rootfs.dev появляется только после первого запуска контейнера, поэтому у нас карма: контейнер надо убить. После этого удаляем файл ссылки kmsg.
Если вы не запускали контейнер, достаточно выполнение пункта 1.

Запускаем контейнер, все работает.

16 марта 2017 г.

Asterisk pjsip и Youmagic (MTT)

Взял тестовый номерок на YouMagiс. Решил через него астериск погонять. И тут выяснилось, что все примеры используют стандартный chan_sip или для FreePBX. А у меня pjsip стоит и рулю я ручками через конфиги:).
Вообщем в итоге получилось, вот так :

pjsip.conf
======================
[global]
type=global
; да, я даже freepbx заводил в виртуалке :) но не понравилось
; оно мне, часть конфига спер оттуда.
user_agent=FPBX-13.0.190.19(13.14.0)
default_outbound_endpoint=dpma_endpoint
; debug не понравился. Лучше tcpdump для отладки еще 
; ничего не придумали :)
;debug=yes

[dpma_endpoint]
type=endpoint
context=dpma-invalid

[0.0.0.0-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
; разумеется вместо 999 надо писать реальный IP роутера,
; за которым за натом стоит астериск
external_media_address=999.999.999.999
external_signaling_address=999.999.999.999
allow_reload=yes
local_net=192.168.0.0/24

; тут определены два внутренних телефона 100 и 101
; много текста не показано

;==== YouMagic =======================
; Предположим, что МТТ дали телефон, он же логин (хотя логин 
; при регистрации можно установить любой):
; 74990000000
; и пароль: хитрыйпароль

[reg_voip.mtt.ru]
type = registration
retry_interval = 20
max_retries = 10
contact_user = 74990000000
expiration = 120
transport = 0.0.0.0-udp
outbound_auth = auth_reg_voip.mtt.ru
client_uri = sip:74990000000@voip.mtt.ru
server_uri = sip:voip.mtt.ru:5060

[auth_reg_voip.mtt.ru]
type = auth
password = хитрыйпароль
username = 74990000000

[mytrunk]
type = aor
contact = sip:74990000000@voip.mtt.ru

[mytrunk]
type = identify
endpoint = mytrunk
; это IP MTT сервера
match = 80.75.132.66

[mytrunk]
type = auth
username = 74990000000
password = хитрыйпароль
;realm = voip.mtt.ru

[mytrunk]
type = endpoint
context = from-external
transport=0.0.0.0-udp
disallow = all
allow = ulaw
allow = alaw
rtp_symmetric = yes
rewrite_contact = yes
from_user = 74990000000
from_domain=voip.mtt.ru
; МТТ не может аутентифицироваться на нашем сервере
; поэтому не включаем аутентификацию при входящих с МТТ
;auth = mytrunk
outbound_auth = mytrunk
aors = mytrunk
=======================================================

extensions.conf
=====================================================
[others]

[from-internal]
exten => 100,1,Dial(PJSIP/100,20)
exten => 100,2,VoiceMail(100,u)

exten => 101,1,Dial(PJSIP/101,20)
exten => 101,2,VoiceMail(101,u)

exten => *98,1,VoiceMailMain(${CALLERID(num)},s)

exten => _810X.,1,Busy

exten => _8XXX.,1,NoOp("8xxx")
exten => _8XXX.,n,Dial(PJSIP/${EXTEN}@mytrunk)
exten => _8XXX.,n,Hangup

[from-external]
exten => 74990000000,1,Dial(PJSIP/100)
exten => 74990000000,n,Hangup
=======================================================

Разумеется, мой сервер за натом. И, разумеется, в фаерволе разрешены хождение пакетов и их проброс только с сервера МТТ.

14 марта 2017 г.

Проблема выбора.

Выбираю софт для группы IP телефонных станций. Щупаю Asterisk и FreeSWITCH .
Решил таки предложить использовать первый. Уж очень он легко и прозрачно конфигурируется :) Возможно FreeSWITCH надежнее и  быстрее, но блин, руками править XML - это жестоко. А мне ведь в будущем систему отдавать в обслуживание телефонистам старой закалки :) Там точно XML не пройдет.
Ну и FastAGI в мыслях держу.

З.Ы. Заодно разобрался с докером. Все думал, зачем оно мне надо, а тут "очень даже в дырочку". Сложная в установке система, при помощи докера великолепно распространяется на много машин. Мне понравилось.

З.З.Ы. lua - стоит изучать для конфигурации Asterisk? Или ну его на фиг, стандартными средствами обойтись можно?

9 марта 2017 г.

JavaFX и java.lang.nullpointerexception location is required

Написал тут программульку для копания в OpenLDAP. Локально из jar файла все работает великолепно. Решил раздавать ее коллегам правильно, через веб сервер. И тут началось:

java.lang.nullpointerexception location is required

Не грузит сволочь fxml файл.

Облазил все форумы, пробовал и через class.getClassLoader().getResource() и просто class.getResource(). Читаю документацию, указываю пути как надо, с учетом выбранного метода. Не работает хоть тресни.

А всего то, надо было подписать приложение... твою едрить через это самое...

11 февраля 2017 г.

Будни

На неделе пришлось импортировать базу из древнего Paradox приложения в MySQL. Оказывается этим однопользовательским чудом еще кто то активно пользуется.
Ну это, всякие бесплатные конверторы из парадокса в майскул (и не только в него) оказались полным отстоем. Платные я не пробовал, и не хотел пробовать. Разовый импорт данных должен быть бесплатным по определению :).
Попытка найти нормальный бесплатный драйвер Paradox для jdbc не увенчалась успехом. Покупать платный ... ну вы поняли. Поэтому написать свою программульку на java не получилось.
В результате пришлось искать инсталяшку Парадокса, открывать таблицы в нем и экспортировать данные в csv. Далее путем небольшого шаманства, типа конвертации типов данных, все успешно переехало в мускуль.

Теперь вот копаю JavaFX2. Потому как swing пометили как не кошерный :). Надеюсь на этой недельке выдать на гора нормальное многпользовательское приложение, что бы наши админы забыли весь ужОс работы с древним софтом.

31 января 2017 г.

А ещё

А ещё я работу поменял. Был строителем, стал химиком.
Еще один профессиональный праздник в копилку :)

Bash on Windows

Ну... это...

Но, однако...

art@ART-MSI:~$ /mnt/c/Windows/System32/notepad.exe 
bash: /mnt/c/Windows/System32/notepad.exe: cannot execute binary file: Exec format error 
art@ART-MSI:~$ /mnt/c/Windows/System32/cmd.exe /C dir 
bash: /mnt/c/Windows/System32/cmd.exe: cannot execute binary file: Exec format error 
art@ART-MSI:~$

А я уж думал начать на баше в винде скриптики писать :)

3 декабря 2016 г.

Вторая попытка покупки минителефона

Нужен второй маленький, простой телефон для корпоративной симки. Что бы не мешал жить и можно было на выходные оставлять в офисе (ибо в выходные меня нет ни для кого :) ).

Был у меня опыт покупки телефона Qumo CardPhone, размером с кредитную карту, вернул товар в магазин. Задумка отличная, качество плохого китая. В отзывах на яндексе я все про него написал.

И вот попытка номер два - Vphone S8 Smartphone.

Заинтриговала возможность получать по синезубу список контактов с основного андроид телефона. Да и цена привлекательная.
Заказал, доставили быстро, через почту Азербайджана :) Наши почту не из Китая обрабатывают без задержек (мне так кажется :) ).

Плюсы:

  • Очень маленький. Реально маленький. По размеру как часы. Специально сфоткал его на клаве ноутбука рядом с разъёмом от наушников.
  • Зарядку держит два дня.
  • Линк с основным телефоном по синезубу, с возможностью получения контактов с основного телефона.
  • Прикольный внешний вид.
Минусы:

  • Отвратительная поддержка русского языка.
    • Нельзя указать только те языки, которые ты хочешь использовать в работе. Для выбора русского языка приходится пролистывать список всех поддерживаемых языков, а он не маленький.
    • На виртуальной клавиатуре (эмулируется клава кнопочного телефона) русские буквы не появляются, приходиться догадываться где они должны быть.

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

  • Очень, очень тихий динамик. На улице при разговоре по нему ничего не слышно.
  • Модуль GSM при разговоре дает наводку на аналоговые цепи микрофона. Собеседник в своем телефоне переодически слышит тртртртр. Вы наверное клали свою мобилу рядом с какой нибудь акустикой? Вот такие же наводки передаются на другую сторону.
  • Нет возможности (или я не нашел как?) добавлять приложения. 
В итоге телефон был отдан дочке на убиение в школе. Интересно долго ли он там проживет? :)

11 июля 2016 г.

Португальцы

Ну вот так. Тихо, по краешку футбольного поля. Но смогли добраться до первого места. Браво. Не ожидал.
Вобщем то Португальцы ребята упорные. Я это понял когда живьем увидел сборную Португалии по регби 7.

18 февраля 2016 г.

server4you саппорт не фонтан

Может мне просто не везет, но у всех хостеров у которых я арендовал дедики, скорость реакции саппорта - это самое слабое место. Вот и у server4you.com та же проблема нарисовалась :(
Я конечно понимаю, что за премиум поддержку с моментальной реакцией надо платить денежку. Но... блин, второй час ожидания ответа от саппорта на элементарный запрос - это как то не комильфо.

Up. Прошло 9-ть часов, сервер лежит, проблема не решена.
Уже заказан сервер у другого провайдера, с server4you будем прощаться.

3 февраля 2016 г.

Опять :(

Нет, все же CentOS как рабочая станция не торт :( Приходиться много делать руками и через опу. Снес, поставил OpenSUSE, gnome.
Проблемы вызвал только VirtualBox. Как обычно не мог собрать модули ядра. Пришлось малость повозиться. Все остальные программы, которыми я пользуюсь, заработали "из коробки".
Как это не странно звучит, но не хватает Unity из убунту :)
Ну и заодно пощупаю btrfs.

30 января 2016 г.

Моя не есть это мочь...

На прошлом ноуте стоял ssd, все было прекрасно.
Купил новый ноут без ssd, с прицелом на добавление в него ssd. Но грянул кризис и меня задавила жаба.
Жаба давила долго, очень долго. Но сегодня я не выдержал, выкинул жабу в окно и таки купил 256ГБ mSATA Plextor.
Все вокруг снова прелестно!

23 января 2016 г.

Касперский Фри

Тестирую на знакомых бесплатный антивирус от Касперского. Неожиданный продукт. Точнее, не ожидал от Касперского такого аттракциона невиданной щедрости :). Вообще то у меня есть мысли почему появился этот продукт, но они относятся к области теории заговора. Поэтому озвучивать их не буду.
По сути, в большинстве случаев нужен только антивирус и не просто бесплатный, таких хватает, а от известной марки. И тут - Бац! Касперский фри. Надеюсь, что рекламных объявлений не появиться :) 

23 декабря 2015 г.

Отпуск!

По давно сложившейся традиции за неделю до конца года беру недельку отпуска.
Работа - встретимся в следующем году :)