Skip to content

Instantly share code, notes, and snippets.

View saippuakauppias's full-sized avatar
🤔
/dev/random

Denis Veselov saippuakauppias

🤔
/dev/random
View GitHub Profile
@saippuakauppias
saippuakauppias / find_unused_css_selectors.php
Last active January 5, 2022 12:56
Beautify & Tidy cloned html template
<?php
$html_content = get_content_by_pattern(__DIR__ . '/template/index_beautify.htm*');
//$html_content .= get_content_by_pattern(__DIR__ . '/template/errors/*.twig');
$css_content = get_content_by_pattern(__DIR__ . '/template/index_files/tidy.max.cs*');
$html_content = preg_replace('#\{\{[^\}]+\}\}#iUs', '', $html_content);
$html_content = preg_replace('#\{%[^\}%]+%\}#iUs', '', $html_content);
preg_match_all('#class=["\']{1}([^"\']+)["\']{1}#iUs', $html_content, $matches);
@saippuakauppias
saippuakauppias / getUserRealIP.php
Created October 12, 2015 00:07
Определить реальный IP-адрес пользователя, выкинуть прокси и взять настоящий IP (если это возможно).
if (!function_exists('getUserRealIP')) {
function getUserRealIP() {
$realIP = null;
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ".")>0 && strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ",")>=0) {
$forwardedIPArray = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
$realIP = trim($forwardedIPArray[0]);
} elseif (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ".")>0 && strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ",")===false) {
$realIP = trim($_SERVER['HTTP_X_FORWARDED_FOR']);
}
@saippuakauppias
saippuakauppias / gist:89b9acce52328d0fc635
Last active January 15, 2020 21:41
create video from one image (short file size, long video) [ffmpeg]
ffmpeg -loop 1 -i image.jpg -c:v libx264 -preset ultrafast -t 360 -crf 1 -vf "fps=1,scale=640:480" video.mp4
# -i image.jpg
# image file
# -t 360
# video time
# video.mp4
# result video file
@saippuakauppias
saippuakauppias / share.js
Created September 1, 2015 10:43
Share text or link in vk (vkontakte, vk.com), fb (facebook, facebook.com), tw (twitter, twitter.com)
/********************************************************************
*
* Share social http://habrahabr.ru/post/156185/
*
*********************************************************************/
function Share(purl, ptitle, pimg, text) {
'use strict';
this.purl = purl;
this.ptitle = ptitle;
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2013
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
@saippuakauppias
saippuakauppias / find_zyxel_nas.py
Created September 15, 2013 15:44 — forked from oxitnik/find_zyxel_nas.py
ZyXEL NSA325
import socket
host = ''
port = 50127
data = '\x00\x42\x02\x01\x40\x61\x86\xff\xbb\x97\x00\x14\xa9\xfe\x54\xb5\xff\xff\x00\x00'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((host, port))
@saippuakauppias
saippuakauppias / models.py
Created February 11, 2013 17:32
Django: denormalization in models vs. raw sql
from django.db import models
from django.db.models import signals
from django.utils.translation import ugettext_lazy as _
from .signals import update_thumbnail_image
class Gallery(models.Model):
title = models.CharField(_('title'), max_length=50)
@saippuakauppias
saippuakauppias / gist:4714695
Last active August 24, 2019 04:35
javascript vkontakte api wall post: постинг на стену к текущему пользователю на JS vk API. С помощью этого кода так же можно отправлять записи на стены групп, пользователей и публичных страниц (пабликов). Используется в iframe приложениях вконтакте.
/*
* message - сообщение, которое будет опубликовано
* image - картинка для постинга
* user_id - id текущего пользователя (к нему будет осуществлён постинг)
*/
function wallPost(message, image, user_id) {
VK.api('photos.getWallUploadServer', {
uid: user_id
}, function (data) {
if (data.response) {
$ mktmpenv && pip install Django==1.4.3 Lemon==0.7.3 South==0.7.6 lemon-dashboard==0.1 && git clone git://github.com/trilan/lemon.git && cd lemon/ && git checkout 0.7.3 && cd test_project && echo "INSTALLED_APPS = ['dashboard'] + list(INSTALLED_APPS)" >> project/settings.py && echo "DASHBOARD_CONFIG = {'STATE': (('dashboard.appswidget',), ('dashboard.logwidget',),),}" >> project/settings.py && python manage.py syncdb --migrate && python manage.py runserver

Nginx+gunicorn

Схема работы в данном случае такая:

  1. Nginx является frontend-ом, и браузеры общаются именно с ним. Мультидоменной конфигурацией рулит именно Nginx. Приняв запрос он решает какому backend-у его пробросить.
  2. Gunicorn - это WSGI веб-сервер. Каждый django-проект запускается на отдельном инстансе гуникорна. Именно ему будут приходить запросы от nginx-а
  3. Чтобы Gunicorn неожиданно не упал, а точнее, чтобы поднялся, если неожиданно упадет, запускать его будем с помощью supervisor. Вообще, есть несколько вариантов, но пока разберем только этот.