Блог

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

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

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

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

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

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

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

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

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

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

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

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

Swift в режиме REPL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оптимизация с помощью final

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

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

Смотрим на следующий пример:

Новые возможности C# 6

Не могу говорить со 100% уверенностью, но мне кажется, что Microsoft реально пыталась создать в лице .NET слишком максимально похожим на С, чтобы его проще было учить. Но при этом они сделали большую ошибку - создавали новый язык на старых шпалах. Попытка максимально взять из C++ привела к тому, что в язык было введено много устаревших конструкций. 

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

Короче, в Swift можно писать имена переменных прямо в строке "Это значение переменной \(param)". Вот в такие круглые скобки, где перед первой скобкой стоит слэш, можно писать переменные. Это удобнее, чем указывать номера в фигурных скобках, как это делается в C или C#. Как я понял, начиная с C# 6 в фигурных скобках можно будет писать имена переменных. Больше не нужно высчитывать номера и расставлять переменные в нужно порядке, просто пишем их прямо в строке.

О блоге

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

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

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

Пишите мне