При этом если вы открываете сайт в IE11-/Android/Safari9-/FF ESR/прочее говно, то все продолжает работать (за исключением может быть пары просчетов в CSS3) засчет подгрузки совершенно другого, забабелизированного скрипта, который весит около 85кб
Вот такой вот философский немного вопрос поставил я сам себе.
Чтобы стать более эффективным кодером, нужно вероятно делать больше кода, решающего проблемы за меньшее время.
Так вот вопрос - как по вашему можно замерить эффективность кодера?
Как вы замеряете свою эффективность или вы просто сами для себя знаете что развиваетесь и ок?
Спустя 98 сек.
Просто хотел провести эксперимент, например как сон в одно и то же время или пранаяма может повлиять на мою эффективность в работе, но осознал что я даже не знаю как ее замерить, кроме как потраченным временем на решение задач. Но ведь задачи бывают разного характера - что их в баллах что ли оценивать?
Спустя 153 сек.
Есть еще мнение что все задачи встающие перед современными кодерами однотипны и возможно их даже можно классифицировать, чтобы создать единую балловую систему сложности задачи - и затем как-то проецировать сложность на время. Правда тут еще встает вопрос об условиях работы (место, окружение, красота кода и прочее)
@Ivan., ну я не для себя его делал, надо спрашивать разрешение, потом отрефакторить, написать доку, тесты
вообще думал конечно, но мне влом
есть куда более интересные вещи в жизни
@adw0rd, а жаль, подобного в интернете мало, не забывай хотя бы про свой блог)
При работе с комиссиями нужно учитывать:
- комиссия может отличаться для каждой валюты
- комиссия может отличаться для материка (как правило европа, сша, все остальное)
- комиссия может иметь статическую часть
- комиссия может иметь минимальный размер
- комиссия может иметь процентную часть
- комиссия может иметь округление в большую или меньшую сторону
- комиссия может быть на ввод, на вывод, на перевод
- комиссия за конвертацию валюты может быть основана на собственном курсе валюты системы
- охуительно считать все платежи и комиссии в копейках, но только если у вас копейки/центы, с помесью копеек и сатоши уже будет проблемнее
При работе с комиссиями возникают часто проблемы математического характера
Рекомендую на стороне JavaScript использовать math.js и работать с большими числами
На стороне сервера, если речь идет о питоне то Decimal
Настраивайте одинаковую точность для Decimal на сервере и math.js на клиенте, например 64 знака после запятой
from decimal import localcontext
with localcontext() as ctx:
ctx.prec = 64 # Perform a high precision calculation
s = calculate_something()
s = +s # Round the final result back to the default precision
math.config({
number: 'BigNumber', // Default type of number:
// 'number' (default), 'BigNumber', or 'Fraction'
precision: 64 // Number of significant digits for BigNumbers
});
Почти все платежные системы работают одинаково, можно разделить их на две большие группы:
агрегаторы (freekassa, robokassa, liqpay) и кошельки (webmoney, qiwi, yandex money, brick)
Агрегаторы берут охуевшие проценты, порой даже сильно охуевшие (freekassa)
К слову о фрикассе - с пользователя или магазина на ваш выбор берется комиссия ввода, а затем вы можете вывести деньги на выбранную систему с комиссией, то есть получается двойная комиссия
Робокасса на данный момент не работает с физ лицами, да и вообще почти все агрегаторы требуют либо юр лицо либо ип для нормальной работы
Без юрлица можно работать с вебмани мерчантом (с ограничениями) и яндекс деньгами (до 15000 на кошелек)
Ну и с фрикассой разумеется
Системы которые я подключал:
- yandex money через данные для формы, перевод 0.5% (подключается очень легко, тестирование затруднено)
- yandex касса (проценты не помню)
- webmoney, перевод 0.8% (подключается очень легко, есть адекватное тестирование)
- robokassa (подключается легко, есть адекватное тестирование)
- freekassa (подключается легко, с тестированием какие-то траблы насколько помню)
- paymentwall brick для сша и европы (подключается средне для первого раза, из особенностей работа на стороне клиента собственной js-библиотекой, комиссии Pricing - Paymentwall [paymentwall.com]
буду дописывать этот пост по мере использования новых шлюзов
если будут вопросы по этим системам можете задавать
Основная суть работы с платежными системами:
можно сделать url вида /payments/<system>/<result>/ где system будет платежным шлюзом, а result типом уведомления, обычно их три: уведомление о платеже, успешная переадресация и переадресация с провалом. Туда платежный шлюз будет слать свой пингбэк или соответственно перенаправлять пользователя.
всегда передается контрольная сумма для проверки валидности данных
самый часто используемые алгоритмы sha1, md5, sha256
из них конечно надежнее последний, поэтому если есть выбор то надо выбирать именно его или что-нибудь покруче
определенным образом составляется строка и проверяется хеш от нее
часто вместе с параметрами приходит язык, сумма, кошелек покупателя (идентификатор)
редко ip-адрес, сумма с комиссией
часто можно добавлять свои параметры
При работе с транзакциями использую такой алгоритм:
- создаю транзакцию через ajax
- возвращаю номер новой транзакции клиенту
- заполняю поля формы и делаю POST на сайт шлюза (или дополнительный запрос в случае если можно не редиректить)
Функция post (angular, но легко можно переписать, angular.element это jQuery, $document[0] это document)
vm.doPost = function (path, parameters) {
var form = angular.element('<form></form>');
form.attr('method', 'post');
form.attr('action', path);
angular.element.each(parameters, function(key, value) {
var field = angular.element('<input></input>');
field.attr('type', 'hidden');
field.attr('name', key);
field.attr('value', value);
form.append(field);
});
angular.element($document[0].body).append(form);
form.submit();
};
тогда работа с яндекс деньги превращается во что-то такое
path = 'https://money.yandex.ru/quickpay/confirm.xml';
req = {
'sum': mustPay.toString(),
'formcomment': 'Balance replenish',
'short-dest': 'Balance replenish: ' + $user.nickname,
'targets': 'Пополнение баланса пользователя ' + $user.nickname,
'successURL': $settings.backendSite + '/service/yd/result/success/',
'label': transactionId, // номер транзакции, которая хранит информацию о платеже, сумму и прочее
'quickpay-form': 'shop',
'paymentType': 'PC',
'receiver': $settings.ydReceiver // кошелек яндекс денег для приема
};
vm.doPost(path, req);
path = 'https://merchant.webmoney.ru/lmi/payment.asp';
req = {
LMI_PAYMENT_AMOUNT: mustPay.toString(), // к оплате сумма
LMI_PAYMENT_DESC_BASE64: base64.encode('Пополнение баланса пользователя ' + $user.nickname),
LMI_PAYMENT_NO: transactionId,
CP_USER_ID: $user.user_id,
LMI_PAYEE_PURSE: (vm.replenish.currency == 'RUB') ? $settings.payeeWMR : $settings.payeeWMZ,
LMI_PAYMER_EMAIL: $user.email,
/**
Дополнительное поле, определяющее режим тестирования. Действует только в режиме тестирования и может принимать одно из следующих значений:
0 или отсутствует: Для всех тестовых платежей сервис будет имитировать успешное выполнение;
1: Для всех тестовых платежей сервис будет имитировать выполнение с ошибкой (платеж не выполнен);
2: Около 80% запросов на платеж будут выполнены успешно, а 20% - не выполнены.
*/
LMI_SIM_MODE: '0'
};
if ($user.phone) {
req.LMI_FAST_PHONENUMBER = $user.phone;
}
vm.doPost(path, req);
Фрикасса имеет интересную сука особенность: если отправить сумму платежа, то она обязательно будет воспринята как сумма в российских рублях, и это при том, что можно указать к оплате доллары.
Поэтому если хотите принимать через фрикассу разные валюты нужно руками конвертировать их в рубли и только потом передавать фрикассе
К примеру вы хотите взять с пользователя 1 USD, значит надо передать 67.80 и указать USD
ПРи этом цепочка получится такая Исходная->Рубль->Фрикасса->Доллары->Комиссия ввода->Рубли->Комиссия вывода->Ваши деньги рублями (потеря 15-25%)
Сделал эту тему для себя. Буду сюда закидывать всякие темы оптимизации ангуляра чтобы не потерять.
Ну во первых от самого ангуляра:
1. one-time binding - выполняет компиляцию шаблона только один раз, не работает на фильтры
2. $cacheFactory - обычный кеш, можно юзать для фильтров, особенно когда их много. Если фильтры чужие - делаем свой фильтр и внутри него кешим результаты.
3. ng-show медленнее чем ng-if