• Выкатка самолёта МС-21 в Иркутске
    0
    Удлинение крыла же положительно повлияет на энергоэффективность полёта и уменьшит расход топлива?
  • Прохождение интервью — взгляд изнутри
    0
    У Вас в данном случае множество задач для собеседования опытного разработчика («мега спецы с 30 годами опыта») не пересекается с множеством задач, реализуемых в вашем проекте.
  • Прохождение интервью — взгляд изнутри
    0
    строки никто не зеркалит


    Что и следовало доказать.
  • Прохождение интервью — взгляд изнутри
    0
    Что есть «энтерпрайз»?


    разработка корпоративных приложений
  • Прохождение интервью — взгляд изнутри
    –1
    не может даже строку отзеркалить


    А как это можно применить в энтерпрайзе?
  • Дыра в безопасности IP-телефонов D-Link? Нет, это «Особенность»!
    0
    А если вместо удаления guest, поменять пароль на устойчивый к взлому, аппарат вернет старый пароль?
  • Сноуден пролил свет на ситуацию со взломом криптографии. Все плохо
    0
    www.opennet.ru/opennews/art.shtml?num=33188
    Компания Coverity, развивающая инструментарий для автоматического анализа кода на предмет наличия проблем безопасности и ошибок представила очередной ежегодный
    отчёт (PDF, 550 Кб) с результатами изучения 37 млн строк кода из 45 наиболее активно разрабатываемых открытых проектов и 300 млн строк кода из 41 анонимного проприетарного продукта. В среднем, в открытых проектах было выявлено 0.45 дефектов на 1000 строк кода, для проприетарных продуктов данный показатель составляет 0.64, при этом средний показатель качества для всей индустрии разработки ПО составляет 1 ошибка на 1000 строк кода.
  • Разбор адресов «нечёткими регулярными выражениями»
    0
    Я делал похожую задачу для сравнения фио клиентов в CRM на Java.
    Использовал metaphone с корреляционным сравнением.
    Вычисляется один раз ключ для клиента и хранится в базе, потом при вводе еще раз вычисляется ключ и находится по нему документ клиента.
    И да, лучше всего сделать больше полей ввода данных.
  • Windows Azure для стартапов: ресурсы на 150$ каждый месяц
    0
    PayPal для оплаты поддерживается?
  • А есть ли причины использовать статически типизированный функциональный язык программирования?
    +1
    Хотел бы добавить:

    > Причина 1. Я не хочу следовать последним тенденциям

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

    > функции высшего порядка для коллекций (есть в C# и других языках, и будет в Java)

    В Java уже есть Collections и Generic, как основа, и множество готовых библиотек типа Guava.

    Императивные языки обзаводятся техниками функциональных и наоборот.
  • Оптимизируем, оптимизируем и еще раз оптимизируем
    0
    Not null:
    Здесь тоже можно использовать static :)
    Постоянные проверки на null сильно засоряют код.

    private static final Item ItemObj=new Item(); // =Item.getEmptyStaticObject();
    
    public Item someMethod() {
        //some logic
        if (something) {
            Item item = new Item();
            fillItem(item);
            return item;
        }else{
           return ItemObj;
        }
    }
    
  • Struts2 is under attack или CVE-2013-2115
    0
    Уязвима ли первая ветка struts 1.x?
    Я из приведенных выше ссылок этого не понял.
  • Власти США требуют у крупнейших интернет-компаний раскрыть пароли пользователей
    +1
    Что мешает использовать более криптостойкий SHA2?
  • 5 «хаков» для уменьшения накладных расходов при сборке мусора
    –2
    Хотелось бы еще добавить к статье, что конструктор по умолчанию ArrayList создаст массив из 10 элементов, а это лишнее потребление памяти в ряде случаев, опять же не в лучшую сторону влияющий на сборку мусора.
  • OS/2 четверть века спустя: почему IBM проиграла, а Microsoft выиграла
    +1
    В DOS был API работы с файлами, но на этом всё.
    Эх, какая OS/2 32bit была система: стабильная, быстрая и по настоящему мультизадачная, как unix. Совсем не то, что Windows 3.1x…
    Похоже IBM извлекла уроки и это можно только приветствовать.
  • Сражаясь с анонимностью
    0
    «Экстраполяция с учетом успешных контр-атак на mail.ru/yandex.ru тоже дает другой результат.»
    484 (за ~1.2 года)
    52 (за ~1.2 года)
    16 (за 6 месяцев)=0.5 года
    разное время, поэтому используем экстраполяцию
    (52+1.2/0.5*16)/484=(52+38,4)/484=18,7%
  • Сражаясь с анонимностью
    0
    Описка
    атак SQLi — 484 (за ~1.2 года)
    (Java Applet) — 52 (за ~1.2 года)
    52/484=10,74% успеха при контр-атаках.

    Экстраполяция с учетом успешных контр-атак на mail.ru/yandex.ru тоже дает другой результат.
  • Основная особенность наших разработчиков
    0
    1) Прошу не обобщать на всех разработчиков. Я например прошу время на обдумывание для сложных задач. Я знаю что за время разговора решение может и не вырисоваться.
    2) Такие ответы означают, что в данный момент они не знают как это сделать. Да, неправильно выражаются.
    Выход из сложившейся ситуации: дать время подумать.
    Как? Сначала выслать задание в письменном виде, разработчик сможет подумать как его можно реализовать, у него могут появиться вопросы, которые можно обсудить в частном порядке. Иногда и проходит 1-2 дня прежде, чем приходит решение.

    P.S. это можно занести в списки антипаттернов общения тимлид-девелопер
  • ДНК-оригами: как из ДНК делают интересные штуки нанометрового размера
    0
    Очень занимательная статья.
    Не могли бы Вы еще популярно рассказать, как синетезируются опорные ДНК и «скрепки»?
    Также всегда хотел узнать, как заменяются один ген на другой (геномодифицированные организмы)?
    Как применяется компьютерное моделирование для всего этого?
    С нетерпением жду продолжения.
  • Не повторяйте моих ошибок на собеседовании
    +2
    Значит Вы уже морально были готовы сменить работу и предложение друга удачно подвернулось.
  • Не повторяйте моих ошибок на собеседовании
    +1
    удалено
  • Не повторяйте моих ошибок на собеседовании
    0
    Полезные советы, спасибо автору.
    Немного из моего опыта, не претендующую на истину в последней инстанции.
    Я составляю резюме исключительно на английском, предварительно показывая его отлично знающему английский человеку. Это позволяет отсеять работодателей, чьи финансовые условия и проекты мне навряд ли понравятся.
    Зарплату лучше указывать для уровней middle-senior и далее, по моему опыту так я действительно получаю самые интересные предложения. Я выставляю такую минимальную планку зарплаты, переход на которую мне был бы интересен. Обычно это текущая зп + %, зависящий от текущей ситуации на рынке труда. Это позволяет не отпугнуть потенциальных работодателей и себя тоже не обидеть. Жаль что на рекрутинговых сайтах не принято указывать вилку зарплат.
    Ходить на собеседования, без желания сменить работу не вижу смысла:
    1) потеря времени, потратить время на повторение core (в основном это спрашивают на собеседованиях) можно в любое время, а еще лучше подтянуть английский
    2) фиксируется у работодателя текущий профессиональный уровень, в том числе финансовый, а ведь к моменту в будущем, когда реально нужно будет сменить работу, можно стать еще круче :)
  • Как я искал сотрудников или Как не надо проходить собеседования
    +2
    > принесите на собеседование распечатанное резюме (лучше две копии или три)

    Что мешает HR-специалисту распечатать нужное количество экземпляров резюме для всех собеседующих?
    Ведь кандидат не в курсе, сколько может понадобиться копий.
    Кроме того, у кандидата могут появиться проблемы с распечаткой и доставкой резюме: у кандидата может не быть принтера дома, а воспользоваться принтером текущего работодателя могут не позволить моральные убеждения, может не быть портфеля/папки чтобы принести резюме в не скомканном «товарном» виде.

    > находить джуниора, учить и молиться, что он не уйдет через полгода на зарплату в два раза выше, чем ему платят

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

    А в остальном пост был поучительным.
  • Чему я научился за 8 месяцев в Microsoft
    +1
    Не сочтите за критику Вашей статьи, но некоторые вещи я посчитал необходимым объяснить.

    > Важно не то, что ты сделал — важно то, что ты продал.

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

    > Последние версии ПО, ага, как же

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

    > 2-3 часа чистого кодинга в день — это замечательная цифра.

    Программы становятся все сложнее, и пишутся многими людьми, сразу в них сложно разобраться, поэтому понимание чужой логики требует дополнительных затрат времени. Это неотъемлемая часть прогресса, если не будет придумано чего-то нового, который облегчит этот путь. Написание комментариев зависит от личных качеств человека, пишущего код.
  • Легальная минимизация налогов в Украине для ИТ компаний
    0
    ЕСВ в пенсионный в случае общей системы налогообложения (ОСН) не платится?
    Какая процедура перехода на ОСН и возможен ли обратный переход в случае изменения ситуации?
  • Легальная минимизация налогов в Украине для ИТ компаний
    0
    Как можно временно приостановить деятельность СПД (при отсутствии деятельности) или не платить ЕСВ в пенсионный фонд, если он уже платится другим образом (например на официальной работе)?
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Николай, разрешите упомянуть Вас в главе «Благодарности» с будущей статье по этой теме?
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Главное, не забыть всё правильно разметить, нужно вызвать валидатор, нужно сделать код для анализа результата и исправления возникшей проблемы.
    А так очень хорошее средство, забыл про него упомянуть.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Учту на будущее. Сейчас исправить статью невозможно.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Я тут «переспал с мыслью» на эту тему :)
    В будущей версии я создам отдельный аспект NullSafeAspectTotal, который как раз будет и поддерживать такую логику.
    Нужный аспект оставляем в проекте, другой переименовываем, чтобы компилятор его не видел.
    Есть одна проблема, которую мне пока не понятно как решить красиво:
    При используемой сейчас lazy-инициализации объектов, в случае отсутсвия контруктора без параметров, такая инициализация будет производиться при каждом обращении. Как сделать так чтобы такая иницилизация была только один раз для каждого экземпляра?

    Дмитpий, разрешите упомянуть Вас в главе «Благодарности» с будущей статье по этой теме?
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Задумка автора, а что?
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Как я уже заметил в статье findbugs показывает, но не даёт решение сам.
    findbugs — очень хороший инcтрумент в других случаях, и ничто не мешает использовать его совместно с NullSafeAspect.

    прячем ошибку в логике, затрудняя её обнаружение. Возможно, к примеру, было бы лучше в «сеттере» бросать NPE если кто-то пытается туда передать null


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

    не боитесь распухания PermGen из-за большого количества классов, ведь ajc для каждого Around метода порождает класс. Или эту проблему как-то можно решить?


    Из статьи: По умолчанию аспект создается в виде Singleton.
    NullSafeAspect как раз такой.
    One instance of the aspect is made. This is the default.

    www.eclipse.org/aspectj/doc/next/progguide/quick-aspectAssociations.html

    If the aspect has no parent aspect, then by default the aspect is a singleton aspect.

    www.eclipse.org/aspectj/doc/next/progguide/semantics-aspects.html

    Ajc для каждого Around-метода порождает вставку вызова функции статического внутреннего класса.
    http://sidekick.windforwings.com/2009/06/aspectj-through-bytecode-examining.html
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Многие сторонние библиотеки/фреймворки сами реализуют подобную логику, например реализации JPA.
    В текущей реализации аспекты ограничены действием аннотации @ NullSafe, которую, по идее, вводят осознанно.
    Реализация аспекта NullSafe по умолчанию статична, то есть может действовать только на исходные (то есть Ваши) тексты. Следовательно текущая реалилизация не затронет сторонние библиотеки, если для этого не предпринять дополнительных мер (см. Динамические аспекты или обобщение аннотаций аспектами).
    Если синглтон без @ NullSafe, то логика аспекта работать не будет.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Принудительное наследование от abstract class Optional<T> уменьшит гибкость классов.
    Аспекты таких ограничений не налагают, но как вариант существующих решений стоит упомянуть.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    1) В классе помимо простых объектов String, Integer, Boolean и т.д. могут использоваться более сложные классы, например без конструктора без параметров.
    2) Неиницилизированный сложный объект может быть вполне нормален с точки зрения логики программы.

    Поэтому в таком случае я предпочитаю действовать точечно, в этом случае — с помощью аннотаций.

    Вы можете переписать аспект под свои нужды, код проекта свободен для использования и модификаций (упрощённая 2-пунктовая BSD лицензия).
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Поддержка Java Beans упомянута только потому, что при аспектной инициализации
    @NullSafe private SomeJavaBean bean;
    нужен универсальный код инициализации через reflection, а требование наличия у Java Beans public конструктора без параметров как нельзя лучше к этому подходит.
    Object obj=field.getType().newInstance();
    Поэтому для данного аспекта сгодиться любой класс с конструктором без параметров…

    Вторая причина упоминания Java Beans:
    1) обеспечивает возможность прозрачного и без-проблемного увеличения функциональности бина за счет абстракции логики в get/set,
    2) упомянутая Вами совместимость со средствами, активно использующими reflection и требующих стандартного стиля
    именования, и таких средств очень много.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Можно конечно и так, но:
    1) если strField используется внутри класса напрямую, то придется писать дополнительный «безопасный» код
    2) не оптимально с точки зрения быстродействия, так идет сравнение на null в геттере, обычно операции чтения происходят чаще записи.
    3) такой код нужно писать для всех таких полей, что просто неудобно

    Принудительная инициализация и @ NullSafe(getter=false) — самый оптимальный путь с точки зрения быстродействия.
  • Багобезопасный код: шаблон проектирования Null Safe
    0
    if (strField!=null){ this.strField=strField; } else { strField = ""; }

    Я тоже думал над отождествлением null ещё и как пустого значения или 0, вместо нынешнего отбрасывания значения.
    Мои соображения на этот счёт: если считать, что присваивание null является ошибкой, значит эта ошибка не должна влиять на целостность данных.
    Я реализую предложенный Вами подход в виде аннотаций типа @ NullSafe(getter=false,nullIsValue=true), но это потребует некоторого времени.

  • Багобезопасный код: шаблон проектирования Null Safe
    0
    Вы абсолютно правы: if(s!=null && !s.isEmpty()) является более оптимальным описанием этого выражения.
    Но я ставил целью показать частоту и всеобщность использования проверки на null, поэтому намеренно разделил выражение для лучшего восприятия материала статьи.