Метка: программирование

  • Про JavaScript (не для JavaScript программистов).

    Последние полтора месяца пишу для одного своего заказчика графический движок на JavaScript (HTML5/Canvas), который будет рисовать в браузере некоторые их инженерные схемы. Параллельно консультирую штатных программистов, у которых не очень большой опыт работы с JavaScript-ом. При кажущейся простоте JavaScript не создан для легкого написания надежного кода. Для самопроверки пользуюсь jsLint-ом и периодически запускаю google closure […]

  • Про интерфейс: Map<K,V>

    Недавно от товарища пришел вопрос на засыпку: “Почему в интерфейсe java.util.Map метод get в качестве ключа принимает Object, а метод put использует женерики?” V get(Object key); V put(K key, V value); Сходу ответить не смог, пришлось разбираться.

  • Java Zip + русские буквы в названиях файлов

    Баг №4244499 Этот баг был зарегистрирован еще в 1999г. Проблема была не только с русскими файлами, а например с французскими (как в примере). Корни довольно глубокие и существовали серьезные (надеюсь) причины, по которым эту ошибку долгое время не исправляли. В итоге, много-много лет в Java нельзя было сделать простыми штатными средствами zip-архив, который бы содержал […]

  • Немного об OAuth, Android и Facebook

    OAuth авторизация OAuth – по определению означает Open Authorization. Поскольку в английском языке слова аутентификация (authentication) и авторизация (authorization) имеют одинаковое начало auth, то сокращение oauth очень неоднозначное. Эти понятия (авторизацию и аутентифакцию) очень часто путают друг с другом. Например OpenID – это система для аутентификации. Очень кратко про аутентификацию и авторизацию (т.к. это простые […]

  • Кофе и программисты

    Мой небольшой обзор разных кофеен. Уже больше года веду образ жизни свободного разработчика. Время от времени встречаюсь с такими же как я (программистами, стартаперами). На таких встречах мы, как правило, обсуждаем текущие задачи, пьём кофе, строим планы на будущее, а иногда устраиваем “полевые испытания” – вместе проверяем как работает веб-сервер, тестируем приложения под андроид в […]

  • do while false

    “Делать пока ложно”. Пару дней назад пытался кратко рассказать товарищу через аську про использование do { } while(false); для переписывания длинных ветвящихся if-ов. Кратко объяснить не получилось, в итоге решил написать в блоге. Метод довольно спорный, хотя и встречается в некоторых авторитетных источниках (например в “Совершенном Коде” С. Макконела). Идея довольно простая. 0. Код помещаем […]

  • Scala и пустота

    В Scala есть несколько разных сущностей для обозначения несуществующих, пустых или неопределенных объектов. Начнем с самого привычного для Java-программистов случая. Null Null – это trait. Объект null (с маленькой буквы) — это как раз и есть объект типа Null. Он находится внизу иерархии типов в Scala, в противовес AnyRef. Благодаря этому вы всегда можете как-бы […]

  • EncryptableProperties и защита от дурака

    Все знают, что не следует хранить в конфигурационных файлах (например properties) критически важную информацию в открытом виде. Например логины и пароли от базы данных, почты и т.д. Не стоит этого делать, т.к. “случайный” сисадмин или пользователь сможет открыть этот ваш файлик и увидеть пароль. С учетом того, что довольно часто пароли придумывают люди, то запомнить […]

  • Немного карри

    Использовать карринг в Scala одно удовольствие. Само определение каррирования(или карринга, названо в честь Хаскелла Карри): Для функции h типа h : (A × B) → C оператор каррирования Λ выполняет преобразование Λ(h) : A → (B → C) Отметим, что Λ – это оператор, то есть “функция над функциями”. Например берем функцию foo(x,y), каррируем и […]

  • Календари и даты

    Постоянно наталкиваюсь на людей, которые утверждают, что “Date – deprecated, нужно использовать Calendar”. Это не верно! Вариаций на тему “почему это не верно” где-только уже не написано, но все-равно появляются люди которые мне доказывают, что правильней использовать Calendar (аргументеруя именно “устареванием” Date). На самом деле в классе Date просто много deprecated методов. Но если почитать […]