Сжатие JS-файлов

Для создание одного js-файлай из нескольких можно использовать утилиту от Google — Closure Compiler

  1. устанавливаем Java Runtime Environment version 7, если у Вас её нет
  2. Скачиваем файл compiler.jar
  3. Распаковываем в папку например e:\compressionjs
  4. Для примера создаем в этой папке js — файл (например simple.js)
1
2
3
4
5
// A simple function.
function hello(longName) {
  alert('Hello, ' + longName);
}
hello('New User');

5. Выполняем команду java -jar compiler.jar —js sample.js —js_output_file hello-compiled.js

Примечание: Если нужно по всей папке собрать, то можно выполнить java -jar compiler.jar —js=»*.js» —js_output_file hello-compiled.js

Подробнее о командах можно узнать java -jar compiler.jar —help

Закрыть окно merge_msg

It’s not a Git error message, it’s the editor as git uses your default editor.

To solve this:

  1. press «i»
  2. write your merge message
  3. press «esc»
  4. write «:wq»
  5. then press enter

Короткий справочник по git командам

Оригинал статьи

Решил собрать небольшой справочник по git командам, чтобы можно было просто и легко освежить у себя в памяти то что когда-то использовалось.

 

*Основы*


Настройка Git клиента для идентификации пользователя:

git config –global user.name “Your Name”

git config –global user.email “your@email.address”

git config –global core.editor “your editor”

 

Инициализация репозитория в текущем каталоге:

git init

 

Создает репозиторий в указанном каталоге:

git init <directory>

 

Клонирование репозитория на локальную машину:

git clone <repo>

 

Добавить файл для идексации и следить за всеми изменениями в нем ( можно задавать по маске ):

git add <file>

 

Добавить каталог для индексации:

git add <directory>

 

Удалить файл из индексации ( можно задавать по маске ):

git rm <file>

 

Перенести или переименовать файл / каталог:

git mv <source> <destination>

 

Сделать “снапшот” всех выполненных изменений:

git commit -a -m “message”

 

Статус репозитория ( добавление, удаление, изменение файлов ):

git status

 

Показать историю коммитов:

git log

 

Показать только определенное количество коммитов:

git log -n <limit>

 

Показать историю коммитов по конкретному файлу:

git log <file>

 

Посмотреть различия между последним коммитом и текущими изменениями:

git diff

 

Просмотр всех различий между коммитами:

git diff <commit> <commit>

 

Посмотреть различия между коммитом и текущими изменениями:

git diff <commit> <file>

 

Посмотреть различия между коммитами для файла:

git diff <commit> <commit> <file>

 

Показать список всех файлов в основной ветке:

git ls-tree master -r –name-only

 

*Работа с ветками*


Список веток:

git branch

 

Создание ветки:

git branch <new_branch_name>

 

Безопастное удаление ветки, если не были сделаны изменения:

git branch -d <branch_name>

 

Удаление ветки, даже если были сделаны изменения:

git branch -D <branch_name>

 

Переименование текущей ветки:

git branch -m <rename_current_branch>

Отмена изменений в локальном файле

git checkout FETCH_HEAD — — <file>

 

Переход к существующей ветке:

git checkout <branch_name>

 

Создание и переход к ветке:

git checkout -b <new_branch_name>

 

Слияние текущей ветки с указанной:

git merge <branch>

 

*Откат изменений*


Перейти на последний коммит ветки “master”:

git checkout master

 

Откатить изменения во всех файлах до указанного коммита:

git checkout <commit>

 

Откатить изменения для конкретного файла до указанного коммита:

git checkout <commit> <file>

 

Сделать откат всех изменений выполненных в коммите, при этом создается новый коммит указывающий на откат изменений:

git revert <commit>

 

Отмена изменений до последнего коммита, а также сбрасывает индексацию для конкретного файла:

git reset HEAD <file>

 

Отмена изменений до последнего коммита и сбрасывает индексацию:

git reset –soft

 

Отмена изменений до последнего коммита, сбрасывает индексацию, а так же отменить любые изменения в рабочей директории:

git reset –hard

 

programming Удаляет файлы которые не были добавлены в репозиторий:

git clean -f

 

Удаляет файлы которые не были добавлены в репозиторий по указанному пути:

git clean -f <path>

 

Удаляет файлы и каталоги которые не были добавлены в репозиторий:

git clean -df

 

Только показывает, что будет удаленно:

git clean -n

*Работа с удаленными репозиториями*


Список соединений с удаленными репозиториями:

git remote

 

Добавить соединение:

git remote add <name> <url>

 

Удалить соединение:

git remote rm <name>

 

Переименовать соединение:

git remote rename <old_name> <new_name>

 

Получить изменения из репозитория со списком всех веток ( при этом стираются любые локальные изменения ):

git fetch <remote>

 

Получить изменения из репозитория для конкретной ветки ( при этом стираются любые локальные изменения ):

git fetch <remote> <branch>

 

Получить копию текущей ветки с удаленного репозитория и слить ее с локальной копией:

git pull <remote>

 

Залить указанную ветку на удаленный репозиторий:

git push <remote> <branch>

 

И напоследок несколько ссылок где можно найти более подробное руководство по git:

 

Git How To

Pro Git

Git Reference

Atlassian Git Tutorials

Игнорирование файлов в git

Игнорирование файлов

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

$ cat .gitignore
*.[oa]
*~

Первая строка предписывает Git’у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая строка предписывает игнорировать все файлы заканчивающиеся на тильду (~), которая используется во многих текстовых редакторах, например Emacs, для обозначения временных файлов. Вы можете также включить каталоги log, tmp или pid; автоматически создаваемую документацию; и т.д. и т.п. Хорошая практика заключается в настройке файла .gitignore до того, как начать серьёзно работать, это защитит вас от случайного добавления в репозиторий файлов, которых вы там видеть не хотите.

К шаблонам в файле .gitignore применяются следующие правила:

  • Пустые строки, а также строки, начинающиеся с #, игнорируются.
  • Можно использовать стандартные glob шаблоны.
  • Можно заканчивать шаблон символом слэша (/) для указания каталога.
  • Можно инвертировать шаблон, использовав восклицательный знак (!) в качестве первого символа.

Glob-шаблоны представляют собой упрощённые регулярные выражения используемые командными интерпретаторами. Символ * соответствует 0 или более символам; последовательность [abc] — любому символу из указанных в скобках (в данном примере a, b или c); знак вопроса (?) соответствует одному символу; [0-9] соответствует любому символу из интервала (в данном случае от 0 до 9).

Вот ещё один пример файла .gitignore:

# комментарий — эта строка игнорируется
# не обрабатывать файлы, имя которых заканчивается на .a
*.a
# НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила
!lib.a
# игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO
/TODO
# игнорировать все файлы в каталоге build/
build/
# игнорировать doc/notes.txt, но не doc/server/arch.txt
doc/*.txt
# игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt

Шаблон **/ доступен в Git, начиная с версии 1.8.2.

Работа с git

Скачиваем утилитку https://git-for-windows.github.io/ для работы из под Windows.
Добавление удаленного репозитория

git remote add origin https://github.com/tutorialzine/awesome-project.git
# пример использования 
# git push origin master

Добавление файла

git add feature.txt
git commit -m "New feature complete."
# -m это параметр для указания сообщения

Создание новой ветки

git branch amazing_new_feature

Просмотр веток

git branch

Переключение на ветку

git checkout amazing_new_feature

 

Краткая памятка по MySql

Запуск выполнения команд через terminal:

mysql -u root -p

Создание индекса:

alter table [table_name] add index ([column_name]) constraint ([fk_id]) foreign key ([key_name]) references [ref_table](ref_table_key_id)

Добавление колонки:

alter table [table_name] add [column_name] bit default 0 after [column_name]

Вызов процедуры:
CALL [proc_name] ();

Просмотр колонок у таблицы:

describe table_name;

Просмотреть код у таблицы:

show create table table_name;

 

Реализация потоков данных

Платформа Node подходит для программирования потоков данных и организации

их передачи. Потоки данных можно представлять как массивы, но вместо

распределения данных в области (в массиве) выполняется распределение данных во

времени. Благодаря передаче данных фрагмент за фрагментом разработчик

получает возможность обрабатывать данные по мере их накопления, а не ждать,

пока будут переданы все данные, а потом выполнять какие-либо действия.

Обратите внимание на организацию передачи потоков данных для файла ресурсов

resource.json:

var stream = fs.createReadStream(‘./resource.json’)

// Событие Data вызывается после появления нового фрагмента данных

stream.on(‘data’, function (chunk) {

console.log(chunk)

})

stream.on(‘end’, function () {

console.log(‘finished’)

})

Событие data вызывается после появления нового фрагмента данных, а событие

end — после загрузки всех фрагментов кода. Фрагменты данных могут иметь

разные размеры (в зависимости от типа данных). Благодаря чтению потока данных

на низком уровне обеспечивается более эффективная обработка данных, чем

ожидание передачи всех данных в буфер памяти.

В Node также поддерживаются записываемые потоки данных, позволяющие

записывать фрагменты данных. Один из подобных потоков — объект ответа (res),

генерируемый в ответ на запрос к HTTP-серверу.

Считываемые и записываемые потоки могут соединяться, образуя каналы, как в

случае использования оператора | в языке написания сценариев оболочки. При этом

обеспечивается эффективный способ записи только что считанных данных без

ожидания считывания и сохранения всего ресурса.

Рассмотрим пример H TTP-сервера, взятый из предыдущего раздела. В данном

случае он будет передавать клиенту поток данных изображения:

var http = require(‘http’);

var fs = require(‘fs’);

http.createServer(function (req, res) {

res.writeHead(200, {‘Content-Type’: ‘image/png’});

// Передача по каналам из считываемого потока в записываемый

fs.createReadStream(‘./image.png’).pipe(res);

}).listen(3000);

console.log(‘Server running at http://localhost:3000/’);

При выполнении этого примера кода данные считываются из файла

(fs.createReadStream) и отсылаются (.pipe) клиенту (res) по мере считывания. Цикл

событий может обрабатывать другие события, пока данные передаются в потоке.

Node поддерживает описанный подход (когда механизм DIRTy предлагается по

умолчанию) на различных платформах, включая разные версии UN IX и Windows.

Базовая библиотека асинхронного ввода-вывода (libuv) была создана для того,

чтобы поддерживать универсальную методику обработки независимо от

родительской операционной системы. В результате обеспечивается упрощенный

перенос программ на другие устройства, на которых они могут выполняться.

Запускаем nodejs через nginx

  • Думаю, кому-нибудь будет полезно знать, как запустить проект на Node.js.

     

    Первым делом необходимо установить саму ноду, но об этом я писать не буду, это размусоленно на триллионах сайтов. А вот как поднять проект на русскоязычных сайтах, инфы маловато. Сам я искал инфу на ру сайтах, но в итоге все равно пришлось питаться инфой из-за бугра.

     

    Задача состоит в следующем:

     

    Запустить ноду.

    Писать лог по ошибкам.

    Если сайт падает, надо его поднять.

    Ставим upstart

    sudo apt-get install upstart
    

    Предположим, у вас есть проект site.ru, и расположен он в каталоге

     

    /var/www/nodejs/site/

    Создаем файл /etc/init/site.conf

    #site.conf
    
    description "node.js bin/www"
    
    author      "username"
    
     
    
    start on startup
    
    stop on shutdown
    
     
    
    script
    
    export HOME="/root"
    
     
    
    echo $$ > /var/run/site.pid
    
    exec sudo -u username /usr/local/bin/node /var/www/nodejs/site/bin/www >> /var/log/site.sys.log 2>&1
    
    end script
    
     
    
    pre-start script
    
    # Date format same as (new Date()).toISOString() for consistency
    
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/site.sys.log
    
    end script
    
     
    
    pre-stop script
    
    rm /var/run/site.pid
    
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/site.sys.log
    
    end script
    
    Далее открываем /ect/monit/monitrc
    
     
    
    check process site with pidfile "/var/run/site.pid"
    
    start program = "/sbin/start site"
    
    stop program = "/sbin/stop site"
    
    if failed port 3000 protocol HTTP
    
    request /
    
    with timeout 10 seconds
    
    then restart
    

    Где порт 3000, впишите свой, по умолчанию нода запускается с портом 3000.

     

    Чтобы избавиться от порта в site.ru:3000, правим конфиг nginx /etc/nginx/nginx.conf

     

    server {
    
    server_name site.ru www.site.ru;
    
    listen 37.143.15.183;
    
    charset UTF-8;
    
    set $root_path /var/www/nodejs/site;
    
    location / {
    
    proxy_read_timeout 120s;
    
    proxy_pass http://127.0.0.1:3000;
    
    proxy_set_header Host $host;
    
    proxy_http_version 1.1;
    
    proxy_set_header Upgrade $http_upgrade;
    
    proxy_set_header Connection "upgrade";
    
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    proxy_set_header X-Real-IP $remote_addr;
    
    }
    
    location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {
    
    proxy_pass http://37.143.15.183:81;
    
    proxy_redirect http://37.143.15.183:81/ /;
    
    proxy_set_header Host $host;
    
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_set_header X-Real-IP $remote_addr;
    
    }
    
    location @fallback {
    
    proxy_pass http://37.143.15.183:81;
    
    proxy_set_header Host $host;
    
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_set_header X-Real-IP $remote_addr;
    
    }
    
    include /usr/local/ispmgr/etc/nginx.inc;
    
    }
    

    Перезапускаем nginx

     

    service nginx restart
    

    Запускаем проект

     

    start site
    
    monit -d 60 -c /etc/monit/monitrc
    

    Открываем site.ru, и если все в порядке, увидите приветствие от Express.

     

    ПС. более подробно можно почитать на забугорном сайте

     

    http://howtonode.org/deploying-node-upstart-monit

HTTP-сервер Hello World

Обычно Node применяется для программирования серверов. В Node очень просто

создавать различные типов серверов. Если вы ранее занимались

программированием серверов, то знаете, что сервер является хостом для

приложения (например, для PH P-приложения хостом является H TTP-сервер

Apache). В Node между сервером и приложением нет никакой разницы.

Вот пример HTTP-сервера, который в ответ на любой запрос выводит сообщение

«Hello World»:

var http = require(‘http’);

http.createServer(function (req, res) {

res.writeHead(200, {‘Content-Type’: ‘text/plain’});

res.end(‘Hello World\n’);

}).listen(3000);

console.log(‘Server running at http://localhost:3000/’);

В ответ на запрос вызывается функция обратного вызова function (req, res) и на

экране появляется ответ «Hello World». Эта модель событий напоминает

прослушивание события onclick в браузере. Поскольку щелчок мышью может

произойти в любой момент, следует воспользоваться функцией, реализующей

нужную для этого случая логику. В Node имеется такая функция, которая

откликается на поступивший в любой момент запрос.