• Стало интересно как устроен компьютер, сети и так далее и как это все функционирует, что почитать?

    abs0lut
    @abs0lut
    Таненбаум "Компьютерные сети"
    Таненбаум "Современные операционные системы"
    Таненбаум "Архитектура компьютера"
    Ответ написан
    1 комментарий
  • Стоит ли экономить, покупая amd 8320 вместо intel I5?

    opium
    @opium
    Просто люблю качественно работать
    А у вас уже ссд диск и 16 гигов памяти ? Если нет то лучше деньги тратить на них а не на ваш апгрейд
    Ответ написан
    Комментировать
  • Необходим ли ноутбук в техническом вузе?

    @deliro
    Через год вангую вопросы следующего характера:
    "Необходим ли освежитель воздуха для походов в туалет?"
    "Необходима ли IDE для компиляции моих C++ проектов?"
    "Необходимо ли стильно одеваться дизайнеру?"
    Ответ написан
    Комментировать
  • Виновен ли я в самописном движке?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с одной стороны SEO-ник не прав, так как.. ну это очень глупое утверждение

    С другой стороны не правы вы были ровно тогда, когда решили потехи ради (удовлетворить свое желание саморазвития) написать вообще все с нуля. Ладно там CMS, но шаблонизатор свой написать в рамках коммерческого проекта - это уже черезчур. Эксперементируйте на здоровье но не в рамках проектов за деньги. Это могут себе позволить только люди которые пару лет проработали с существующими системами и эти самые существующие системы им уже жмут и мешают для выполнения каких-то задач.

    То есть притензия SEO-ника возможно была связана с тем что:

    - нет сайтмэпа и нет средств для генерации, а так как это не вордпресс просто поставить плагин не выйдет
    - возможно нет возможности задавать всю эту SEO лабуду вроде метаинформации и т.д.
    - все в таком духе. Любое "допиливание" клиенту теперь обойдется в солидную сумму.

    Мораль: эксперементы в свободное время, набирайтесь опыта. Старайтесь использовать готовые решения. Помимо wordpress есть масса небольших и удобных CMS с базовыми штуками которые нужны SEOникам и удобны в допиливании программистами.
    Ответ написан
    4 комментария
  • Стоит ли использовать конструктор сайтов Wix?

    Stalker_RED
    @Stalker_RED
    У всех конструкторов есть одна общая черта: как только захочется чего-то "нестандартного", каких-то компонентов, которые отсутствуют в рамках этого конструктора - начнутся непредвиденные сложности. Зачастую проще и выгоднее переделать сайт с нуля, чем дописывать модули к конструктору.

    Так что если вам нужен сайт "запустил и забыл", и текущих возможностей конструктора хватает - делайте.
    Ответ написан
    Комментировать
  • Как защитить денежный баланс на сайте от накрутки?

    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 комментария
  • Где можно найти полный список особенностей разных версий браузеров и их отличия друг от друга?

    Ну первое что приходит в голову caniuse.com
    Ответ написан
    Комментировать
  • Что должен знать и уметь системный администратор в начале карьеры?

    @vilgeforce
    Раздолбай и программист
    Умение гуглить, в том числе такие вопросы. У вас уже не получается, не продолжайте.
    Ответ написан
    2 комментария
  • Какой самый оптимальный алгоритм поиска дубликатов?

    sim3x
    @sim3x
    md5
    Ответ написан
    Комментировать
  • С помощью какого инструмента/языка программирования можно создать программу с красивым интерфейсом?

    @dmitryKovalskiy
    программист средней руки
    Ваш вопрос по семантике сходен с вопросом - "на каком языке писать самые красивые стихи?". Парадокс - это можно делать на любом. Красивые и удобные интерфейсы делает не язык, а дизайнер интерфейсов,верстальщик и программист. Язык выполняет роль инструмента. Безусловно хренячить красивый GUI на Assembler - задача не тривиальная, но это вопрос выбора инструмента. Вы где хотите интерфейс? В вебе? тогда js-фреймворки наиболее опитмальны. Настолки ? Qt или WinJs/WPF(для Windows-платформы). Мобильная разработка? Xamarin(если сразу писать на все платформы) или целевые фреймворки(Swift, Obj-C) под каждую платформу отдельно.
    Ответ написан
    Комментировать
  • Как лучше пиарить свои opensource проекты в англоязычном сегменте интернета?

    leventov
    @leventov
    Реддит и хакер ньюс это хорошо, но если голый проект без описания, вряд ли кто-то полезет его даже пробовать, хотя звездочек могут понаставить.

    1. Подготовьте проект
    - хороший README важен критически. Сделайте его понятным для дебилов. Примеры, обязательно примеры использования! Как скачать/скомпилить/слинковать проект - обязательно разбор по шагам, не пропуская ничего "очевидного"

    - если это библиотека - обязательно хорошие доки!!

    - если что-то связано с графикой, приложениями, играми - обязательно скриншоты

    - явно пропишите лицензию. На Апач/Мит/бсд реакция живее, чем на gpl, учтите

    - semver.org. версии оформляйте как "релизы" на гитхаб.

    2. Статьи, с описанием фишек проекта, углубление в кейсы, разбор кишок проекта, инженерные наблюдения, журнал разработки. то есть - блог. Можно на том же гитхабе блог захостить, можно на блогспоте. Еще есть вариант - хостить на профильном сайте, типа dzone, infoq, html5rocks, и т. д. Плюс в том, что на эти сайты можно кинуть опопсенный рерайт статьи из основного блога, т.е. без особых усилий.

    3. Пиар
    - кидаем ссылки в реддит, хакер ньюс и профильные ньюс группы/форумы/гугл-плюс сообщества.
    а) при публикации проекта
    б) каждом релизе
    в) каждом блог посте.
    "Наглеть" можно, пока плюсуют на реддите.

    - Еще, киньте ссылку в твиттер, и попросите (отдельным меншионом) какого-нибудь пиаристого чувака ретвитнуть. Можно завести твиттер проекта для этого.

    4. Работа с сообществом.
    - Принимайте пулл-реквесты, даже если они вам не 100% нравятся. Лучше принять и поправить потом.
    - заведите гугл-группу для вопросов, сошлитесь на нее в Ридми, КРУПНО.
    Ответ написан
    Комментировать
  • Какие есть бесплатные IDE для Python?

    nobodynoone
    @nobodynoone
    Ответ написан
    Комментировать
  • Как не заплыть жиром, работая удаленно программистом?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    Я уже более 2-х лет активно тренируюсь и могу поделиться опытом.

    Спортзал - штука очень спорная. Я не верю в то, что можно заниматься бесконечно долго по одной и той же схеме без утомления. В моём случае получался такой расклад, чтобы пойти потренироваться:
    - собрать сумку с необходимыми вещами для тренировки
    - добраться до спортзала
    - переодеться
    Только на этот этап можно потратить порядка часа.
    Далее сама тренировка около 1 часа.
    Затем душ, переодевание и обратный путь и вынуть просушиться вещи - ещё час.

    Итого: чтобы потренироваться пойти в спортзал нужно заложить 3 часа времени. А если ещё график не очень гибкий, то можно и в час пик попасть, когда зал переполнен и это вызывает неудобства из-за плотного графика упражнений.

    Лучше всего ориентироваться на домашние и уличные тренировки. Плюс тут несомненный в том, что как только появилось желание подвигаться - пошёл и поделал упражнения. Ещё один: можно делать несколько тренировок в день с минимальными затратами времени.

    Главный секрет поддержания интереса к тренировкам - научиться получать удовольствие от них. Для этого нужна непринужденная атмосфера и медленное сосредоточенное выполнение.

    Есть замечательная книжка Пола Уейда "Тренировка заключенных", где очень системно описаны группы упражнений для любого уровня подготовленности и практически в любых окружающих условиях.

    Но это только то, что касается силового тренинга.
    Я считаю, что есть смысл хотя бы 1-2 раза в неделю выполнять аэробную тренировку: бег, велосипед и т.п. В спортзале это делать чрезвычайно быстро надоедает - вокруг только серые стены, никакой реальной движухи. Через месяц уже тошно становится от беговой дорожки или велотренажера.

    Наверное еще добавлю, что на первых порах очень важно придерживаться плана тренировок. Это касается и графика по дням недели, и по составу. Где-нибудь через полгода-год можно уже импровизировать.

    Что касается питания. На мой взгляд самой прогрессивной диетой сегодня является LCHF. Суть сводится к уменьшению потребления быстрых и медленных углеводов до нуля, а калорийность обеспечивать жиром. Соответственно, белок само собой тоже нужен. Хороша она тем, что организм не ощущает каких-то лишений, голода нет. Жиры очень долго расщепляются, а без углеводов излишки будут выводиться организмом, вместо переноса в жировую ткань.
    Градации потребления пищи в зависимости от времени суток считаю профанацией. Можно разве что избегать питания тяжелой пищей менее, чем за 2 часа до сна.
    Ответ написан
    9 комментариев
  • Какой порядок технологий правильный?

    @Elizavetta
    Matroid: gamedev/js-разработка
    Вот эта цепочка

    html-css-jade-stylus-emmet-js-git-gulp-bower-ruby/python/php
    - что-то в ней не то, человек переходит на бэкенд, а где он научился программировать, не ясно ...

    Я за классический подход, если хотите в конечном итоге заниматься программированием, а не подлаживанием интерфейсов.
    Человек пишет, что изучает C, чтобы не сидеть без дела. Наверно он не умеет программировать ...

    1. учитесь программировать на любом языке (C/C++ ок), устраняете базовые пробелы в математике/CS, если есть,
    изучаете алгоритмы/структуры данных. Полгода раз в неделю можно писать контесты codeforces.com, там кстати Javascript поддерживается, можно прямо на JS писать, можно языки чередовать
    Подняв навык кодинга и решения задач, выбираете специализацию, в данном случае JS
    2. Изучаете язык Javascript, его особенности, тонкости, и нативный Javascript, в том числе среду исполнения-браузеры, можно по javascript.ru
    3. Изучаете лэйауты и CSS на уровне понимания как оно работает, но не более, разбираетесь в структурировании, модульности, методологии CSS, можно BEM и тп
    4. изучаете возможности HTML5, спецификации последние обновления, пишете какое-нибудь HTML5-приложение на native JS
    5. где-то в промежутке инструменты разработки, билда
    6. jQuery на уровне понимания, как все работает
    7. переходите собственно к современным фреймворкам, специализируетесь на чем-то
    Ответ написан
    Комментировать