Некоторое время назад поддержал еще одного отечественного произодителя - купил карманный преферанс.
А дело было так. По пятницам мы на работе пишем пульку. Но меня все обыгрывали. И я решил попрактиковаться. Так как за компом я обычно работаю, то очень неудобно играть в Марьяж. Поэтому купил лицензионный диск и поставил себе на коммуникатор. Много тренировался - пошел в плюс. Статистика лежит на Google Docs. Потом тренировки забросил, когда у коммуникатора случился полный сброс (упал на пол). Теперь переустановил. Надо тренироваться. Завтра - игра!
четверг, 6 сентября 2007 г.
Java Puzzle 36: Indecision
Что возвращает следующий метод, true или false?
boolean isValid() {
try {
return true;
} finally {
return false;
}
}
Метод вернет false, согласно JLS 14.20.2: в выражении try-finally блок finally всегда выполняется, когда управление уходит из блока try. Авторы рекомендуют никогда не покидать блок finally с помощью return, break, continue or throw. Это небезопасно!
boolean isValid() {
try {
return true;
} finally {
return false;
}
}
Метод вернет false, согласно JLS 14.20.2: в выражении try-finally блок finally всегда выполняется, когда управление уходит из блока try. Авторы рекомендуют никогда не покидать блок finally с помощью return, break, continue or throw. Это небезопасно!
Java Puzzle 35: Minute by Minute
Следующая программа имитирует простые часы:
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
Программа считае миллисекунды, добавляя время от времени минуты. И чему будет равно количество минут в конце цикла?
А вот и нет! В часе получается не 60 минут, а 60000. А проблема в том, что % и * равнозначные операторы. Т.е. сначала выполняется ms % 60, и 0 тут получается гораздо чаще, чем ms % (60*1000). Как сделать правильно? Заменить все магические числа на константы:
int MS_PER_HOUR = 60 * 60 * 1000;
int MS_PER_MINUTE = 60 * 1000;
int minutes = 0;
for (int ms = 0; ms < MS_PER_HOUR; ms++)
if (ms % MS_PER_MINUTE == 0)
minutes++;
Пользователей може запутать, что вокруг % находятся пробелы, а вокруг * - нет. Компилятору до них никакого дела нет. Никогда не используйте пробелы для группировки операторов. Используйте скобки!
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
Программа считае миллисекунды, добавляя время от времени минуты. И чему будет равно количество минут в конце цикла?
А вот и нет! В часе получается не 60 минут, а 60000. А проблема в том, что % и * равнозначные операторы. Т.е. сначала выполняется ms % 60, и 0 тут получается гораздо чаще, чем ms % (60*1000). Как сделать правильно? Заменить все магические числа на константы:
int MS_PER_HOUR = 60 * 60 * 1000;
int MS_PER_MINUTE = 60 * 1000;
int minutes = 0;
for (int ms = 0; ms < MS_PER_HOUR; ms++)
if (ms % MS_PER_MINUTE == 0)
minutes++;
Пользователей може запутать, что вокруг % находятся пробелы, а вокруг * - нет. Компилятору до них никакого дела нет. Никогда не используйте пробелы для группировки операторов. Используйте скобки!
Lingvo 11
Купил год назад Лингво 11. Поддержал, так сказать, отечественного производителя. Активно использую. Иногда, для обычных слов открывает дополнительные окошки с нецензурным сленгом. Сейчас сразу не вспомнить, но было пару раз. На работе использую Tutor, который выдает слова на английском или на русском, а к ним нужно набрать перевод. Вещь удобная. Особенно на коммуникаторе. К нам приехали коллеги из штатов, так во время разговора можно быстро найти перевод. Чаще всего с русского на английский.
Ставил тут его на домашний компьютер. Он мне заявил, что неплохо было бы купить 12-ю версию. Залез на сайт. Сравнил. Сейчас напишу, что понравилось.
Вот и думай, не поддержать ли отечественного производителя еще раз.
Ставил тут его на домашний компьютер. Он мне заявил, что неплохо было бы купить 12-ю версию. Залез на сайт. Сравнил. Сейчас напишу, что понравилось.
- В новой версии они написали Tutor под PocketPC. Гораздо удобнее, когда карточки слов всегда собой, например, в метро.
- Обновили поиск: теперь включается полнотекстовый поиск, если слово не найдено. Также можно искать по маске, если не уверен в написании слова.
- Сделана полная интеграция в Windows: при наведении курсора мыши на слово в любом приложении всплывает окошко с его переводом.
- Есть европейская версия с дополнительными языками: немецкий, французский, итальянский и испанский. И есть многоязычная версия, где помимо указанных языков есть китайский, турецкий, украинский и латинский.
Вот и думай, не поддержать ли отечественного производителя еще раз.
Налоговые вычеты
Занимаюсь возвратом денег с налоговой. Тот еще геморрой. В налоговой дали кучу каких-то бумажек и сказали заполнять. На стендах ничего не нашел по приобретенной недвижимости. Долго вникал в непонятные закорючки и, если бы не программа "Декларация 2006", то уже сошел бы с ума...
БЮРОКРАТЫ!
БЮРОКРАТЫ!
Подписаться на:
Сообщения (Atom)