• Может ли разработчик украсть доступ?

    Denormalization
    @Denormalization
    Timitu: вы так недоверяете человеку который делает вам сайт? Зачем же вы с ним работаете?
    У меня до сих пор туча доступов к разным клиентским серверам, биллингам и т.д. Лежат себе спокойно, и когда нужно, я всегда могу быстро залезть на сервер и решить проблему.
    Прекратите параноить, никому не нужны ваши впски за 5$ на DO. У любого вменяемого фрилансера сотни доступов к самым различным сервисам клиентов.

    PS
    Как показывает практика, в таком русле обычно мыслят проблемные клиенты, которые не хотят платить или *бут мозг до последнего.
    Ответ написан
    Комментировать
  • Прошу объяснить, как работает self и protected в Ruby?

    viktorvsk
    @viktorvsk
    Public - должны использоваться очень аккуратно. Чем меньше - тем лучше. Это внешнее API для других классов, которые будут его использовать. А чем меньше можно узнать, тем быстрее это можно выучить и запомнить, тем меньше ошибок сделать.

    Protected - это те методы, которые доступны потомкам (классам, что наследуют), но не доступны внешним классам. Грубо говоря, удобно, когда вы знаете, что от класса А будут наследовать много-много разных классов, и у этих классов будет один (или много, не важно) общий метод. Который, однако, совершенно не нужен внешним классам. Если бы не было протектеда, было бы 2 пути - сделать метод, который должен быть у всех потомков - публичным. Это плохо, потому что это лишняя информация для внешних классов. Или же - дублировать одинаковые методы в каждом классе потомке. Это плохо, потому что не DRY.

    Private - это те методы, который доступны только классу. То есть, грубо говоря, пользоваться ими вы можете только в том же файле, где идет определение класса. Например, удобно ими пользоваться для рефакторинга. Представим, что есть публичный метод, который уже много лет используют 100 разных, неизвестных классов. Но в этом методе - 500 строк. Менять метод нельзя, поэтому вы превращаете его в 10 строк-вызовов приватных методов.

    Лучше всего это усвоить, создав разные вариации и попробовав повызывать разные методы. 2 важных вещи, которые нужно помнить в Ruby:
    1) Разные ключевые слова для методов класса и экземпляра (private, private_class_method)
    2) Если тестируете поведение в консоли с использованием #send, то поведение будет не ООП-шное - #send игнорирует видимость методов

    С self все проще. По умолчанию, всегда self подставляется. Метод вызывается сначала для текущего объекта - потом смотрится наличие методов в предке и т.д. и т.д. до объекта Object. Зачем иногда явно пишут self ? Потому что в руби можно создавать методы вида def method=() end; и использовать их с пробелом: method = 2. Для этого, что бы дать понять, что используется именно метод, а не определяется локальная переменная, иногда прибегают к полной записи.

    P.S. Если что-то действительно не понятно даже здесь - берите любую книгу по ООП или википедию и пробуйте все в консоли на любом языке программирования, пока не уловите суть.
    Ответ написан
    4 комментария
  • Стоит ли хранить конфиденциальные/персональные данные на серверах Google?

    @dero2084
    Discovering new
    На этих данных наша организация держится, но эти данные интересны только предпринимателям из нашего города, а для других ценности не представляет.


    Пересмотрите, нет ли там информации которую следует отнести к комерческой тайне.

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

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

    Не рекомендуется.
    Ответ написан
    Комментировать
  • Как хранить модели с динамическим набором полей в Rails?

    @rsludge
    1. Можно воспользоваться документоориентированными БД, например Mongo
    2. Можно воспользоваться Postgres и расширением hstore.
    Ответ написан
    3 комментария
  • Автообновление файлов в Sublime Text при изменениях в репозитории Git

    ghaiklor
    @ghaiklor
    NodeJS TechLead
    Так он их и так автоматически релоадит. Sublime 3 стоит.
    Ответ написан
    Комментировать
  • Форсированное убирание www из ссылки (Nginx, HTTPS, Passenger)?

    @rakeev
    А server_name в том блоке вообще не указан? Так должно быть:
    server {
        listen 80;
        server_name example.com www.example.com;
        rewrite ^(.*) https://example.com$1 permanent;
    }
    
    Ответ написан
    3 комментария
  • Как лучше сохранить Hash расположения объектов в БД?

    mercurial
    @mercurial
    Чтобы хранить подобные модели лучше использовать NoSQL решения, типа таких как MongoDB или CoachDB, при правильном использовании — Redis тоже хороший вариант.
    В случае с PostgreSQL можно так же использовать относительно новую фичу hstore.
    Во первых нужно будет перевести метод миграций на sql, так как hstore является колонкой специфичного формата.
    Сделать это можно в конфиг-файле application.rb Вашего приложения:
    config.active_record.schema_format = :sql
    

    После чего добавьте gem activerecord-postgres-hstore в Gemfile Вашего приложения, и сгенерите hstore:setup:
    $ rails g hstore:setup
    

    Эта миграция включит расширение hstore для вашей базы данных.

    И вуаля! hstore теперь можно юзать в генерации миграций Ваших таблиц:
    $ rails g migration add_properties_to_table properties:hstore
    

    Кроме того что колонки типа hstore работают так же как сериализуемые строки, их можно использовать при выборке (select) и даже сделать индексируемыми для более быстрого поиска. Вобщем за подробностями обращайтесь к документации (ссылки приведены выше).
    Ответ написан
    Комментировать