Задать вопрос
  • Какие разделы английского стоит выучить для фриланса?

    @heartdevil
    плыву как воздушный шарик
    Учите сугубо ИТ английский.

    Открою секрет.

    Сидите часто на stackoverflow и читайте самые популярные вопросы и ответы от крутых разработчиков (владеющих отличным английским). Там легко понять уровень английского по ответам и вопросам. Это поможет не только "вариться" в своей среде, но и "вариться" по-английски. Запоминайте структуру сложных вопросов. И как они вообще подготавливаются. Далее смотрите, как на них отвечают. Зачастую, всегда просят описать задачу. Что, собственно, на самом деле и происходит на фрилансе. Далее, просят уточнить некоторые моменты. Затем постят свои решения с описаниями. Тут тоже нужно уделить внимание на подготовку ответа. Часто, конечно, это просто код)), но вам никто не запрещает, к примеру, спросить уточнения (не для понимания кода или алгоритма, а для понимания того, как разработчик будет разжевывать вам ответ на английском ;-)), если самолюбие позволяет)). Можете даже выписывать отдельные словосочетания, которые они применяют. К примеру, создал массив, присвоил значения переменной, пробежался циклом по массиву, создал класс, имплементировал интерфейс, перегрузил чего-то там и так далее.

    В таком ритме быстро научитесь понимать вопросы на английском и умело отвечать, но все это письменно. Разговорный вам может понадобиться, если клиент будет часто по скайпу вам названивать. Его освоить в разы сложнее. Поэтому можете честно заявлять клиенту, что уровень пока у вас не позволяет вести разговор. А там все от клиента будет зависеть.
    Ответ написан
    3 комментария
  • Как защитить денежный баланс на сайте от накрутки?

    copist
    @copist
    Empower people to give
    Пользуйтесь ключами RSA, у каждого пользователя своя пара ключей. Один (публичный) передаётся на сервер, другой (приватный) остаётся у пользователя. Когда делается транзакция, например покупка, то на сервер должна поступать информация:
    1. идентификатор покупателя
    2. номер счёта покупателя
    3. идентификатор продавца
    4. номер счёта продавца
    5. идентификатор покупки
    6. валюта
    7. точная сумма покупки
    8. точное время транзации в таймзоне UTC

    К каждой транзакции должен прилагаться отпечаток от всех этих значений, подписанный с использованием приватного ключа покупателя. На сервере этот отпечаток должен проверяться с использованием публичного ключа того же пользователя. Публичный ключ можно хранить в базе же. Он только для сверки.

    Чтобы выполнить транзакцию (покупку), нужно проверить, хватает ли средств на балансе пользователя-покупателя. Для этого нужно изъять из базы все транзакции пользователя-покупателя, по каждой транзакции провести проверку отпечатка и суммировать те, у которых отпечаток корректный.

    Проверяйте время транзакций. У каждого покупателя все транзакции должны быть строго хронологическими. Не должно быть чтобы покупка N+1 была ДО покупки N.

    Это вычисляется долго. Чтобы ускорить вычисление остатка, можно ввести специальный тип транзакции "состояние на начало месяца". Его должны выполнять сторонний доверенный сервер, имеющий свою специальную пару ключей. Тогда текущий баланс = последний остаток на начало месяца + все поступления - все оплаты. Вычисляется значительно быстрее.

    Если злоумышленник взломает базу данных, то внесёние записей будет чрезывычайно затруднительным, потому что подделать отпечаток транзакции будет невозможно. Слабое звено - можно просто выгрузить базу или таблицу в файл и затем дропнуть таблицу или базу и шантажировать вас потерянными данными. Чтобы исключить такое, запретите пользователям (не покупателям, а тем, которые подключаются к базе) делать DROP TABLE/DATABASE. Ещё делайте резервные копии. Ещё держите зеркало базы данных.

    Всё что я описал, будет бесполезно, если злоумышленник заменит исходный код платёжного сервера, так как он сможет просто вырубить все проверки на отпечатки. Поэтому платёжный сервер не должен быть скриптовым. То есть не PHP, node, Python, Ruby. Это должен быть компилируемый код. С цифровой подписью. Сервер не должен исполнять приложения с отсутствующей или неправильной цифровой подписью.

    Но это не мешает подменить список доверенных центров сертификации на сервере, чтобы запустить поддельное приложение вместо платёжного сервера. Поэтому на стороне СУБД нужно реализовать механизм, который не даёт подключиться к базе любому приложению. Это приложение должно иметь специальный механизм доступа. Ограничение по IP, специальные заголовки, особенная сессия. Значит это не MySQL и, скорее всего, не PostgreSQL.

    Ещё о каком-нибудь головняке рассказать или уже достаточно?

    Специалисты из WebMoney, PayPal, Yandex.Деньги и онлайн-банков сейчас не скрывая улыбки смотрят на мой алгоритм. Привет вам всем, друзья!

    Относительно реализации на PHP. Два сервера с запросами через AJAX не сделают сервер надёжнее, потому что всё можно подделать в браузере.

    Нужно предотвратить доступ пользователя к серверу. В Интернет огромное количество статей на эту тему. Я боюсь, что полный список средств предотвращения доступа я просто не вспомню. В любом случае, способов взлома больше, чем методов защиты в PHP.

    Вот списочек способов проникнуть на сервер:
    • Через уязвимости серверных компонентов;
    • Через уязвимости в веб-окружении сервера;
    • Через удаленное выполнение произвольного кода;
    • Через наличие переполнений;
    • Через инъекции (внедрение кода) (например, SQL Injection);
    • Через обход системы аутентификации веб-ресурса;
    • Через XSS / CSRF;
    • Через перехват привилегированных аккаунтов (или сессии таких аккаунтов);
    • Через Remote File Inclusion / Local File Inclusion;
    • Через компоненты CMS, CMF и фреймворков с известными уязвимостями;
    • Через перенаправление на другие сайты c помощью открытых редиректов;
    • Через сканирование директорий и файлов (поиск дампов, данных про git, svn);
    • Через подбор паролей.


    И вот списочек способов снижения вероятности проникновения и нанесения непоправимого ущерба:

    Состояние серверов
    • Держи сервера в актуальном состоянии, следи за найденными уязвимостями, обновляй серверные приложения
    • Делай бакапы файлов и баз данных, держи зеркальную базу данных; в случае беды - используй копию
    • Используй виртуальные машины, делай периодически снимки, а в случае взлома восстанавливай машины из снимков
    • Больше не вспомню. Держи админа под рукой.


    Доступ к серверам
    • Не подключайся от имени пользователя root, заведи другого.
    • Установи на всех пользователей длинный пароль.
    • Запрети всем пользователям делать sudo. Можно разрешить делать некоторые отдельные операции, например, nginx reload.
    • Для подключения к серверам пользуйтя SSH или SFTP, авторизация по ключам
    • Смени порты сервисов SSH и SFTP
    • Установи ограничение на список IP, с которых можно подключиться к серверу. Сделай себе белый IP адрес.


    Внутренние сервисы
    • Если всё приложение на одном сервисе, то все внутренние службы (mysql, memcached, raddis, rabbit) должны слушать только интерфейс 127.0.0.1. ( habrahabr.ru/post/212265 )
    • Если приложение включает несколько серверов (отдельно база, отдельно PHP), то есть представляет собой кластер, то службы должны слушать только те IP, которые относятся к кластеру.
    • Смени стандартные порты всех сервисов
    • Пользователю UNIX от которого работает PHP-FPM / NGINX/ APACHE, должны быть открыты для записи только несколько директорий (upload, логи, временные файлы), а для исполнения - вообще ничего нельзя.
    • Пользователю базы данных не должны быть доступны деструктивные и небезопасные операции (DROP/ALTER/CREATE PROCEDURE), может быть даже для INSERT/UPDATE/DELETE в данных по финансам использовать другой аккант в базе данных


    Приложение PHP
    • Защищай сайт с помощью SSL
    • Используй дополнительный платёжный пароль, ограничивай количество попыток оплаты с неверным паролем
    • Используй server side http cookie, короткие сессии с привязкой ключа сесии к IP и UserAgent клиента
    • Все запросы к базу должны быть только с использованием связываемых параметров, никаких конкатенаций запроса с параметрами (Внедрение SQL-кода, SQL injection, php.net/manual/ru/security.database.sql-injection.php и другое по фразе SQL injection )
    • Не доверяй проверкам данных на стороне клиента. Да, они ускоряют работу, но их можно легко подделать. Поэтому все проверки дублируй в коде на сервере.
    • Не доверяй данным пользователя: фильтруй строки, отрезай теги, укорачивай до допустимой длины, приводи к числам все числа (wikipedia: CSS, Cross Site Scripting — «межсайтовы..., XSS для новичков, Яндекс: XSS-атаки и другое по фразе "XSS")
    • Все запросы на сервер должны сопровождаться токеном безопасности ( https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D... https://learn.javascript.ru/csrf habrahabr.ru/post/235247 и другое по фразе "CSRF" )
    • Нигде не делай авто-редирект на страницу, указанную в параметрах запроса - так обычно делают, чтобы после логина вернуться туда, откуда была вызвана форма логина
    • Про содержимое транзакций уже писал, не знаю что из этого тебе пригодится
    Ответ написан
    4 комментария
  • Как сделать треугольник с изображением?

    copist
    @copist
    Empower people to give
    1. картинка-треугольник codepen.io/mikehobizal/pen/EHDsu
    a5627b5350334bf090f5d2049ed569ea.gif

    2. картинка-треугольник с zoom при наведении
    codepen.io/zajonsss/pen/nzCie
    941fa4584ff50675263b57cfdef1e134.gif
    Ответ написан
    Комментировать
  • Приведите пример задачи на JavaScript, в которой не обойтись без использования паттерна?

    copist
    @copist
    Empower people to give
    Шаблоны проектирования и шаблоны программирования - это описания лучших вариантов решений для типовых задач. Многие тыщи программистов уже решали такие типовые задачи и у большинства получалось добиться хорошего результата приблизительно одинаковым способом.

    Под задачей иногда подразумевается глобальные:
    как сделать так, чтобы второй программист понял мой код (например, MVC/MVVM - разделение кода на логику и представление, шаблонизация Twig/Jade, фреймворки)
    как сделать так, чтобы мы кодили быстро (фреймворки, деление кода на фронт/бак, шаблонизация Twig/Jade, доступ к данным через ORM/ADO, препроцессоры LESS/SCSS/Stylus)
    как сделать так, чтобы мы к себе смогли легко включить сторонний модуль или наш код могли подключить к чему-нибудь (плагины, модули)

    Средне-масштабные
    как сделать так, чтобы по возможности было меньше обращений на сервер (кэш, lazy init, client-side validation, rich internet application)
    как обрабатывать долгие запросы (очередь, асинхронная обработка, comet, websocket, long polling)
    что делать, если интерфейс "замёрз" (показать spinner, вывести "сожалелку :(")
    как сделать мега-форму из 50 полей (сделать пошагового мастера)
    как показать что-то очень важное (popup, модальное окно)

    Мелкие
    как сделать так, чтобы интерфейс реагировал на поведение пользователя (события)
    как сделать так, чтобы код выполнялся периодически (таймеры, интервалы)
    как сделать так, чтобы у меня скрипты JS подключались по мере необходимости и только один раз (requirejs)
    как сделать так, чтобы у меня одинаковая задача запускалась только если предыдущая уже закончилась (например, не посылать запрос AJAX, если предыдущий не отработал; не анимировать два раза один и тот же объект DOM)

    Вообще невозможно сказать, что каждая из них решается комбинацией синглотонов. Или фабрик. Там куча-мала, просто завал мелких фрагментиков кода, блоков логики, в каждом из которых что-то было сделано по шаблону.

    Вот тут на примерах на Javascript с объяснением habrahabr.ru/post/132472
    Ответ написан
    Комментировать
  • Почему после отправки POST - запроса через AJAX идет перенаправление на localhost:8000/?

    MAKAPOH
    @MAKAPOH
    многостаночник
    исходный адрес локального серва - localhost:8000, после отправки запроса меняется на - localhost:8000/?. Почему это происходит?
    По всей видимости из за этой строки:
    return redirect('/')

    Можно ли использовать AJAX без формы
    Можно, повесьте на кнопку обработчик нажатия и внутри отправляйте ajax запрос. Вы собственно так и делаете, поэтому форму можно просто удалить из разметки.
    Ответ написан
    Комментировать
  • Как подтягивать картинки в Python-Django через media?

    syschel
    @syschel
    freelance/python/django/backend
    Serving files uploaded by a user during development.

    На продакшене статик и медиа работают через нджинкс/апач, без участия джанги.
    На девелоп сервере, под runserver нужно в урлах прописывать доп настройки.
    Ответ написан
    Комментировать
  • Верстка -> Frontend -> Full Stack developer - какой оптимальный путь развития?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что бы быть full stack вы должны понимать что происходит на каждом уровне вашего приложения. от кнопочек которые вы верстаете, до того как обрабатываются запросы на сервере, в плодь до взаимодействия с базой данных через все прослойки.

    Вне зависимости от выбранного языка или фреймворка, принципы остаются примерно те же. С Symfony мы можем говорить о гексагональной архитектуре, луковой архитектуре, data mapper и т.д. С nodejs мы тоже можем обо всем этом говорить но там не особо развиты идеи data mapper (на данный момент). Приходится жить с active record или dbal. Ну и опять же управление зависимостями в js и в php по разному организованы, хотя суть (dependency inversion) остается той же.

    Единственный совет дам - не распыляйтесь. Старайтесь не переключаться между фронтэндом и бэкэндом слишком часто, это уменьшит скорость обучения. Большая часть знаний в принципе спокойно мигрирует из одной сферы в другую, так что не переживайте.
    Ответ написан
    Комментировать
  • Пригласили на фирму на 2триал дня. К чему быть готовым?

    @dmitryKovalskiy
    программист средней руки
    Предложение странное. За 2 дня вы не сделаете ничего. 1 день только настройка рабочего места, второй - поверхностное погружение в проект и знакомство с командой. Я бы потенциально готовился к худшему - возможно вы исправите бесплатной какой-то баг и вас отправят домой.
    Ответ написан
    Комментировать
  • Как сделать midleware в django, который меняет TEMPLATE_DIRS?

    @marazmiki
    Укротитель питонов
    Когда Вы делаете такие штуки, нужно иметь в виду, что объект settings глобален. Вот зайдёте Вы с мобильной версии, миддльварь сменит TEMPLATE_DIRS. А сразу же следом за Вами (пока джанга не успела начать рендерить шаблон) — кто-нибудь с компьютера. И значение TEMPLATE_DIRS вернётся в исходное.

    Ключевое слово для поиска решения — thread locals.
    Ответ написан
    9 комментариев
  • Нужен совет по направлению развития начинающего программиста?

    Dit81
    @Dit81
    Security researcher, pentester, internet-marketer
    Я бы остался на Python'е. Сейчас вакансий меньше, но они есть... И постепенно растут и места и зарплаты... ) А если вы чуть поизучаете основы, библиотеки и фреймворки, то уже можно будет смотреть в сторону middle программиста. Есть вариант поискать opensource решения или включится в разработку реальных проектов. И с этим идти к работодателю и просить большую зарплату... :)
    Ответ написан
    2 комментария
  • Как бывшему C++ разработчику сделать портфолио backend разработчика?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Релокация - это конечно круто, но вы должны были понимать риски, особенно учитывая визу, если я правильно понимаю - она учебная. Но думать о резюме как бы раньше надо было.

    Вы сейчас кстати делаете еще одну ошибку: у вас нет времени учить новое. Даунгрейд без страховки - это очень мягко говоря сложно. Веду к тому, что:
    1. Вам придется перекроить мозг, что бы работать бэкендщиком.
    2. Даже если на пыхе напишите несколько сайтиков - первое на что вам следуют надеяться - это fullstack разработка. Угадайте на какой CMS больше всего заказов? Но у вас по прежнему не будет строчки про backend, будет про wp например.
    3. Основной профиль вы начнете забывать, а нового еще не получите.

    ---

    Что это может быть? Блог? Магазин?

    Ответ на этот вопрос вы найдете на фриланс бирже. Если же хотите просто написать псевдо сайтики - нужно будет быть идиотом, что бы вас принять на работу. Это только оттолкнет потенциальных работодателей.

    В начале 2000х можно было сделать форум или гостевуху, а что котируется сейчас?

    Чатики, Социальные медиа, Стриминг, Эл.Магазины, всякие webosckets, мобильные приложения и т.д.

    Что делать с фронтендом?

    Где брать дизайн?

    Покупаем на той же бирже фриланса.

    На какие примеры ориентироваться?

    Это вопрос к заказчику и ТЗ.

    ---

    В общем ситуация у вас конечно полное уг, но я бы на вашем месте делал следующее:
    1. Взял язык с самым низким стартом - да, тот самый богомерзкий php и за счет него фрилансил. Цель - проживание.
    2. Мне тоже нравится Golang, но проекты на нем сейчас в основном внутренние во многих компаниях. Что бы получить работу по удаленке нужен реально крутой опыт, если он есть - круто надо размещать резюме, если нет - оставить эту затею. В крайнем случае, если будет время - делал бы открытые проекты на github для получения опыта и для строчек в резюме.
    3. Активно искал бы работу по основному профилю.

    Этот план не эффективен то точки зрения карьерного роста (он очень медленный), но с точки зрения стабилизации жизнеобеспечения - годится.
    Ответ написан
    4 комментария
  • Нужен совет по направлению развития начинающего программиста?

    @dmitryKovalskiy
    программист средней руки
    За полтора месяца я выучил свой первый язык – Python
    А я выучил C++ за 21 день
    Но так, как я не планирую оставаться фронтенд разработчиком, то дальше хочу изучить javascript
    Вообще противоречите сами себе.
    По сути вопроса - очередной вопрос "Что делать дальше?". Выучите 1 платформу хорошо. Знаете Python? Доучите Django и разберитесь с вебом. Если будете хреново знать Python и PHP - не нужны будете никому. Если хорошо разберетесь с одним стеком технологий - надежды появятся. У вас только ни слова про математическую и алгоритмическую базу. Разберитесь с архитектурой программных продуктов, паттернами. SQL и нормальными формами базы данных. Чтобы пойти стажером - вы должны уметь красиво протащить данные от БД до клиента и красиво отрисовать их.
    Ответ написан
    Комментировать
  • Как анализировать вакансии front/-backend разработчиков?

    DevMan
    @DevMan
    не стоит удивляться: в таких вакансиях расставляют требования точно так же как и вы теги к своему вопросу.
    Ответ написан
    24 комментария
  • Как анализировать вакансии front/-backend разработчиков?

    @rsi
    software engineer
    Типичная ситуация на рынке вакансий. Работодатель запрашивает ненужные знания и предлагает вымышленную зарплату, на вакансию откликаются люди которые якобы знают все эти технологии. По факту работу получает человек который дай бог знает половину из того что он наговорил, а работодатель хорошо если платит половину от тех денег которые обещал.
    Ответ написан
    16 комментариев
  • Как анализировать вакансии front/-backend разработчиков?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Как правило, это пишет "специалист" из отдела кадров, который понятия не имеет об используемых терминах.
    Просто напишите резюме, в котором будет как можно больше слов из описания вакансии.
    Я понимаю, что сложно заявить о знании Oracle Pl/SQL не использовав его, но можно написать "SQL, MySQL". Такое резюме имеет хорошие шансы пройти первичный отбор, а уж затем можно пообщаться с кем-то более вменяемым.
    Иногда в небольших компаниях начальство и отдел кадров понятия не имеют, что используется на производстве, поэтому и пишется отсебятина. Очень важно пройти первичный отсев и выйти на уровень реально связанный с используемыми технологиями. Даже если потом выяснится, что вы не подходите, вы можете спокойно развернуться и уйти, а можете и подучиться. SVN и GIT не так уж сложны. Да и освоить Oracle после MySQL тоже будет несложно. Подавайте смелее, а на месте уже разберетесь.
    Ответ написан
    2 комментария
  • Как определить Permission в модели для поля?

    @deliro
    Как и все остальные права
    if user.has_perm('your_app.can_edit_meta'):
        # good mojo
    else:
        # bad mojo
    Ответ написан
    1 комментарий
  • Как быстро разрабатывать в PyCharm?

    @deliro
    1) Логичнее и правильней использовать refactor -> rename
    2) Есть функция автодеплоя и по FTP, и SFTP.
    3) Да
    4) Минимум две (тёмная и светлая) отличные темы. Кажется, их даже можно кастомизировать.

    P.S. Может, сперва стоит читать документацию?
    P.S.S. "Мыши кололись, плакали, но продолжали есть кактус"
    Ответ написан
    2 комментария
  • Что нужно первично выучить для джуниора по JS/Node?

    @Elizavetta
    Matroid: gamedev/js-разработка
    Покажите компанию/вакансию, уровень требований может быть разный.

    Что бы мне надо изначально заиметь, чтобы в итоге выйти к node и нормальному с этого профиту?

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

    Сначала просто JS, как выше написали. Для трудоустройства очень важно бережно коллекционировать проекты и задачи, которые выполняли, коммитить на github. быть готовым проходить технические интервью, и оперативно выполнять тестовые задания (если потребуется).
    Подробнее могу рассказать в скайпе.
    Ответ написан
    Комментировать
  • Что нужно первично выучить для джуниора по JS/Node?

    @NicoBurno
    Разработчик-прокрастинатор
    Просто начните писать настоящий код на настоящих проектах. Говорю из своего опыта...
    Если сможете самостоятельно написать БЕЗ ПЛАГИНОВ(но хотя бы с jQuery) простейший функционал в виде каруселей, модальных окон, анимации, отправку AJAX-запросов, в общем все то что необходимо для сайтов уровня "лендинг" - то вы уже не Code Monkey, а полноценный Junior способный самостоятельно выполнять простейшие проекты.

    После этого можете отказаться от jQuery в целях обучения. Как только будете комфортно себя чувствовать на нативном JS - можете приступать к node.js
    Ответ написан
    Комментировать
  • CodePen/JSFiddle альтернатива на своем сервере?

    copist
    @copist
    Empower people to give
    JSFiddle и Codepen используют онлайн редактор кода с подсветкой синтаксиса CodeMirror.
    Cloud9 используют Ace.

    Нужно приделать авторизацию, храненение кусков кода и отображение результата.
    База подойдёт NoSQL, а можно в файликах хранить
    Интерфейс можно написать на AngularJS + NodeJS + Meteor, а можно на PHP + jQuery собрать

    Репо CodeMirror https://github.com/codemirror/codemirror
    Репо Ace https://github.com/ajaxorg/ace

    Есть навороченный, но не такой красивый как Codepen проект JSBin https://github.com/jsbin/jsbin/

    А тебе зачем?
    Ответ написан
    4 комментария