-
-
Save b2whats/b3611fd12230e7d63501 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*eslint-disable no-console, radix*/ | |
import webpack from 'webpack'; | |
import path from 'path'; | |
import writeStats from './writeStats'; | |
import ExtractTextPlugin from 'extract-text-webpack-plugin'; | |
import CleanPlugin from 'clean-webpack-plugin'; | |
import autoprefixer from 'autoprefixer-core'; | |
import webpackStripLoader from 'strip-loader'; | |
import { host, webpackPort, buildDir } from '../config'; | |
const argv = require('minimist')(process.argv.slice(2)); | |
const DEBUG = !argv.production; | |
const notExclude = [].join('|'); | |
const EXCLUDE_JS = notExclude !== '' ? new RegExp('node_modules/(?!' + notExclude + ')') : new RegExp('node_modules'); | |
const JSX_LOADER = DEBUG ? ['react-hot', 'babel'] : [webpackStripLoader.loader('console.log'), 'babel']; | |
const CSS_LOADER = ExtractTextPlugin.extract('style', 'css?modules&importLoaders=1&localIdentName=[name]-[local]!postcss'); | |
const AUTOPREFIXER_BROWSERS = [ | |
'Android 2.3', | |
'Android >= 4', | |
'Chrome >= 20', | |
'Firefox >= 24', | |
'Explorer >= 8', | |
'iOS >= 6', | |
'Opera >= 12', | |
'Safari >= 6' | |
]; | |
const PLUGINS = [ | |
DEBUG && new webpack.HotModuleReplacementPlugin(), | |
DEBUG && new webpack.IgnorePlugin(/\.json$/), | |
!DEBUG && new CleanPlugin(['build'], path.resolve(__dirname, '..')), | |
!DEBUG && new webpack.DefinePlugin({ | |
'process.env': { | |
NODE_ENV: JSON.stringify('production') | |
} | |
}), | |
!DEBUG && new webpack.optimize.DedupePlugin(), | |
!DEBUG && new webpack.optimize.UglifyJsPlugin({ | |
compress: { | |
warnings: false | |
} | |
}), | |
new ExtractTextPlugin('[name]-[chunkhash].css', {allChunks: true, disable: DEBUG}), | |
new webpack.optimize.OccurenceOrderPlugin(), | |
new webpack.NoErrorsPlugin(), | |
new webpack.DefinePlugin({ | |
__CLIENT__: true, | |
__SERVER__: false, | |
__DEVELOPMENT__: DEBUG ? true : false, | |
__DEVTOOLS__: false | |
}), | |
function write() { | |
this.plugin('done', stats => { | |
let type = DEBUG ? 'dev' : 'prod'; | |
writeStats.call(this, stats, type); | |
}); | |
} | |
]; | |
const config = { | |
devtool: DEBUG ? 'eval-source-map' : 'source-map', | |
entry: { | |
'main': ['./src/client.js'].concat(!DEBUG ? [] : [ | |
`webpack-dev-server/client?http://${host}:${webpackPort}`, | |
'webpack/hot/only-dev-server' | |
]) | |
}, | |
cache: DEBUG, | |
debug: false, | |
output: { | |
path: buildDir, | |
filename: 'client.js', | |
publicPath: DEBUG ? `http://${host}:${webpackPort}/webPackDevServer/` : './' | |
}, | |
module: { | |
loaders: [ | |
{ test: /\.(jpe?g|png|gif|svg)$/, loader: 'file' }, | |
{ test: /\.jsx?$/, exclude: EXCLUDE_JS, loaders: JSX_LOADER}, | |
{ test: /\.json$/, loader: 'json-loader' }, | |
{ test: /\.css$/, loader: CSS_LOADER } | |
] | |
}, | |
postcss: [autoprefixer(AUTOPREFIXER_BROWSERS)], | |
resolve: { | |
modulesDirectories: ['src', 'node_modules'], | |
extensions: ['', '.json', '.js', '.jsx'] | |
}, | |
plugins: PLUGINS.filter(plugin => plugin !== false) | |
}; | |
export default config; |
============ Vim =============
Включить номера строк
echo "set number" >> ~/.vimrc или разовое использование при редактировании файла :set number
дублировать текущую строку
y+y или Y - скопировать текущую строку
p - вставить после текущей строки
Р - вставить до текущей строку
Отмена предыдущего действия
u
Отменить отмену
ctrl+R
Удалить текущую строку
dd или S но сразу перейти в режим редактирования
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Иногда пробел в начале строки может обозначаться - неразрывным пробелом. И функция trim работать не будет. Исправляем :
trim($строка,chr(160));
При ручном написании русских символов в строке браузера, некоторые браузеры не кодируют автоматически эту строку и отправляют ее на сервер прямо как есть с русскими символами. На сервере она не будет нормально определяться и будут каракули. Видел это в ИЕ.
Мы через регулярки берем исходную строку и проверяем передана ли она в utf8 если нет то перекодируем
if (!preg_match('//u', $_GET['q'])) {
$_GET['q'] = iconv('Windows-1251', 'utf-8', $_GET['q']);
}
В кодировке UTF8 Это работать не будет, нужно :
chr(194).chr(160)
===Postgres===
/etc/init.d/postgresql status
/etc/init.d/postgresql start
/etc/init.d/postgresql stop
Создать последовательность:
CREATE SEQUENCE carmodel.carmodel_id_seq
START WITH 11528
Получить последнее значение последовательности(инкремент):
SELECT nextval ('shipments_ship_id_seq')
Получить текущее значение последовательности(возвращается массив последовательностей)
select * FROM brandcar_id_seq
Получить следующее значение последовательности не перенося инкремент
select last_value FROM brandcar_id_seq
Задать максимальное значение последовательности по максимальному ид
select setval('country_id_seq', (select max(id)+1 from country));
Добавить автоинкремент у колонки
ALTER TABLE carmotor ALTER COLUMN id SET DEFAULT nextval ('carmotor_id_seq');
Сортировать по колонке вне зависимости от регистра букв
order by lower(col_name)
Дамп базы
pg_dump -U toolfinddbman -F p -f dump.tar.gz pgdatabase
-U - пользователь который имеет доступ к базе данных
-F - формат дампа tar.gz
-f - имя дампа
Последним указываем имя базы данных
pg_dump -h localhost -U postgres -F p -t manufacturers -f /tmp/man.sql tool_find_catalog
выкладываем текстовый дамп
cat /tmp/ma.sql | psql -h localhost -U postgres tool_find_catalog
Удаляем старый кластер базы данных
pg_dropcluster --stop 9.1(версия кластера) main(имя кластера, получить можно pg_lsclusters)
Создаем новый кластер
pg_createcluster --locale de_DE.UTF-8 --start 9.3 main
Обновить постгрес
Скачиваем новую версию
apt-get install postgresql-9.3 postgresql-client-9.3
Далее останавливаем работу кластера
service postgresql stop main 9.4
и далее
su -l postgres
/usr/lib/postgresql/9.3/bin/pg_upgrade
-b /usr/lib/postgresql/9.1/bin
-B /usr/lib/postgresql/9.3/bin
-d /var/lib/postgresql/9.1/main
-D /var/lib/postgresql/9.3/main
-o " -c config_file=/etc/postgresql/9.1/main/postgresql.conf "
-O " -c config_file=/etc/postgresql/9.3/main/postgresql.conf "
-c
Если все окей то убираем ключ -с
и выполняем. Локали у кластеров должны при этом совпадать
При создании функций все строковые данные нужно заключать в двойные одинарные кавычки ''ххх''
Что бы сменить тип колонки в базе данных с текстового на числовой нужно :
ALTER TABLE articles
ALTER COLUMN manufacturer TYPE integer -> На какой тип меняем
USING manufacturer::integer; -> Преобразовываем значения
Update таблицы по другой таблице
UPDATE
tof_art_lookup as t1
SET
arl_bra_id = ta.art_sup_id
FROM
tof_art_lookup as tal
LEFT JOIN
tof_articles as ta
ON
tal.arl_art_id = ta.art_id
where t1.arl_id = 2 and t1.arl_id = tal.arl_id
В условии Where обязательно указываем обновляемую таблицу и связываем ее строки с таблицйей из которой берем данные
Поиск по массиву
select * from autorepair where services @> '{3}'::integer[]
select * from autorepair where services @> array[1]
select * from autorepair where 11 = ANY (services);
Обновить JSON поле
SELECT service::text, regexp_replace(service::text, E'("type"[\s]:)([\s"][0-9][\s"])', concat('\1','"fef"'))::json
FROM ag_company;
Поиск по множеству значений
select * from autorepair where services && array[1]
Некая организация left join в массиве
select *,(select string_agg(service,',') from autorepair_service where id in(select * from unnest(services))) from autorepair where services && array[11]
Наименование баз данных
Наименование таблиц.
Порядок слов идет от общего к частному, от сущности к свойствам. Т.е. «Бумага туалетная», вместо «Туалетная бумага», «Огурцы маринованные», а «Паста томатная».
Первое слово это группа таблиц которые могут быть связаны, разделитель подчеркивание, второе слово это название таблицы
Нименование колонок.
Именуем единичным словом, если колонка указывает на связь с другой таблицей то называем ее:
ИмяТаблицы_ИмяСтолбцаДляСвязи, группу к которой принадлежит данная таблица мы опускаем. И так понятно что все связные данные будут пренадлежать таблицам из одной группы. Если же все таки мы должны связать ячейку с данными не из таблицы из одной группы, то в названии в начале через подчеркивание мы пишем эту группу
Рекурсивный обход дерева, в запросе до Union составляем начальную строку с которой начинаем обход, после юнион идет запрос который конкатенирует данные в цикле, 3 запросом выводим получившееся дерево. Вариант с выявлением последних пунктов дерева
WITH RECURSIVE tree_r ( id,parent,name,PATH_ID,PATH_NAME, LEVEL, LAST ) AS (
SELECT t1.id,t1.parent,t1.name, CAST (t1.id AS VARCHAR (250)) as PATH_ID,CAST (t1.name AS VARCHAR (250)) as PATH_NAME, 1, CASE WHEN (SELECT count(id) FROM tree where parent = t1.id) > 0 THEN 0 ELSE 1 END as LAST
FROM tree t1 WHERE t1.parent IS NULL
union
SELECT t2.id,t2.parent,t2.name, CAST (tree_r.PATH_ID ||','|| t2.id AS VARCHAR (250)) as PATH_ID,CAST (tree_r.PATH_NAME ||','|| t2.name AS VARCHAR (250)) as PATH_NAME, tree_r.LEVEL + 1, CASE WHEN (SELECT count(id) FROM tree where parent = t2.id) > 0 THEN 0 ELSE 1 END as LAST
FROM tree t2 INNER JOIN tree_r ON (tree_r.id= t2.parent) AND EXISTS (SELECT count(id) FROM tree where parent = t2.id)
)
select * from tree_r order by id asc
===UPSERT ===
WITH upd AS (
UPDATE ag_autoservice
SET brand__id = '{1,6}'
WHERE company__id = 20402
RETURNING company__id
)
INSERT INTO ag_autoservice(company__id, brand__id)
SELECT 20402, '{64}'
WHERE NOT EXISTS (SELECT * FROM upd)
Собираем json в постгресе
given:
serial | name | type
847001 | t15 | GE1043
847002 | t16 | GE1043
847003 | sub-alpha | GESS90
I want to produce:
{ "turbines" :
{
847001 : { "name" : "t15", "type" : "GE1043" },
847002 : { "name" : "t16", "type" : "GE1043" },
847003 : { "name" : "sub-alpha", "type" : "GESS90" }
}
}
select json_build_object("turbines",
json_object_agg(serial, json_build_object("name",name,"type",type)))
from mytable;
INSERT в хранимых процедурах можно описать как общий запрос с помощью WITH и вернуть данные этого инсерта в виде таблицы(двойной инсерт)
WITH ins as (
insert into articles_link (la_ga_id,la_sort,articles_info_id,rel_id) SELECT la_ga_id,la_sort,group_detail,id
....
RETURNING id,la_ga_id,la_sort,articles_info_id,rel_id), ins2 as (
insert into tof_link_la_typ (lat_ga_id,lat_sort,modifications_id,articles_link_id,lat_sup_id) select llt.lat_ga_id,llt.lat_sort,llt.modifications_id,al.id,llt.lat_sup_id from ins al left join tof_link_la_typ llt on llt.articles_link_id =al.rel_id RETURNING lat_id
)
select * from ins2
Данные по выполнению запросов можно взять
http://www.postgresql.org/docs/8.3/static/plpgsql-statements.html
Сбросить пароль пользователя postgres
psql -U postgres
ALTER USER postgres with password 'autogiperpostgres';
=================PHP====================
Статическая переменная класса в двойных кавычках
echo "self::$var"
echo "{self::$var}"
echo "{${self::$var}}" работать не будет.
Единственный верный выход написать статическое свойство в двойных кавычках это передать через вторую переменную название класса.
$class = get_called_class();
echo "$class::$var"
============ MYSQL ============
О первичном ключе
Если делаете поле с auto_increment, то объявляйте его первичным ключом, иначе
Incorrect table definition; there can be only one auto column and it must be defined as a key
Что бы добавить в выборке данные из другой таблицы следует восспользоваться LEFT JOIN
SELECT * FROM company_subscription LEFT JOIN (SELECT DISTINCT(user_id), code FROM
company_subscription_codes
) AS t_codes ON t_codes.user_id = company_subscription.company_idЧто бы искать строку со специальными символами в таблице, нужно ее экранировать или заключить в двойные кавычки и тогда символы | <> -+= будут частью строки
Вывести материалы за определенную дату
SELECT * FROM table where date_format(
col_date
, '%Y-%m-%d' ) = '2014-03-16';Динамический запрос в процедуре mysql
DELIMITER //
CREATE DEFINER=
root
@%
PROCEDUREgetCountry
(INlocale
char(2))LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SET @Sql = CONCAT('SELECT * FROM country_', locale);
PREPARE getCountrySql FROM @Sql;
EXECUTE getCountrySql;
DEALLOCATE PREPARE getCountrySql;
END
DELIMITER ;
Бенчмарк
SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
==========Debian=============
Добавить переменную в окружение (временно)
PATH=$PATH:/usr/lib/postgresql/9.3/bin
export PATH
export PGDATA="/var/lib/postgresql/data"
Создать симлинк
ln -s /usr/lib/postgresql/9.3/bin/initdb initdb
chown -h user:group /home/symlink-to-opt-dir
Инициализировать кластер
initdb --locale=ru_RU.UTF-8 --lc-collate=ru_RU.UTF-8 --lc-ctype=ru_RU.UTF-8 --encoding=UTF8 -D /var/lib/postgresql/data
Посмотреть сколько места на диске занимают папки
du --max-depth=1 --si / - косая черта папка в которой смотреть
Посмотреть сколько места на диске
df -aHT
Кто сидит на портах
netstat -tpln | grep "tcp"
Вернуть закрытую через ctrl + z задачу
fg
Установить форвардинг портов без сервера с помощью rinitd
в /etc/rinetd.conf добавить
0.0.0.0 порт 0.0.0.0 порт
порт на локальной машине который слушается, порт куда направляем
Поменять у папки пользователя
sudo chown
whoami
:whoami
-R /home/w/.npm===========WEB DAV & CURL===============
Подключение
curl --digest -u webdav:documents
Получить файл с сервера -o(output)
curl --digest -u webdav:documents http://doc.toolfind.ru/fff -o /home/s/sandry/sandry.bget.ru/public_html/tool/ddd
Создать новую папку
curl --digest -u webdav:documents -v -X MKCOL http://doc.toolfind.ru/Имя папки
http://italiangrid.github.io/storm/documentation/webdav-guide/3.0.0/
================WORKER Supervisor ===============
обновление конфигов всех приложений, без перезапуска
supervisorctl reread
перезапуск приложений для которых обновился конфиг
supervisorctl update
Управление процессом
/etc/init.d/supervisor stop
/etc/init.d/supervisor start
/etc/init.d/supervisor status
===============SPHINX=====================
подключиться через консоль(Указывать порт что стоит в конфиге в строке listener)
mysql -h 127.0.0.1 -P 9306
==============JAVASCRIPT======================
При присваивании обработчиков событий в виде функций мы должны опускать круглые скобки. Они указывают на то что функция выполняется и возвращает нам значение. Без них, мы передаем тело финкции а нее ее вывод.
Функция должна быть присвоена как sayThanks, а не sayThanks():
document.getElementById('button').onclick = sayThanks;
Если добавить скобки, то sayThanks() — будет уже результат выполнения функции (а так как в ней нет return, то в onclick попадёт undefined). Нам же нужна именно функция.
ssh [email protected] 'pg_dump -h localhost -U postgres -F p -t
manufacturers tool_find_catalog' > ddd
Сделать дамп с виндоса
==================VirtualBOX=====================
Проброс портов
В самом начале делаем физические адреса нашим машинам и делаем их статическими
Вторым шагом забиваем эти адреса в роутере
=================Ansible===========================
=======================RabbitMQ=============================
Создать очереди через консоль
rabbitmqadmin declare exchange --vhost=/ name=parser type=fanout
rabbitmqadmin declare queue --vhost=Some_Virtual_Host name=some_outgoing_queue durable=true
rabbitmqadmin --vhost=/ declare binding source=parser destination_type=queue destination=parser_price routing_key=price
Создать юзера и установить мэнеджеры
rabbitmqctl add_user example example
rabbitmqctl set_user_tags example administrator
rabbitmqctl set_permissions -p / example "." "." ".*"
rabbitmq-plugins enable rabbitmq_management
wget http://95.213.182.170:15672/cli/rabbitmqadmin
chmod 777 rabbitmqadmin
mv rabbitmqadmin /usr/bin
========Chrome=========
Развернуть все вложенные узлы - Ctrl + Alt + Click
========Vagrant=========
vagrant up
vagrant halt
=======================Npm========================
Установить пакет из git
git://github.com/monstrs/markdown-it-traverse.git
===================Git=========================
git config --global user.email "[email protected]"
git config --global user.name "W"
Перенести изменения с одной ветки на другую
git stash
git checkout master
git pull
git checkout -b feature/название-твоей-ветки
git stash apply
rebase
https://htmlacademy.ru/blog/27
Добавить в коммит все измененные файлы
git add -u
Удалить папку из гита после коммита
git rm .idea/ -r --cached