пятница, 17 июля 2015 г.
Погода
На улице громыхает изрядно и льёт как из ведра. Кстати, можно посмотреть где ещё гром гремит в реальном времени.
четверг, 16 июля 2015 г.
Ложка дёгтя
Последнее время я часто хвалил обновлённый СберБанк в Рыбацком. Но сегодня у них произошёл сбой: более половины операторов не работало и при таком темпе, судя по электронной очереди, мне надо было бы сидеть там ещё пару часов.
Реверси
Сегодня я сумел запустить своё приложение в штатном режиме. Оказывается там проблема была не в алгоритме, а в изменённой структуре данных, а дебажить рекурсию достаточно сложно.
После небольшой реструктуризации кода всё вылечилось само, а я так и не понял, что всё-таки произошло. Зато понял, что разучился играть в Реверси. Мне так и не получилось обыграть компьютер.
Теперь надо добавить немного рандомизации, чтобы каждая игра немного отличалась от предыдущей, и портировать Пашкин алгоритм, чтобы проводить соревнования.
После небольшой реструктуризации кода всё вылечилось само, а я так и не понял, что всё-таки произошло. Зато понял, что разучился играть в Реверси. Мне так и не получилось обыграть компьютер.
Теперь надо добавить немного рандомизации, чтобы каждая игра немного отличалась от предыдущей, и портировать Пашкин алгоритм, чтобы проводить соревнования.
вторник, 14 июля 2015 г.
Второй монитор для игр
Освободился у меня старенький 17" монитор и я решил подключить его к ноутбуку, чтобы в играх использовать. Нашёл список игр, поддерживающих пару мониторов, и стал играть.
По факту оказалось, что на wiki сплошной обман. Ни одна из игр приведённого списка, что я мог попробовать, не поддерживает несколько мониторов. Немного погуглив, я понял, что вообще не делают таких игр. Что весьма печально.
На самом деле, указанные игры могут расширять отображаемую область на общее виртуальное пространство, предоставляемое операционной системой. И только! Представьте, как это играть в стрелялку, где прицел ровно по середине между мониторами.
Я же думал несколько о другом...
Когда я работаю в IDEA, то могу вспомогательные окна перетаскивать на второй монитор, чтобы они там болтались и в глаза не лезли. Хотелось бы аналогичной функциональности в играх. Допустим, играете вы в Deus Ex на большом мониторе, а на соседний выводится карта, инвентарь и всякое разное.
Это было бы реально круто!
По факту оказалось, что на wiki сплошной обман. Ни одна из игр приведённого списка, что я мог попробовать, не поддерживает несколько мониторов. Немного погуглив, я понял, что вообще не делают таких игр. Что весьма печально.
На самом деле, указанные игры могут расширять отображаемую область на общее виртуальное пространство, предоставляемое операционной системой. И только! Представьте, как это играть в стрелялку, где прицел ровно по середине между мониторами.
Я же думал несколько о другом...
Когда я работаю в IDEA, то могу вспомогательные окна перетаскивать на второй монитор, чтобы они там болтались и в глаза не лезли. Хотелось бы аналогичной функциональности в играх. Допустим, играете вы в Deus Ex на большом мониторе, а на соседний выводится карта, инвентарь и всякое разное.
Это было бы реально круто!
Sic transit gloria mundi
При покупке телефона рекламировалось, что в режиме ожидания он работает 35 дней. Ну а у меня в режиме три звонка в день он прожил чуть более недели. Чуда не произошло.
А ещё обнаружилось, что у него очень тихий динамик и плохо слышно собеседника, если вокруг шумят. Может поменять?
А ещё обнаружилось, что у него очень тихий динамик и плохо слышно собеседника, если вокруг шумят. Может поменять?
понедельник, 13 июля 2015 г.
На следующий год
Kotlin существует только в трёх видах: для JVM, JavaScript и Android; а переносимое приложение написать можно только текстовое через вывод
И в этом вопросе язык сильно проигрывает почившему в бозе JavaFX script, в котором существовала Scene с набором 2D-примитивов, анимацией и связыванием переменных. Это позволяло создать переносимое приложение под телефон.
Посему у меня возникла идея для следующего Hackathon: разработать (для начала) библиотеку работы с графикой и реализовать единый интерфейс для всех трёх платформ.
Вот только если для поддержки Swing моих знаний и хватит, то в Android я откровенно слаб, а jquery не знаю вовсе. Да и выполнить всю задачу одному будет непросто. Надо набирать команду...
println.И в этом вопросе язык сильно проигрывает почившему в бозе JavaFX script, в котором существовала Scene с набором 2D-примитивов, анимацией и связыванием переменных. Это позволяло создать переносимое приложение под телефон.
Посему у меня возникла идея для следующего Hackathon: разработать (для начала) библиотеку работы с графикой и реализовать единый интерфейс для всех трёх платформ.
Вот только если для поддержки Swing моих знаний и хватит, то в Android я откровенно слаб, а jquery не знаю вовсе. Да и выполнить всю задачу одному будет непросто. Надо набирать команду...
Неожиданно
В процессе изучения Kotlin я нашёл следующую проблему:
PS. Коллеги подсказывают, что похожее поведение у Scala.
open class Super(val value: Int) {
constructor(value: Super) : this(value.value)
}
class Sub(value: Int) : Super(value) {
constructor(value: Sub) : super(value)
}Наследник не компилируется, сообщая, что нельзя использовать super в данном контексте, а надо использовать this. Покурив документацию, я всё-таки написал требуемую мне иерархию: class SubOK : Super {
constructor(value: Int) : super(value)
constructor(value: SubOK) : super(value)
}Это не лишено некоторой логики: если определяется конструктор по-умолчанию, то остальные конструкторы должны использовать только его. Во втором случае у класса SubOK нет конструктора по-умолчанию, а оба конструктора равноправны. Но на мой взгляд, логика достаточно спорная, да и добавляет лишнюю строку кода.PS. Коллеги подсказывают, что похожее поведение у Scala.
суббота, 11 июля 2015 г.
Герой или нет
Нашёл забавный тест на просторах интернета. Взяты факты из историй о былинных богатырях и надо узнать, о положительном герое идёт речь или об отрицательном...
Сказка — ложь, да в ней намек, Добрым молодцам урок!
Сказка — ложь, да в ней намек, Добрым молодцам урок!
Kotlin @ Hackathon
Завершился сорока восьми часовой марафон программирования, на котором я изучал язык Kotlin и писал известно что, а ведь до этого события я его и в глаза не видел.
Первые часов 20 прошли очень результативно, после чего пришлось пойти поспать в комнату отдыха. После обеда работа шла медленно и печально, поэтому я решил поехать домой и выспаться. Сегодня с утра полировал код и пытался найти ошибку в алгоритме подсчёта очков, из-за которой он долго думает, но плохо играет. Ещё не успел портировать Пашкин код.
Язык Kotlin мне понравился. Подобно JavaFX он сильно уменьшает количество boilerplate кода. С другой стороны, код становится плотным и насыщенным, поэтому лучше добавлять комментарии.
Конструктор по-умолчанию имеет два обязательных и один опциональный параметр со значением null по умолчанию. String? означает, что параметр типа String может принимать значение null.
Свойство name задаётся не напрямую через конструктор, а на основе выражения, в котором присутствует куча проверок на null. Сначала мы спрашиваем имя solver?.name, которое вернёт null, если сам solver тоже null.
Потом идёт так называемый elvis-оператор, который возвращает левую часть, если она не null, иначе возвращает правую.
Тип свойства name напрямую не задан, а определяется из выражения. С учётом всех проверок на null, типом оказывается String, а не String?, как у соответствующего параметра.
Методы так и подмывает писать однострочными:
Поддержка range сделана простой и оптимальной в коде:
В общем, интересный опыт. Теперь надо готовить презентацию.
Первые часов 20 прошли очень результативно, после чего пришлось пойти поспать в комнату отдыха. После обеда работа шла медленно и печально, поэтому я решил поехать домой и выспаться. Сегодня с утра полировал код и пытался найти ошибку в алгоритме подсчёта очков, из-за которой он долго думает, но плохо играет. Ещё не успел портировать Пашкин код.
Язык Kotlin мне понравился. Подобно JavaFX он сильно уменьшает количество boilerplate кода. С другой стороны, код становится плотным и насыщенным, поэтому лучше добавлять комментарии.
data class Player(val id: Int,
name: String?,
val solver: Solver? = null) {
val name = solver?.name ?: name ?: "Player ${id + 1}"
}Например, код выше является описанием класса с тремя readonly свойствами id, name и solver, для поддержки которых генерятся методы equals и hashCode.Конструктор по-умолчанию имеет два обязательных и один опциональный параметр со значением null по умолчанию. String? означает, что параметр типа String может принимать значение null.
Свойство name задаётся не напрямую через конструктор, а на основе выражения, в котором присутствует куча проверок на null. Сначала мы спрашиваем имя solver?.name, которое вернёт null, если сам solver тоже null.
Потом идёт так называемый elvis-оператор, который возвращает левую часть, если она не null, иначе возвращает правую.
Тип свойства name напрямую не задан, а определяется из выражения. С учётом всех проверок на null, типом оказывается String, а не String?, как у соответствующего параметра.
Методы так и подмывает писать однострочными:
fun count(id: Int) = cells.values().filter { it == id }.size()Да, λямбды поддерживаются. Кстати, тип объекта внутри if определяется автоматически, если в if этот тип проверялся.Поддержка range сделана простой и оптимальной в коде:
x in 1..width && y in 1..heightКроме того, мне очень понравились функции расширения. Обычно в Java заводят вспомогательный класс с набором статических методов, а тут можно написать следующим образом:
fun JComponent.getInnerBounds(): Rectangle {
val bounds = Rectangle(getWidth(), getHeight())
val insets = getInsets()
if (insets != null) {
bounds.x += insets.left
bounds.y += insets.top
bounds.width -= insets.left + insets.right
bounds.height -= insets.top + insets.bottom
}
return bounds
}После чего можно использовать этот метод, будто он объявлен в классе JComponent. В целом, поддержка Java отличная.В общем, интересный опыт. Теперь надо готовить презентацию.
Вписался
И зачем я только домой ездил на ночёвку?
Утром пошёл на работу - в Рыбацком отличная погода, а на Невском дождь. Почему на Невском, вы спросите? А потому, что Василеостровскую на год сегодня закрыли.
Бесплатных автобусов на время ремонта не будет, придётся пользоваться общественным транспортом.
Утром пошёл на работу - в Рыбацком отличная погода, а на Невском дождь. Почему на Невском, вы спросите? А потому, что Василеостровскую на год сегодня закрыли.
Бесплатных автобусов на время ремонта не будет, придётся пользоваться общественным транспортом.
вторник, 7 июля 2015 г.
понедельник, 6 июля 2015 г.
Skype
Пришло загадочное письмо от Skype:
Средства на вашем счете будут деактивированы через 7 дня (дней)Получается, что если мне потребуется позвонить, то придётся плясать с бубном? Зачем им эти сложности?
Согласно нашим данным, вы уже довольно давно не пользовались средствами на своем счете в Skype. Деньги на счете деактивируются, если вы ни разу не использовали их в течение 180 дней. Однако беспокоиться не о чем: деактивированные средства можно будет активировать, когда они вам понадобятся. Просто войдите в свою учетную запись, выберите опцию "Активировать баланс на счете" и следуйте инструкциям на экране.
Интересный ход
Продолжил прятаться от Чужого. Когда Рипли попросила рассказать Марлоу его историю, то вместо рассказа получилась мини игра за Марлоу на странной планете. Забавный способ передать атмосферу.
воскресенье, 5 июля 2015 г.
Подписаться на:
Сообщения (Atom)

