суббота, 9 июня 2018 г.

Macbook prod wifi: не аппаратного обеспечения

Решение:

1) Отключить Wi-Fi.
2) Перейти в папку /Library/Preferences/SystemConfiguration/.
3) Удалить файлы:
com.apple.airport.preferences.plist
com.apple.network.eapolclient.configuration.plist
com.apple.wifi.message-tracer.plist
NetworkInterfaces.plist
preferences.plist
4) Выключить Macbook
5) Включить Macbook

Именно выключить, а потом включить. Перезагрузка не поможет.

понедельник, 16 апреля 2018 г.

Установка Dante в Centos

## Добавляем репозиторий:
yum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm

## Включаем репу и устанавливаем dante-server
yum --enablerepo=gf-plus install dante-server

## Разрешаем автозагрузку сервиса
systemctl enable sockd.service

## Создаем рабочую папку
mkdir /var/run/sockd

## Забэкапим оригинальный конфиг
mv /etc/sockd.conf /etc/sockd.conf.orig

## Создаем конфиг, прокси будет слушать на порту 443
cat >> /etc/sockd.conf << 'EOF'
user.privileged: root
user.unprivileged: nobody

internal: eth0 port = 443
external: eth0

logoutput: syslog stdout /var/log/sockd.log
errorlog: /var/log/sockd_err.log

socksmethod: username

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: connect udpassociate
    log: error
}
EOF


## Стартуем сервис
systemctl start sockd.service

## Правило для фаервола
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="ваш_внешний_ip/32" port protocol="tcp" port="443" accept"


## Добавляем пользователя
useradd -s /sbin/nologin -d /dev/null sock

## Указываем пароль
passwd sock 
 

суббота, 14 апреля 2018 г.

Оптимизация sql запросов

Оптимизация - это всегда компромисс. Преждевременная оптимизация иногда хуже чем полное отсутствие. Но иногда лучше иметь список возможных улучшений, чтобы их проверить, чем выдумывать их.
1. Выборка по первичному ключу самая быстрая.
select id, name from client where id in (1,2,3,4)
Такой запрос самый быстрый, НО если кол-во id слишком большой получим обратны эффект. Наша задача уменьшить объем передаваемых данный как от mysql до php, так и обратно. Так что этой техникой надо пользоваться очень аккуратно.

2. Есть одна особенность связанная с сортировкой и yii1.
select id, name from client inner join (select client_id, max(created_at) as created_at from worksheet group by client_id) w on w.client_id = client.id order by w.created_at desc
Проблема в том, что для запроса select count(*) from client не нужен подзапрос  select client_id, max(created_at) as created_at from worksheet group by client_id . Он даже для выборки не нужен, потому что при наличии фильтра по client.id, подзапрос будет тормозить. Правильнее переписать запрос так
select id, name from client order by (select max(created_at) from worksheet where worksheet.client_id = client.id) desc
3. exists работает медленее чем объединение, но для фильтрации он предпочтительнее так как ведет себя более стабильнее для yii1
select id, name from client inner join worksheet on worksheet.client_id = client.id where worksheet.type = 1
такой запрос отлично можно оптимизировать добавив индексы, но он не подходит для построения списка клиентов и лучше использовать exists, пусть и с большими потерями
select id, name from client where exists(select 1 from worksheet where worksheet.client_id = client.id where worksheet.type = 1)
4. Использование функций в секции where. Запрос
select id, name from client where year(created_at) = 2018
лучше переписать так
select id, name from client where created_at between '2018-01-01 00:00:00' and '2018-12-31 23:59:59'
так можно задействовать индекс по полю created_at. С функций year такого добиться не получится. Можно конечно начать использовать вычисляемые поля и индексы по ним, но по мне это излишество


четверг, 15 февраля 2018 г.

Настройка dnsmasq для локальной разработки

Устанавливаем dnsmasq
sudo apt install dnsmasq -y
Добавляем адрес локального dns сервера в /etc/resolv.conf
nameserver 127.0.0.1
Если ip номер получаем от dhcp, файл /etc/resolv.conf будет пересоздан при подключении к сети. Добавляем в /etc/dhcp/dhclient.conf строчку
prepend domain-name-servers 127.0.0.1;
Настраиваем сам dnsmasq через файл /etc/dnsmasq.conf, чтобы домены *.local резолвились как 127.0.0.1
address=/.local/127.0.0.1

Чтобы домены *.warehouse.local резолвились как 127.0.0.1, добавляем в файл /etc/dnsmasq.conf строку
address=/.warehouse.local/127.0.0.1
Перезагружаем dnsmasq
sudo service dnsmasq restart
Редактируем файл /etc/nsswitch.conf чтобы заработал Firefox
hosts:          files dns mdns4_minimal [NOTFOUND=return]