Иногда бывает так, что надо написать новую фичу "вертолёт". А как его сделать, хз. Просто какой-то тупняк. Можно часами сидеть и думать - и с какого же конца за эту хрень взяться?
Лекарство от этого смешное. Надо просто без лишних обдумываний взять и создать новый класс "Helicopter"... В нем метод void fly()... Ну а дальше оно как-то само срывается с мёртвой точки и едет дальше.
Лекарство от этого смешное. Надо просто без лишних обдумываний взять и создать новый класс "Helicopter"... В нем метод void fly()... Ну а дальше оно как-то само срывается с мёртвой точки и едет дальше.
У unit tests есть замечательный побочный эффект. И эффект этот по важности чуть ли не превышает основное предназначание тестов. Заключается он в том, что создание тестов заставляет писать код более аккуратно и структурированно.
( Проиллюстрирую на недавнем примере из практики... )
( Проиллюстрирую на недавнем примере из практики... )
Этот агрегат с детства казался неведомой магией. Дьявольски хитрый механизм с неуловимой для глаза скоростью продевает нитку с иголкой через ткань и делает стежки. Как??? А оказывается, все так просто!


Делаю тест, в котором бот занимается тем, что заходит в инстанс карты, выходит, заходит, выходит... Проверка, нет ли memory leaks. Надо как то его назвать...
Первое что приходит в голову - инстанс-дрочер. Вопрос как это назвать поприличнее и по-английски вгоняет в тупик на несколько минут.
p.s. назвал Map Instance Pecker
pecker
1) птица, которая долбит (обыкн. в сложных словах, напр.: woodpecker дятел)
...
6) разг. ; сл. половой член
Первое что приходит в голову - инстанс-дрочер. Вопрос как это назвать поприличнее и по-английски вгоняет в тупик на несколько минут.
p.s. назвал Map Instance Pecker
pecker
1) птица, которая долбит (обыкн. в сложных словах, напр.: woodpecker дятел)
...
6) разг. ; сл. половой член
- Mood:
confused
сyxymu
Как то раз я долго мучался с одним багом, никак не мог понять в чем дело. Вроде бы все верно, все правильно, а бажит: не находится один из ресурсных файлов. Но вот же он! В конце концов, присмотревшись под микроскопом, обнаружил, что какой-то шутник в середине англоязычного названия файла забацал русскую букву "а".
Как то раз я долго мучался с одним багом, никак не мог понять в чем дело. Вроде бы все верно, все правильно, а бажит: не находится один из ресурсных файлов. Но вот же он! В конце концов, присмотревшись под микроскопом, обнаружил, что какой-то шутник в середине англоязычного названия файла забацал русскую букву "а".
В Idea есть клевая кнопка find usages, которая ищет все использования, например, какой-то функции.
В C++ такой кнопки нет. Текстовый поиск канает далеко не всегда (найдите все вхождения метода Init какого-то класса).
Соответственно, основной метод поиска: испортить сигнатуру функции (обычно я добавляю в конец еще один параметр bool) и скомпилировать проект.
В C++ такой кнопки нет. Текстовый поиск канает далеко не всегда (найдите все вхождения метода Init какого-то класса).
Соответственно, основной метод поиска: испортить сигнатуру функции (обычно я добавляю в конец еще один параметр bool) и скомпилировать проект.
Закоммитил изменение в 1525 java-файлов. А вам слабо?
В IDEA показали кнопку Replace Structurally... Оказалась офигенно удобной штукой. Забавно, что иногда прикольные фишки лежат прямо под рукой, а их не замечаешь.
В IDEA показали кнопку Replace Structurally... Оказалась офигенно удобной штукой. Забавно, что иногда прикольные фишки лежат прямо под рукой, а их не замечаешь.
Великолепный ролик. Проперло так, что пересмотрел раз 10.
Если вдруг кто не видел остальные ролики из серии "meet the...", рекомендую.
meet the scout
meet the soldier
meet the demoman
meet the heavy
meet the sniper
meet the engineer
Если вдруг кто не видел остальные ролики из серии "meet the...", рекомендую.
meet the scout
meet the soldier
meet the demoman
meet the heavy
meet the sniper
meet the engineer
В C++ слово const засовывал просто всюду, куда оно засовывалось. Буквально, если можно объявить какую-то даже мелкую вспомогательную переменную как const, то объявлял её как const.
В Java нет слова const, зато есть слово final (это не тоже самое, но все-таки). Теперь та же петрушка и с ним: final на автомате применяю везде, куда его только можно применить. Например, если у класса нет наследников, то он немедленно становится final.
Когда вижу место, где final или const могло бы быть, но его там нет, возникает ощущение незавершенности и острое желание его туда немедленно засунуть.
Интересно, это полезная на практике привычка или мелкое психическое расстройство?
В Java нет слова const, зато есть слово final (это не тоже самое, но все-таки). Теперь та же петрушка и с ним: final на автомате применяю везде, куда его только можно применить. Например, если у класса нет наследников, то он немедленно становится final.
Когда вижу место, где final или const могло бы быть, но его там нет, возникает ощущение незавершенности и острое желание его туда немедленно засунуть.
Интересно, это полезная на практике привычка или мелкое психическое расстройство?
Сегодня полчаса ждал троллейбуса. Когда подъехал, то его штурмовала толпа диких пассажиров, влезть не удалось. Но зато сразу же за ним подъехали еще два пустых троллейбуса.
Все таки троллейбусы - очень общительные и социальные существа. Им скучно ездить по одному.
Все таки троллейбусы - очень общительные и социальные существа. Им скучно ездить по одному.
Последние несколько лет пользуюсь исключительно Google. Причем решающим фактором стало отнюдь не качество поиска, а банальная человеческая лень. Если в Firefox в адресную строку ввести вместо url что-то еще, то он считает, что это поисковый запрос Google.
До этого я спокойно пользовался Internet Explorer, потому что он в винде уже есть, а что-то еще ставить лень. Но в нём не было табов, пришлось таки ставить Firefox. Говорят, теперь в Explorer тоже табы есть, но смотреть что там и переходить обратно уже лень.
Табы победили Microsoft.
Адресная строка монополизировала Google.
Дизайн решает.
До этого я спокойно пользовался Internet Explorer, потому что он в винде уже есть, а что-то еще ставить лень. Но в нём не было табов, пришлось таки ставить Firefox. Говорят, теперь в Explorer тоже табы есть, но смотреть что там и переходить обратно уже лень.
Табы победили Microsoft.
Адресная строка монополизировала Google.
Дизайн решает.
В древности люди считали по пальцам. Они знали числа один, два, три, а дальше шло число "много". Человеческий мозг не так далеко ушел от тех времен. Да, мы способны оперировать большими числами, но вот представить их себе не можем. Попробуйте мысленно вообразить себе одиннадцатиугольник.
Современный человеческий разум ограничен где-то числом семь. Система, состоящая из большего числа компонент, вызывает трудности для анализа. Мозг сразу же пытается её систематизировать, разбив на небольшое число составных частей. А если частей больше, то часть из них объединяются в группы.
Представьте себе Землю. Шарик: а на ней слева америка, посередине африка, справа вверху евразия, ниже австралия, в самом низу антарктида. Конечно, на самом деле Земля несоизмеримо больше и сложнее, однако представить ее целиком можно только так.
Это имеет огромное значение при разработки программного обеспечения. Часто говорят что хороший код - это простой код, читабельный код, код разбитый на модули.
Но на самом деле причина находится не в коде, а в голове программиста. Если программа заранее структурирована так, что её удобно представить в виде небольшого числа компонент, то мозг не напрягается и кажется, что программа хорошая. Если же автор не позаботился о структуре, то маленькому мозгу читателя придется делать рекомпозицию самостоятельно и утомляться. Плохая программа, непонятная программа. Причем это касается практически любой численной характеристики: размер классов, количество модулей, размер функций, количество параметров у функции, неважно. Для современного мозга много - это то что больше семи. И самое главное при программировании - это стараться избегать числа "много".
Современный человеческий разум ограничен где-то числом семь. Система, состоящая из большего числа компонент, вызывает трудности для анализа. Мозг сразу же пытается её систематизировать, разбив на небольшое число составных частей. А если частей больше, то часть из них объединяются в группы.
Представьте себе Землю. Шарик: а на ней слева америка, посередине африка, справа вверху евразия, ниже австралия, в самом низу антарктида. Конечно, на самом деле Земля несоизмеримо больше и сложнее, однако представить ее целиком можно только так.
Это имеет огромное значение при разработки программного обеспечения. Часто говорят что хороший код - это простой код, читабельный код, код разбитый на модули.
Но на самом деле причина находится не в коде, а в голове программиста. Если программа заранее структурирована так, что её удобно представить в виде небольшого числа компонент, то мозг не напрягается и кажется, что программа хорошая. Если же автор не позаботился о структуре, то маленькому мозгу читателя придется делать рекомпозицию самостоятельно и утомляться. Плохая программа, непонятная программа. Причем это касается практически любой численной характеристики: размер классов, количество модулей, размер функций, количество параметров у функции, неважно. Для современного мозга много - это то что больше семи. И самое главное при программировании - это стараться избегать числа "много".
Java снова подтвердила свою крутизну. Можно заливать небольшие фиксы кода из отладчика прямо на работающий сервер. Развернутый хер знает где на удаленном хостинге. На головы ничего не подозревающих бегающих игроков.
В ММО есть такое понятие - инстанс. Это экземпляр карты, созданный специально для какого-то товарища или группы товарищей. Некоторые инстансы мгновенно уничтожаются при выходе последнего игрока.
И вот из такого инстанса выходит игрок с петом. Пет бегает за своим хозяином, с небольшой задержкой на реакцию. Хозяин выходит, пет тоже собирается выйти, то тут выясняется, что игроков в инстансе больше нет. Инстанс мгновенно аннигилируется. Вместе с петом.
И вот из такого инстанса выходит игрок с петом. Пет бегает за своим хозяином, с небольшой задержкой на реакцию. Хозяин выходит, пет тоже собирается выйти, то тут выясняется, что игроков в инстансе больше нет. Инстанс мгновенно аннигилируется. Вместе с петом.
- Mood:
cheerful
C++ хоронят уже давно и упорно. Типа managed языки его должны вытеснить. Однако что касается игрушкостроения, то альтернатив ему нет и не видно. Очень важна эффективность.
Попробую сформулировать основные причины, по которым Java отстает по эффективности от C++:
1. Memory management.
За сборку мусора надо платить. В некоторых областях эта цена неприемлема. Специфика бывает такова, что хочется управлять памятью именно вот так (и это будет в миллион раз эффективней). В C++ можно, в Java - нет.
2. Структуры.
Все сложные объекты в Java наследуются от Object и всегда держатся по ссылке. Это накладные расходы на заголовок объекта и дополнительная косвенная адресация при доступе к полю. А хочется завести тупую структуру внутри объекта и не париться.
Ну, например, у объекта Car поле vec3 position. Нафиг не надо держать эту position по ссылке, и занимать она должна 12 байт (3 float x, y, z). Но приходится платить за ссылку (4 байта), платить за заголовок Object (еще 8 байт). То есть расходы по памяти в два раза, плюс косвенный доступ к x,y,y (привет кэш-миссам), плюс работа по удалении position (а че там удалять, она же неотъемлемая часть Car).
3. Templates.
Все-таки на фоне С++ шаблонов generics в Java - бледное убожество. Просто синтаксический сахар, чтобы не надо было элементы из коллекций из типа Object кастовать. Писать эффективный обобщенный код на Java невозможно. Либо обобщенность, либо эффективность, выбирайте.
Пожалуй, три основные вещи, которые не позволяют отправить C++ на окончательную пенсию.
Попробую сформулировать основные причины, по которым Java отстает по эффективности от C++:
1. Memory management.
За сборку мусора надо платить. В некоторых областях эта цена неприемлема. Специфика бывает такова, что хочется управлять памятью именно вот так (и это будет в миллион раз эффективней). В C++ можно, в Java - нет.
2. Структуры.
Все сложные объекты в Java наследуются от Object и всегда держатся по ссылке. Это накладные расходы на заголовок объекта и дополнительная косвенная адресация при доступе к полю. А хочется завести тупую структуру внутри объекта и не париться.
Ну, например, у объекта Car поле vec3 position. Нафиг не надо держать эту position по ссылке, и занимать она должна 12 байт (3 float x, y, z). Но приходится платить за ссылку (4 байта), платить за заголовок Object (еще 8 байт). То есть расходы по памяти в два раза, плюс косвенный доступ к x,y,y (привет кэш-миссам), плюс работа по удалении position (а че там удалять, она же неотъемлемая часть Car).
3. Templates.
Все-таки на фоне С++ шаблонов generics в Java - бледное убожество. Просто синтаксический сахар, чтобы не надо было элементы из коллекций из типа Object кастовать. Писать эффективный обобщенный код на Java невозможно. Либо обобщенность, либо эффективность, выбирайте.
Пожалуй, три основные вещи, которые не позволяют отправить C++ на окончательную пенсию.
Как удобно искать закинутый где-то в комнате мобильник: просто звонишь на него с домашнего. Почему же нельзя позвонить ключам от квартиры?
При изготовлении одной игры программисты несколько раз меняли формат карты. До сих пор ходит легенда о героическом мап-дизайнере, который своими умелыми руками мужественно переставлял все заборы на всех картах этой игры. При каждом смене формата.
( А вот сказка чуть более современная )
( А вот сказка чуть более современная )
Жуткие последствия липосакции.
7-летнего ребенка год насиловал 64-летний приемный дед
Мальчик 4 года живет с сердцем на животе
Жуткая трагедия в доме Цекало
Личинки заживо съели спящую женщину
ШОК! Звезды без макияжа! Не узнать!
Обнаружено новое ПОТРЯСАЮЩЕЕ свойство яблок
Кошмарная тварь наводит ужас на жителей городка
Беременный мужчина готовится стать мамой во второй раз
Предсказание Ванги: "черный" президент убьет Америку
Скончилась самая знаменитая в мире порноактриса. Фото
Восьмиклассницы покалечили и изнасиловали 47-летнюю собутыльницу
Горничная Гитлера нарушила обет молчания
Даша отказала Путину!
Как похудеть с помощью мобильника
Кто бы мог подумать, что арбузы так полезны для потенции!
(заголовки накопипасчены с одного из новостных сайтов за пару минут)
7-летнего ребенка год насиловал 64-летний приемный дед
Мальчик 4 года живет с сердцем на животе
Жуткая трагедия в доме Цекало
Личинки заживо съели спящую женщину
ШОК! Звезды без макияжа! Не узнать!
Обнаружено новое ПОТРЯСАЮЩЕЕ свойство яблок
Кошмарная тварь наводит ужас на жителей городка
Беременный мужчина готовится стать мамой во второй раз
Предсказание Ванги: "черный" президент убьет Америку
Скончилась самая знаменитая в мире порноактриса. Фото
Восьмиклассницы покалечили и изнасиловали 47-летнюю собутыльницу
Горничная Гитлера нарушила обет молчания
Даша отказала Путину!
Как похудеть с помощью мобильника
Кто бы мог подумать, что арбузы так полезны для потенции!
(заголовки накопипасчены с одного из новостных сайтов за пару минут)
Поработав пару лет на Java, я, как старый C++ник, разочаровался в такой фиче, как сборка мусора. Сборка мусора совсем не бесплатна. Это использование тяжелых трассирующих алгоритмов, и как следствие, непредсказуемые остановки программы на неопределенное время в фазе stop the world. Использование хитрых параллельных сборщиков недостаток уменьшает, но полностью не лечит.
Что же мы получаем за эту цену и так уж ли оно полезно, как это часто преподносят? ( Read more... )
Что же мы получаем за эту цену и так уж ли оно полезно, как это часто преподносят? ( Read more... )
