• Кто нибудь может сказать что это? За мной следят? У меня паранойя?

    27cm
    @27cm
    TODO: Написать статус
    Предположу, что вы кот и ваш хозяин купил лазерную указку)
    Ответ написан
    Комментировать
  • Стоит ли смотреть чужой код, разбирать и затем воспроизводить его самому на память для учебы?

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

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

    Чем статика может быть опасна?
    Представь, что ты пишешь утилиту для загрузки изображений. И вот наступил момент, когда нужно указывать параметры обрезки для превьюшек. Со статикой это может выглядеть так:

    public function upload()
    {
         $width = Config::read('width');
         $height = Config::read('height');
         // .. Do upload..
    }

    (На заметку CakePHP кишит такими подходами)
    Проблемы такого подхода?

    1. Нужно знать и быть точно уверенным, что статичный класс Config, был где-то там далеко инициализирован. А вдруг он не был инициализированным?

    2. А что если ты решишь сменить источник конфига? Например читать, это все не из класса `Config` а откуда-нибудь из REST? Придется все переписывать, затем опять тестировать. Эта проблема известна как сильная связка.

    3. Попробуй написать юнит тест для такого, без хаков и изращенных костылей. Ведь для того чтобы протестировать этот метод, нам нужно где-то там в глобальном пространстве инициализировать `Config`, затем убедится что он работает.

    4. Скрытые зависимости.

    Например инициализуруя класс, в случае статики:

    $uploader = new Uploader();
    $uploader->upload(...);


    Ты и твои пользователи не видят какие у класса зависимости и от работы чего вообще он зависит. Проблема заметна особо, когда ты пишешь библиотеку или компонет.

    Но тогда почему такие популярные фреймворки как Yii или Laravel полностью покрыты статикой?

    Для того чтобы понять какие последствия несет статика, попробуй воспользоватся хоть одним компонентом Yii фреймворка отдельно. Например, если тебе нужна только CAPTCHA ты не сможешь её вытащить оттуда не переписав почти весь компонент, потому что везде внутри присутвует глобальное состояние, в виде `Yii::$app->`. То есть чтобы воспользоватся только капчей, придется подключать весь фреймворк и все его внутренние механизмы, когда это абсолютно не нужно.

    Что касается Laravel, то статики там меньше, поскольку некоторые компоненты, вроде Eloquent могут использоватся по отдельности. Статика в ларе, она существует как обёртка, но не как реализация, во многих местах в отличии от Yii.

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

    Вообще посмотри, как задачи решаются в Zend / Symfony
    Там почти везде все зависимости передаются в качестве аргументов, что есть хорошо, слабо связано, и тестируемо.
    Ответ написан
    5 комментариев
  • Где полезны графы?

    > где наряду с NoSQL еще и графы используются
    интересная формулировка)

    > В каких случаях это в БД может быть полезно?
    во всех задачах, где глубина и "разнообразие" связей между сущностями сравнимо с количеством этих сущностей.
    Возьмем для примера две простые ситуации:
    1) есть заказ в интернет-магазине с некоторым числом заказанных товаров. Вне зависимости от того, реляционную модель вы будете использовать или какую-то еще, скорее всего вам будет удобно рассматривать две сущности: Order и OrderItem. В первую вы добавите сведения обо всем заказе целиком (инф. о клиенте, дату заказа, выбранный способ доставки, способ оплаты и т.д.). Во второй сущности у вас будет, например, id товара и его количество (1 микроволновка, 2 флешки, 5 CD-R). Теперь, чтобы вы могли знать, что какие-то OrderItem имеют отношение к конкретному Order, вам следует тем или иным способом смоделировать связь. Если у вас SQL-база, вы добавите к Order-у поле Id, а к OrderItem поле OrderId и сделаете внешний ключ. Если у вас документная база, то, к примеру, можно весь заказ с его элементами разместить в одном json-документе, и элементы заказа будут подобъектами в массиве items объекта заказа. Со временем у вас появится много заказов и много элементов заказов. Однако связи между ними у вас всегда будут достаточно простые: у каждого заказа будет некоторое количество элементов. Сами заказы вы связывать не будете, как не будете связывать элементы заказа. Глубина связей сущностей будет ограничена одним переходом.
    2) у вас есть социальная сеть (да, знаю, банальный пример), и конечно же у вас есть функция "добавить в друзья". В отличие от предудыщего примера, мы для рассмотрения можем взять только одну сущность - "пользователь", однако за счет того, что каждый каждого может зафрендить, у вас даже для одной сущности будет очень большой набор фактических связей, потенциально с большой глубиной (знакомые знакомых и т.д.).

    Обе проблемы теоретически можно решить с помощью SQL баз данных, однако графовые базы будут выигрывать во второй задаче в сложных запросах по обработке связей (скажем, найти всех моих друзей, которые идут на такое-то мероприятие). Этот выигрыш вытекает из архитектурных особенностей графовой БД, например, в графовой базе часто при сохранении связи сохраняется "указатель" на физическое расположение связанных данных, в то время как в реляционной базе связи моделируются внешними ключами, и при обработке требуют выполнения операций поиска (пусть и индексированного). Вообще, в каком-то смысле связи в графовой БД это first-class citizens, а в реляционной БД связи моделируются программистом (ограничения целостности вроде внешних ключей просто помогают ему поддерживать данные в согласованном состоянии).
    Ответ написан
    2 комментария
  • Как научиться писать такой ООП код?

    @Copperfield
    Android dude
    Мне в школе физрук говорил:"Чтобы много подтягиваться - нужно много подтягиваться".
    Ответ написан
    Комментировать
  • Поток System.in - экземпляр абстрактного класса. Как такое возможно?

    @FoxInSox
    Во-первых создать экземпляр абстрактного класса можно, необходимо только реализовать абстрактные методы:
    InputStream is = new InputStream() {
    	@Override public int read() throws IOException {
    		return 123;
    	}
    };
    System.out.println(is.read());//123

    Во-вторых у InputStream'а целая гора наследников. Я не знаю как там формулировал Шилдт, но он наверняка не имел ввиду что System.in это именно экземпляр InputStream'а.

    В-третьих вы сами можете(должны) это проверить:
    System.out.println(System.in);//java.io.BufferedInputStream@5577140b

    Т.е. System.in конкретно на моей машине в моей jvm это экземпляр BufferedInputStream.

    PS больше пишите код. На одну прочитанную страницу книги должна быть написана одна страница кода.
    Ответ написан
    Комментировать
  • Как эффективно взаимодействовать между классами?

    gadfi
    @gadfi
    https://gamega.org
    класс кнопки который что то сортирует, другой класс кнопки что то выводит .....если эффективно то переписать этот ужас.
    Кнопка это кнопка, она не должна все это делать, вы можете навесить на нее слушателя и отловить событие, а вот по этому событию что то делать.
    Логика и ui должны быть максимально слабо связаны.
    Ответ написан
    Комментировать
  • Как разместить 70 датчиков - герконов на arduino?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Много вариантов. Например сдвиговые регистры 74LS165, вешаем нужное количество в цепочку, подаём с ардуины сигнал защёлкнуться (1 выход), затем выдаём тактовые импульсы (ещё один выход) получая последовательно состояние каждого из входов (1 вход).
    Или матрицу можно соорудить, на 74LS154 выводим номер одной из 16 линий (4 выхода), на входах принимаем ответные линии (5 входов дадут 80 датчиков).
    Добавлю, матрица имеет тот плюс, что в ней надо тянуть гораздо меньше проводов до датчиков (16+5 = 21), чем при мультиплексировании.
    Ответ написан
    Комментировать
  • Как построить гладкую кривую по избыточному количеству точек?

    @Eddy_Em
    Скользящая медиана по нужному количеству точек спасет.
    P.S. Если нужно строго сохранить интеграл под кривой, то скользящее среднее.
    Ответ написан
    Комментировать
  • Какой выбрать гипервизор для Ubuntu 14.04?

    fallen8rwtf
    @fallen8rwtf
    Да можно выбрать и VirtualBox чтобы не запариваться. Использую на работе для работы с окнами, ни разу не подводил пока что. Нужно было быстро, надежно и вчера))
    Ответ написан
    2 комментария
  • Java или .NET - выбор с перспективой (не холивар)?

    @M1Anderson
    Ruby on Rails developer
    Важно, что бы через год-два я смог найти работу хотя бы полу-джуниором, не получал на много меньше чем джуниоры из другой платформы

    На уровне джуниора в любой технологии примерно одинаковые расценки. Но вакансии для java джуниоров, лично я, встречаю чаще.

    (как никак за год моего изучения какой либо технологии (до уровня джуниора) .NET может уже приобрести кроссплатформенность и потихоньку сместить джаву в сторону поддержки старых проектов и Android

    За год? :) Нет, не может. И через 10 лет она ее не сместит, на это разве что Scala способна. А на андроиде так и останется, скорее всего.

    Не буду оригинальным и посоветую попробовать и то и другое, а потом выбрать, что в душу запало. Других вариантов нет. Стать лучшим можно работая в удовольствие, а не в рассчете на какие-то перспективы, тем более что у этих двух монстров они примерно равны.
    Ответ написан
  • Как правильно читать книги по программированию?

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    сперва были вопросы "как стать программистом"
    затем вопросы "что читать"
    теперь уже "как читать"
    может скоро будет "как учить алфавит, а то за меня родители пишут на тостере".

    Для книг - читайте простейшие туториалы и сразу практика. Сложные книги - потом, когда в голове уже будет база.

    Добавлю еще момент:
    Почитайте статью megamozg.ru/post/10126
    Там очень понятно указано, что профессиональный навык и боль программиста - гиперконцентрация, которая необходима, чтобы освоить понятия и вещи для профессиональной работы. 40 минут это как-то несерьезно.
    Ответ написан
    3 комментария
  • Как правильно читать книги по программированию?

    tlito
    @tlito
    drupal, c++, seo
    лучше конспектировать.
    пишите на листике коды и пробуйте придумывать промежуточные задания или заглядывайте в задания регулярно. можете поиска задания по "ваш язык"
    Ответ написан
    Комментировать
  • Как убрать историю команд mc?

    Ernillew
    @Ernillew
    Администрирую *nix-системы с 1997 года
    export HISTIGNORE=”&:ls:[bf]g:exit: cd \”\`*: PROMPT_COMMAND=’*”

    www.midnight-commander.org/wiki/doc/faq#a6.8Iseelo...
    Ответ написан
    3 комментария
  • Можете дать пару советов по C#?

    bobrovskyserg
    @bobrovskyserg
    И тебе спасибо.
    1. Чтение - это лишнее: ты кодер или читатель?
    2. "Чтоб работало". Все другие принципы непринципиальны, если не соблюден этот.
    3. Чаще следует применять короткие конструкции, а избегать длинных: писать запаришься и отлаживать.
    4. Со времени появления концепции обработчика ошибок "fatal error"ы канули в прошлое.
    Ответ написан
    4 комментария
  • Какие здесь ошибки и как их исправить?

    Ewintory
    @Ewintory
    Java / Android developer
    Прочитайте про Activity и Fragment. Между ними есть большая разница.
    В данном случае setContentView и getActionBar это методы Activity, во Fragment их нет. В нем нужно действовать иначе. Это вообще азы, без их понимания ни о какой разработки не может быть и речи.
    Ответ написан
    4 комментария
  • Какова архитектура крупных приложений на низкоуровневых языках?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    ООП это не архитектура, а парадигма. Скорее всего Вы хотели спросить, какие есть паттерны проектирования в парадигмах процедурного и структурного программирования. Перечислю кратко: модули (структурные блоки, библиотеки, часто построенные в иерархическую систему при помощи dependency injection), интерфейсы (наборы экспортируемых функций, которые видны снаружи модуля), шаблоны (функции, абстрагированные от типов данных, при помощи которых парадигма обобщенного программирования позволяет порождать типизированные реализации), слои (как ни странно, но до ООП тоже были абстракции, они реализовывались при помощи принципа разделения модулей на слои, т.е. группы модулей, реализующие более низкоуровневые или более высокоуровневые задачи, программирование обычно начинается с самого высокого слоя абстракций, из него можно использовать только вызовы на 1 слой ниже, но не на 2 слоя, т.е. нельзя смешивать абстракции и пропускать слои, обращаясь, грубо говоря, от нажатия кнопки сразу к кластеру на диске), заглушки (должны Вам должны быть известны, это функции и модули без реализации, необходимые чтобы запускать и отлаживать еще не дописанную программу, они могут выводить вызовы к ним на экран или в логи, а состоять только из возврата правдоподобных но не настоящих данных). Так же есть много паттернов структур данных, которые тоже очень сильно упрощают жизнь, если выбрать определенную их реализацию для своего проекта и придерживаться принципа однородности структур данных, например, не использовать две разные реализации двусвязных списков в одной программе (или модуле). Структуры данных вполне заменяют объекты, более того, работают они несравнимо быстрее, не создают проблемы неоднозначности моделирования, как в ООП например, когда Вы не можете решить, где должен находиться метод "сесть" у "жопы", у "стула" или у их общего контейнера "мир", в котором это происходит. Распространенные структуры данных: набор полей, список (в т.к. односвязный, двусвязный, циклический и т.д.), стек, дерево (тоже может быть от односвязного до пятисвязного с вариациями), множество, очередь, ассоциативный массив и хеш-таблица. Все, устал писать, рекомендую почитать Дэйкстру, Вирта, Кнута. А смириться с отсутствием ООП может помочь занятная статья в стиле холиварного срача: blogerator.ru/page/oop_why-objects-have-failed
    Ответ написан
    Комментировать
  • С какой должности в ИТ не нужно программировать?

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

    dintsec
    @dintsec
    Маркетолог, копирайтер
    Ответ написан
    Комментировать