среда, 15 марта 2017 г.

Отзывы о DBMS

Привет, друзья!
Решил собрать отзывы о нашей работе (я являюсь руководителем компании DBMS). Будем продолжать снимать новые:)





суббота, 12 ноября 2016 г.

SSH авторизация и доступ по ключу без пароля

Как мы обычно проходим SSH авторизацию?

ssh root@server.ru

Затем ищем где-то пароль, копируем его, и, если всё успешно, попадаем на сервер. Какие проблемы есть с таким подходом?

Во-первых, конечно, под root заходить на сервер сразу по SSH затея плохая и такую возможность надо сразу отключить, это опасно. Поэтому: а) создаём пользователя, например, www; б) даём ему возможность логиниться на сервер по SSH; в) логиниться root пользователю по SSH запрещаем:

# создаём юзера www
adduser www
# позволяем ему выполнять sudo команды с root правами
adduser www sudo
# позволяем ему заходить по SSH, а root пользователю запрещаем
vi /etc/ssh/sshd_config
AllowUsers www
PermitRootLogin no

# выходим из vi, перезагружаем SSH сервер
sudo /etc/init.d/ssh start

Теперь зайти по SSH под пользователем root на сервер мы не сможем, но можем зайти под пользователем www, который сможет выполнять команды с правами root, используя sudo, например, sudo vim /etc/hosts.

Вторая проблема - использование пароля при каждом SSH соединении. Это а) неудобно (хороший пароль очень длинный и запомнить его почти невозможно, поэтому надо где-то хранить и постоянно копировать); б) небезопасно, так как пароль может быть украден,  если сервер взломан. Выход из этих проблем есть - SSH авторизация и аутентификация по специальному ключу без пароля.

SSH ключ состоит из двух частей (файлов) - открытой и закрытой, открытая хранится в домашнем каталоге удалённого пользователя (www в нашем случае) на удалённом сервере, закрытая в домашнем каталоге локального пользователя (то есть нашего компьютера). При таком подходе украсть открытую часть будет недостаточно для проведения аутентификации, нужна ещё закрытая часть, которая хранится у нас на локальном компьютере. Плюс - можно настроить SSH подключение к серверу без ввода пароля.

Генерируем ключи и переносим их в ~/.ssh/:

mkdir keys; cd keys;
ssh-keygen -t rsa -f www
mv www* ~/.ssh/

Команда спрашивает пароль на ключ, вводим произвольный пароль. Создастся два файла:

  • ~/.ssh/id_rsa.pub - публичный ключ, который копируется на сервер;
  • ~/.ssh/id_rsa - закрытый ключ, который остаётся у нас.
ssh-copy-id -i ~/.ssh/www www@server.ru

Запрашиваемый пароль - это пароль доступа пользователя www на сервер, то есть заданный при создании пользователя www. Если SSH на сервере на нестандартном порту, то нужно передать порт следующим образом:

ssh-copy-id '-p 443 www@server.ru'

Теперь можно заходить на сервер без ввода пароля:

ssh www@server.ru

Если сервер не имеет домена (доступ только по IP), то, чтобы не копировать каждый раз IP, можно упросить авторизацию, создав команду логина и выполняя её:

vim ~/.bashrc
alias ssh_www_server='ssh www@server'

Перезапустим терминал, появится команда ssh_www_server, которая быстро и безопасно пустит нас на сервер - без копипаста IP сервера и пароля на SSH:

ssh_www_server

вторник, 18 октября 2016 г.

Django & PostgreSQL & ERROR: duplicate key violates unique constraint

Часто при использовании PostgreSQL после перетаскивании БД с одного сервера на другой (или с локальной dev машины на production) начинают сыпаться primary keys, выдавая при insert операциях что-то вроде:

ERROR: duplicate key violates unique constraint

Дело в том, что, если, например, MySQL использует для первичных ключей autoincrement поля, которые просто увеличиваются на 1 при добавлении в таблицу каждой новой строки, то PostgreSQL использует для первичных ключей поля типа serial, которые фактически являются просто цифровыми полями, значения которых берутся из PostgreSQL последовательности (sequence). При этом если следующее значение последовательности равно 100, а id=100 в таблице уже есть, то и возникает конфликт duplicate key:

SELECT MAX(the_primary_key) FROM the_table;
SELECT nextval('the_primary_key_sequence');

Если эти первое значение больше второго или равно ему - есть проблема. Чтобы исправить ситуацию, можно установить значения всех последовательностей на заведомо большое число (которое больше всех текущих id на порядок, например), но это некрасиво и неудобно, быстрее попросить Django помочь нам. Такая короткая стандартная Django команда выведет весь SQL, который скорректирует проблему, установив корректные значения для PostgreSQL последовательностей:

./manage.py sqlsequencereset app1 app2

app1, app2 здесь - это названия Django приложений. Полученный SQL код можно просто выполнить в БД и всё - вот так просто. Django рулит!

суббота, 25 июня 2016 г.

Как законно открыть и вести бизнес в РФ. Регистрация, налоги, отчетность, взносы, отчисления

Статья пополняется при изменении законодательства, последнее изменение 25 июля 2016

Проблема: хочу легально, то есть законно, вести свою деятельность на территории РФ. Как проще всего это сделать, как регистрироваться (ИП/ООО), какие и куда налоги/отчисления/взносы платить, как это делать (куда идти или можно платить удалённо), какую отчетность сдавать?

Есть мнение, что всё очень сложно. Ниже — полная информация, что регистрировать, что куда и как платить: всё легко и можно делать самому, пока не появится много денег. А когда они появятся, можно нанять бухгалтера. Добро пожаловать!

1. Кем регистрироваться

1.1. ИП/ООО


В первую очередь определяемся, как регистрироваться — в качестве ИП или в качестве ООО. Второй вариант по бытующему мнению «солиднее», но проблем с ним больше:

  1. В общем случае значительно больше отчетность (сейчас ежемесячная)
  2. Сложнее и дороже выводить прибыль (на ~12% больше надо отдавать государству, если всё делать законно —  а если делать незаконно, то попасть можно на значительно большие суммы).
    Пример: пришли 100 тысяч на ИП: заплатил 6% налог, остальные 94 тысячи твои. Пришли 100 тысят на ООО: заплатил 6% налог, с остатка 13% НДФЛ (вывод денег через дивиденды), вывел 81,7 тысяч. Разница 12300 рублей уже на 100 тысячах
  3. Нужно вести бухучёт, то есть ООО опять же сложнее и дороже в обслуживании
  4. В случае желания/необходимости закрыть ООО значительно сложнее и дольше, чем ИП
  5. В случае чего штрафы для ООО сильно больше, чем для ИП
В каких случаях действительно стоит задуматься о регистрации ООО?
  1. Если открываете бизнес не один. В таком случае хорошо прописанный устав с распределением долей учредителей и правил входа в бизнес новых учредителей/выхода из бизнеса старых учредителей  — обязателен. Тут вопрос больше к тому, зачем вам соучредитель. Несёт ли он пользу бизнесу, то есть обладает навыками, необходимыми в этом бизнесе и дополняющими навыки ваши, или просто одному скучно/страшно/нужен кто-то для задора? Если второй вариант (а чаще всего бывает именно так), то... Ну, вы поняли. Это будет позитивный опыт только в том смысле, что и из негативного опыта можно вынести пользу — о том, как делать не надо. Плюс, даже если партнёр обладает нужными навыками, которыми не обладаете вы — всегда остаётся огромный риск в итоге не сойтись характерами, иметь разное видение развития компании, разное желание работать или не работать и т.д. Подумайте 10 раз прежде чем открывать бизнес с партнерами.
  2. Если боитесь отвечать по обязательствам своей деятельности своим имуществом. Общеизвестно, что учредитель отвечает за деятельность ООО только размером своей части в уставном капитале (например, 10 тысяч рублей), а ИП — своим личным имуществом (кроме единственного жилья, одежды и продуктов питания, этого суд по закону забрать не может). Если кто-то захочет взыскать с вас 50 миллионов рублей, то при негативном варианте развития событий ИП рискует значительно большим.
Я рекомендую для старта открывать ИП. А со временем появятся деньги и желание перейти в ООО — это всегда можно сделать, наймёте бухгалтера (и, возможно, еще кадровика) и всеми вопросами законности заниматься будете уже не вы.

Важно  — ИП регистрируется только по месту прописки, ООО  — в любой налоговой службе РФ.

1.2. Система налогобложения


Итак, открываем ИП. Есть 5 систем налообложения:

  • упрощённая система налогообложения (УСН), может быть применена к любому виду деятельности, скорее всего это ваш выбор (недаром она упрощённая)
  • основная система (ОСН), может быть применена к любому виду деятельности, сложна
  • единый налог на вменённый доход (ЕНВД) — для ограниченного количества видов деятельности, описаны тут
  • патентная система налогообложения — для ограниченного количества видов деятельности, описаны тут 
  • единый сельскохозяйственный налог — только для сельхоз производителей, если это вы — то здесь подробнее
Подробнее про системы налообложения, их ограничения и особенности можно почитать здесь, однако скорее всего ваш выбор — это классическая «упрощёнка», она же УСН. ОСН тяжело вести, патентная и сельхоз система скорее всего не ваша, ЕНВД хороша на бизнесах услуг физ лицам.

Кстати, УСН работает до 60 млн годовой выручки (если быть точным, чуть больше, изменяется в разных годах). Если выручка больше — надо переходить на другую систему налогообложения, например, ОСН.  Но для старта и разгона этого достаточно.

Идём далее. УСН бывает двух видов — платим 6% от выручки (то есть денег, полученных от клиентов) или 15% от выручки минус расходы. Первая схема называется «УСН доходы», вторая «УСН доходы минус расходы». Для второго варианта процент может быть уменьшен местным законодательством — здесь есть ссылки на сайт налоговой nalog.ru по регионам РФ. Обратите внимание, что для уменьшения процента по УСН деятельность должна вестись именно в регионе пониженной ставки.

Для применения схемы «УСН доходы минус расходы» надо документально подтверждать все свои расходы, да и расходы можно учитывать далеко не все. Это достаточно сложно и требует больше усилий, поэтому в большинстве своём все выбирают схему «УСН доходы», то есть платят 6% от поступивших доходов.

Итак, что мы имеем. ИП на УСН 6% без сотрудников. Сотрудники будут позже, с ними появится новая отчётность (ежемесячная), но мы рассматриваем именно базовый старт деятельности без официально устроенных сотрудников.

2. Регистрация ИП


О регистрации ИП на УСН написано много. Например, здесь. В общих словах — надо отнести в ФНС (федеральную налоговую службу) или МФЦ (многофункциональный центр госуслуг) по месту прописки пакет документов и через несколько дней забрать готовые документы. Процедура быстрая и очень простая.

Дальше надо открыть расчётный счёт. Для ИП он необязателен, но для расчётов всё же удобен. Рекомендую банк Точка —  удобный онлайн банкинг и просто классный сервис. Они сейчас входят в банк Открытие, 4й по размеру активов в РФ, так что банк надёжный. Уведомлять налоговую об открытии счёта не надо, сейчас это делает сам банк.

Также можно сделать печать. ИП может работать без печати, но не все это знают и иногда очень удивлены отсутствием печати ИП на каком-то документе. Лучше сделать, это недорого.

Зарегистрировались, счёт открыли, печать сделали — всё, можно начинать делать деньги:).

3. Что от нас надо государству


Для полного соблюдения законности государству от описанного выше индивидуального предпринимателя нужны:

  • фиксированные взносы в пенсионный фонд (ПФР) и федеральный фонд обязательного медицинского страхования (ФФОМС)
  • уплата налогов в размере 6% от выручки
  • уплата фиксированного взноса в размере 1% от разницы между годовым доходом (выручкой) и суммой 300 000 рублей 
  • отчётность — то есть информация, которую необходимо передать в соответствующие органы, например, годовая налоговая декларация
  • книга учёта доходов и расходов
Книга учёта доходов и расходов — место, где надо сохранять все расходы и доходы ИП. Однако штраф за отсутствие этой книги составляет всего 200 рублей для ИП (против 10 000 для ООО), да и проверять её обычно не проверяют, поэтому ИП ведут её редко.

3.1. Оплата фиксированных взносов


Здесь и далее будут обозначаться крайние даты платежей, в которые надо уложиться. Однако обратите внимание на тот факт, что не стоит дожидаться этих крайних чисел оплаты и платить всё в последние дни. Если оплата поступает на их счёт позже обозначенного срока, с этим могут возникнуть сложности — не получится сделать вычет, не зачтут платеж вовремя и т.д. Если не хочется проблем, лучше платить заранее, чтобы к описанному сроку платёж точно дошёл.

Фиксированные взносы в ПФР и ФФОМС надо платить ежеквартально для того, чтобы можно было делать налоговый вычет на оплаченную сумму взносов. Так, фиксированные платежи в год сейчас составляют около 24 тысяч рублей. Почему бы не заплатить налогов меньше на 24 тысячи в год? Вполне себе хорошая экономия.

Итак, фиксированные взносы оплачиваются 4 раза в год:
  • За первый квартал — до 31 марта
  • За второй квартал — до 31 июня
  • За третий квартал — до 31 сентября
  • За четвёртый квартал — до 31 декабря
Каждое ежеквартальное отчисление составляет суммарно около 6 тысяч рублей и состоит из двух платежей — в ПФР (больший платёж) и в ФФОМС (меньший). Получить квитанции для оплаты можно на официальном сайте, процедура описана здесь. Сумму к оплате в ПФР и ФФОМС можно посчитать здесь, введя дату начала и конца оплачиваемого квартала. Оплатить полученные квитанции можно в любом отделении Сбербанка или в Сбербанк Онлайн (правда, он иногда тупит и не принимает КБК). 

3.2. Уплата налогов


Налоги платятся ежеквартально так называемыми авансовыми платежами:
  • За первый квартал — до 25 апреля
  • За второй квартал — до 25 июля
  • За третий квартал — до 25 октября
  • За четвёртый квартал — до 30 апреля года, следующего за истёкшим отчётным
Из этих платежей можно и нужно вычитать уже уплаченные фиксированные взносы за этот квартал. То есть считаем  6% от полученных денег в этом квартале, вычитаем уплаченные взносы за этот квартал (около 6 тысяч рублей) и получаем сумму к оплате.

Получить квитанцию можно на сайте налоговой, процесс описан здесь.

3.3. Уплата 1% сверх дохода в 300 000


Если годовой доход превысил 300 000 рублей, необходимо заплатить 1% от суммы превышения. Например, доход получился 1 000 000 рублей, тогда надо заплатить 1% от 700 000 рублей, сделать это можно до 1 апреля года, следующего  за истёкшим отчётным. Получить квитанцию можно тоже на сайте ПФР, как описано здесь.

Кстати, это отчисление ограничено сверху размером 154 851,84 руб. Если 1 % от суммы превышения получается больше указанного размера платежа — платим только верхнюю планку, то есть 154 851,84 руб.

3.4. Отчетность


Для ИП на упрощёнке без сотрудников вся отчётность сводится только к предоставлению раз в год декларации — это необходимо сделать до 30 апреля года, следующего за истёкшим отчётным годом. Декларацию можно:
  • заполнить самостоятельно, как описано здесь, и отнести ногами в ФНС/отправить почтой
  • можно обратиться к бухгалтерской компании, которая заполнит за вас и даже отправит в ФНС электронно, не надо будет нести самому. Стоит это добро недорого, от 200 рублей в регионах до нескольких тысяч в Москве
  • используя разные сервисы вроде www.moedelo.org или www.e-kontur.ru, предварительно получив сертификат, отправить самому без бухгалтерской компании и через Интернет

4. Кассовый аппарат и приём денег


Если мы что-то продаём физ лицам и работаем по схеме «УСН доходы», кассовый аппарат не является необходимостью. Можно выписывать товарные чеки, этого достаточно.

Принимать деньги ИП вопреки распространённому мнению-страху может не только на расчётный счёт — нет даже необходимости вносить принятые деньги на расчётный счёт. С точки зрения законности важно только платить налоги со всех заработанных денежных средств.

На этом всё. Большого количества нулей на расчётном счёте вам!

суббота, 10 октября 2015 г.

Быстро удалить все приложения ВКонтакте

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

Решение

Открыть Google Chrome, зайти в ВК и перейти на http://vk.com/apps?act=settings, пролистать максимально вниз, чтобы отображались все приложения. Открыть консоль (CTRL+SHIFT+I или ALT+CMD+I). Перейти в консоли на вкладку Console, вставить код, нажать Enter.
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type= 'text/javascript';
script.src= 'https://code.jquery.com/jquery-2.1.0.min.js';
head.appendChild(script);
После этого вставить и выполнить этот код:
a_array = $('a:contains(Убрать)');
i = 0;
var sInterval = setInterval(function(){
     a_array[i].click();
     i++;
}, 1200);

пятница, 22 мая 2015 г.

Клонировать объект типа Date в JavaScript

var d1 = new Date();
var d2 = d1; // так не клонируется
d1.setMonth(d2.getMonth()+1); // меняем месяц в d1 - поменяется ли
                              // при этом d2?
alert(d2-d1); // ноль, потому что меняя  d1, меняем и d2

d2 = new Date(d1.getTime()); // клонируем
d1.setMonth(d2.getMonth()+1);
alert(d2-d1); // не ноль - клонирование прошло успешно 
Кстати, клонировать любой объект в JS можно так (понятно, что имеется в виду «клонировать данные объекта», то есть фактически клонировать JSON структуру с данными, методы объекта, если они есть, при этом не будут клонированы, то есть такой метод не подойдёт для клонирования дат):
// клонируем объект cloningObject
var newObject = JSON.parse(JSON.stringify(cloningObject));

четверг, 3 июля 2014 г.

Центрирование Яндекс карты - JavaScript API 2.x


Задача: используя JavaScript API 2.x Яндекс карт, добавить на карту N точек по их координатам и автоматически подобрать масштаб карты (zoom) и координаты центра.

Решение

// Экземпляр Яндекс карт
var myMap;
// Предполагаем, что points - исходный массив координат точек,
//  добавляемых на карту
var points = [
  ["55.768715", "37.510193"],
  ["55.728373", "37.669054"], 
  ["55.823500", "37.631000"],
  ["55.773300", "37.555100"]
];
// Выполняем наш код, когда API загружен - ymaps.ready()
ymaps.ready(function(){
  // Коллекция гео-точек, добавленных на карту
  var myCollection = new ymaps.GeoObjectCollection();
  // Помещаем карту в элемент DIV с id, равным «map»
  myMap = new ymaps.Map("map", {
    center: [50, 50], // Начальные значения центра карты
    zoom: 15,         // Начальное значение зума карты
    controls: ['zoomControl']
  });

  // Перебираем в цикле точки, которые надо добавить на карту
  for (i = 0; i < points.length; i++ ){
    var myPlacemark = new ymaps.Placemark([
      points[i][0], points[i][1]
    ]);
    // Не забываем добавить точку в коллекцию -
    //  впоследствии мы добавим всю коллекцию на карту
    myCollection.add(myPlacemark);
  }

  // Добавляем точки на карту
  myMap.geoObjects.add( myCollection );	
  // Вычисляем необходимые координаты краёв карты и
  //  устанавливаем их для нашего экземпляра карты	
  myMap.setBounds( myCollection.getBounds() );
});