Блог

Apple не думает о совместимости

Вышел новый XCode 6.3 и у меня снова не компилируется мой код. Apple внесла изменения в новый язык Swift, которые не совместимы с предыдущими версиями и приходится подправлять везде мелкие изменения. 

С одной стороны, это немного достает, что приходится обновлять исходный код под каждый чих разработчиков Swift, но с другой я понимаю, зачем это делается. Разработчики языка не могли предусмотреть всего. Язык новый и конечно же сейчас выплывают недочеты дизайна. И чтобы не ставить костыли к новому языку, его просто меняют. Да, теряется обратная совместимость, но зато язык остается чистым. 

В последнем XCode в основном поновому приходится приводить as опциональные переменные. Раньше это приходилось делать как param! as something, теперь походу param as! something. Второе выглядит получше и даже смысл немного более правильный. 

У приложений ASP.NET 5 Core нет bin директории

Сегодня прочитал, что у приложений на ASP.NET Core (это та версия, которая будет работать на всех ОС и за корой будущее) не будет bin директории и программы н будут компилироваться. Вы всё же сможете создать бинарный файл и публиковать его, но по умолчанию этого не нужно. 

Сейчас у Web Forms исходные файлы за aspx представлениями не обязательно компилировать. Можно вносить изменения и IIS запустит компиляцию налету. В случае с MVC контроллеры лежат в отдельной директории и их всё же приходится компилировать и это серьезная проблема для сайтов с большой нагрузкой.

Если у ASP.NET 5 Core не будет скомпилированного файла, значит исходники вынуждены будут компилироваться налету. 

Чем отличается JavaScript от Java?

Хороший ответ сегодня нашел на stakoverflow. Судя по постам это сообщение очень старое, но я на этом сайте просто бываю очень редко. Попробую перевести не дословно, а именно сохраняя смысл:

Один в своей основе является игрушкой, созданный для создания небольших кусков кода и традиционно используется и злоупотребляется не опытными программистами. 

Что лучше - virtual или final по умолчанию

Такие языки как Java (как я понял Ruby on Rails тоже сюда относится) делают все методы по умолчанию виртуальными. Это значит, что любой наследник может переопределить любой метод, если явно не написано ключевое слово final. В C# наоборот, все методы по умолчанию final и если ты хочешь переопределение, то должен явно указать у предка слово virtual. 

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

В данном случае я сторонник подхода Microsoft и считаю его правильным. Закрывать все по умолчанию соответствует банальным требованиям безопасности - должно быть запрещено все, что явно не разрешено. Открытость Java - это хорошо, но открытость и безопасность - разные вещи. 

Swift в режиме REPL

У нового языка Swift появилась возможность исполнять команды в режиме REPL. Достаточно запустить командную строку и выполнить команду swift, как появляется специализированная командная строка, в которой можно писать код Swift. Стоит только ввести строку кода, нажать Enter, и тут же можно увидеть результат работы строки.

Response Cookie автоматически создает плюшки

У меня в одном из мест в коде может быть создана плюшка. Если плюшка существует, то запросы должны перенаправляться на определенную страницу. При этом код создания плюшки находится в одном месте, а проверки в другом. 

Так вот, один программист написал код, который добавляет новую Cookie в Response.Cookie, а в другом месте проверяет, если Response.Cookie существует, то читает значение и перенаправляет пользователя. 

И тут начинается немного конфузия в коде. Дело в том, что если Response.Cookie["Здесь имя"] не существует, то она будет создана автоматически с пустым значением. Если честно, не понял, зачем это сделано, но это значит, что лучше не трогать таким образом объект, иначе он создаст лишних плюшек. 

MVC упрощает редизайны?

Я несколько раз читал статьи про MVC и там этот патерн показывали как что-то магическое, что упрощает редизайн сайта. На самом же деле редизайн не сильно зависит от того, какой патерн вы используете, он больше зависит от качества кода. Даже наверно я скажу так - зависит от того, думал ли программист о том, что возможен редизайн. 

Кстати, простота смены дизайна очень часто зависит не от Backend программиста, а от WEB программиста, который пишет HTML и JavaScript. 

Этот сайт у меня построен без каких либо MVC и он даже не использует прелести объектного программирования. Просто когда я его создавал, я думал, что это будет только блог, это потом уже появился раздел книг, статей и остальные страницы. Я уже несколько раз делал редизайн и для смены дизайна при наличии готового HTML мне каждый раз нужно было не более двух часов. 

Забыл изменить номер версии

У меня это вечная проблема - я не меняю номер версии в своих программах. Я просто не слежу за ними. Вот только что вышла очередная версия моей игрушки Connecticus и в окне About до сих пор светится 1.0, хотя реально это уже третий выход программы. В AppStore последняя версия опубликована как 1.2. 

Нужно будет подправить программу и читать номер версии из мета данных сборки. Apple требует обновлять номер и не позволяет загружать разные сборки под одним и тем же номером, так что в мета данных мне приходиться увеличивать номер, заодно это будет автоматически отображаться и в окне About. 

А ты следишь за номерами версий и сборок?

Андроид приложения на Хромиуме

Google хочет, чтобы программисты разрабатывали более универсальные приложения для Андроида, которые будут работать и на Хромбуке. Ну на сколько я знаю, под андроид далеко не все приложения для смартфона хорошо работают на планшетах, так что делать что-то сразу для трех платформ будет явно не из легких задач. 

Но тут я хотел бы отметить то, что Хромбук должен будет иметь тот де самый API, что и Андроид. У обеих ОС одни корни, но всё же разные команды (на сколько я слышал). А раз так, то будет иметь смысл объединить разработчиков и создавать что-то универсальное, как это делает Microsoft.

Apple меняет язык Swift без сохранения совместимости

Вышло очередне обновление XCode и Apple в очередной раз сделала улучшения в язык Swift. При этом разработчики явно не заморачиваются с сохранение обратной совместимости и в очередной раз затравили программистов обновлять свой код. 

Я не знаю как Google поступает со своими SDK, а Microsoft в основном сохраняет совместимость на долгое время, делая жизнь программистов проще. 

Не смотря на то, что меня не очень сильно обрадовала необходимость обновить свой код, я всё же предпочитаю подход Apple. Если разработички нашли более хорошее решение, то лучше обновить один раз и не оставлять мусор ради сохранения совместимости.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне