Change the permission to npm's default directory

npm
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
8 марта 2017, 16:15

CORS in nginx

if ($request_method = 'OPTIONS') {
			add_header 'Access-Control-Allow-Origin' "$http_origin";
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Methods' 'GET, POST,PUT,DELETE,OPTIONS';
			add_header 'Access-Control-Allow-Headers' 'Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Origin,Accept';
			add_header 'Content-Type' 'application/json';
			add_header 'Content-Length' 0;
 
			return 204;
		}
31 января 2017, 13:28

Set up global variable in Laravel

App::instance('var', $var);
$var = \App::make('var');
20 января 2017, 23:03

Docker: Remove all images and containers

#!/bin/bash
# Delete all containers
docker rm $(docker ps -a -q)
# Delete all images
docker rmi $(docker images -q)
docker system prune
# Delete all volumes
docker volume prune
20 января 2017, 00:52

MISCONF Redis is configured to save RDB snapshots

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
10 января 2017, 16:00

Change gitlab url

vi /etc/gitlab/gitlab.rb
 external_url 'http://gitlab.example.com/'
sudo gitlab-ctl reconfigure 
sudo gitlab-ctl restart
14 декабря 2016, 14:37

Постим картинки на стену сообщества vkontakte

vk
<?php
$token = '**************************************';
$group_id = '1111111';
$vk = new Vk($token);

$image_path = 'image.png';
copy('https://www.google.ru/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 'image.png');

$upload_server = $vk->photosGetWallUploadServer($group_id);

$upload = $vk->uploadFile($upload_server['upload_url'], $image_path);

$save = $vk->photosSaveWallPhoto([
        'group_id' => $group_id,
        'photo' => $upload['photo'],
        'server' => $upload['server'],
        'hash' => $upload['hash']
    ]
);

$attachments = sprintf('photo%s_%s', $save[0]['owner_id'], $save[0]['id']);


$post = $vk->wallPost([
    'owner_id' => "-$group_id",
    'from_group' => 1,
    'message' => "блаблабла",
    'attachments' => $attachments
]);


class Vk
{
    private $token;
    private $v = '5.37';

    public function __construct($token)
    {
        $this->token = $token;
    }

    public function wallPost($data)
    {
        return $this->request('wall.post', $data);
    }

    public function photosGetWallUploadServer($group_id)
    {
        $params = [
            'group_id' => $group_id,
        ];
        return $this->request('photos.getWallUploadServer', $params);
    }

    /**
     * @param $params [user_id, group_id, photo, server, hash]
     * @return mixed
     * @throws \Exception
     */
    public function photosSaveWallPhoto($params)
    {
        return $this->request('photos.saveWallPhoto', $params);
    }

    public function uploadFile($url, $path)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);

        if (class_exists('\CURLFile')) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new \CURLFile($path)]);
        } else {
            curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => "@$path"]);
        }

        $data = curl_exec($ch);
        curl_close($ch);
        return json_decode($data, true);
    }

    private function request($method, array $params)
    {
        $params['v'] = $this->v;

        $ch = curl_init('https://api.vk.com/method/' . $method . '?access_token=' . $this->token);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        $data = curl_exec($ch);
        curl_close($ch);
        $json = json_decode($data, true);
        if (!isset($json['response'])) {
            throw new \Exception($data);
        }
        usleep(mt_rand(1000000, 2000000));
        return $json['response'];
    }
}
14 декабря 2016, 00:31

Idea PhpStorm licence key

Generate here
18 ноября 2016, 14:37

Удаление всех аудиодорожек из видео файла

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
11 сентября 2016, 14:26

Как залить на яндекс диск через CURL

curl --user USER:PASSWORD -T "/path/to/file" https://webdav.yandex.ru/
23 августа 2016, 16:49

Как узнать что занимает порт в FreeBSD

sockstat -4 -l | grep :80
23 августа 2016, 16:37

Проверка диска на bad blocks

dd_rescue -v -l /var/log/mfid1_error.log -o /var/log/mfid1_bad.log /dev/mfid1 /dev/null
6 августа 2016, 11:56

Определение серийного номера диска в raid

Для рейдов типа twaX или daX смотрим в dmesg.boot:
cat /var/run/dmesg.boot
Вывод будет примерно такой
da18 at twa1 bus 0 scbus1 target 6 lun 0
da18: <AMCC 9650SE-12M DISK 4.10> Fixed Direct Access SCSI-5 device 
da18: Serial Number W1E1T3RX000000000000
da18: 100.000MB/s transfers
da18: 1907729MB (3907029168 512 byte sectors: 255H 63S/T 243201C)
26 апреля 2016, 19:40

Firewall on iptables

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -j DROP
26 апреля 2016, 10:19

Использование input value в angular

Для input
.directive('useFormData', function ($parse) {
    return {
      link: function (scope, element, attrs) {
        if (attrs.ngModel && attrs.value) {
          $parse(attrs.ngModel).assign(scope, attrs.value);
        }
      }
    };
});
<input type="text" ng-model="title" value="default value" use-form-data />
Для textarea
.directive('useFormData', function ($parse) {
 return {
  link: function (scope, element, attrs) {
   if (attrs.ngModel && element[0].defaultValue) {
    $parse(attrs.ngModel).assign(scope, element[0].defaultValue);
   }
  }
 };
});
20 марта 2016, 20:58

Число прописью при помощи php_intl

<?php
$result = (new \MessageFormatter('ru-RU', '{n, spellout}'))->format(['n' => 321]);
echo $result;  // триста двадцать один

$result = (new \MessageFormatter('ru-RU', '{n, spellout,%spellout-cardinal-feminine}'))->format(['n' => 321]);
echo $result; // триста двадцать одна
16 марта 2016, 20:52

Подключение к mongodb через ssh туннель

ssh -fN -L 6666:localhost:27017 user@host
Теперь можно подключаться к удаленной базе через 127.0.0.1 по порту 6666
21 февраля 2016, 15:13

Установка Java в Firefox на Ubuntu

sudo apt-get install openjdk*  
sudo apt-get install icedtea-plugin
21 февраля 2016, 13:55

3 способа удалить данные из таблицы, которых нет в другой таблице

1. LEFT JOIN/IS NULL
DELETE b FROM tbl
  LEFT JOIN rel ON rel.id = tbl.fileid 
      WHERE rel.id IS NULL
2. NOT EXISTS
DELETE FROM tbl 
 WHERE NOT EXISTS(SELECT NULL
                    FROM rel
                   WHERE rel.id = tbl.fileid)
3. NOT IN
DELETE FROM tbl
 WHERE tbl.fileid NOT IN (SELECT rel.id 
                        FROM rel)
27 января 2016, 22:37

Полезные команды SKYPE

/showplaces      показывает с каких устройств вы подключены
/remotelogout    выход со всех устройств кроме текущего (push уведомления тоже отключаются)
25 января 2016, 13:39