Archive for the ‘Programming’ Category
JavaScript и replaceall
Как ни странно, но конструкция вида:
var string = "find this and find that".replace("find", "found");
получит на выходе «found this and find that». Но не надо никаких циклов, что бы сделать правильно, достаточно простого регекспа (точнее модификатора ‘g’):
var string = "find this and find that".replace(/find/g, "found");
и в итоге – все нашли – «found this and found that».
Немного об Objective-C и Cocoa
Так получилось, что хоть я и сторонник технологий Microsoft, последние два-три года я являюсь Mac-пользователем, а последний год – Mac является моим основным рабочим ноутбуком. Для .Net я разрабатываю в виртуальной машине, а Python, Mono, впрочем как и много чего другого – нативно.
Но заинтересовался я и Objective-C, надо же заниматься саморазвитием +) Итак начну по порядку, первым делом я пошел на официальный сайт и вошел в Developer’s Zone, где нашел статью какраз для меня – Introduction to Cocoa, пролистал и, откровенно говоря, объема статьи для понимания мне абсолютно не хватило. В итоге открыл Google, Xcode и начал писать…
Прочтите эту запись до конца »
ExpandoObject или «Зачем из C# делают динамически типизированный язык?»
Сейчас в Visual C# Highlights последним постом висит «Introducing the Expando Object». Это, наверное, третий или четвертый пост про DLR (Dynamic Language Runtime), но лично для меня самый пугающий.
Посмотрим на пример (кстати, не так давно я описывал «Enumerator в Python»):
dynamic contact = new ExpandoObject(); contact.Name = "Alexander Shvetsov"; contact.Location = "Moscow, Russian Federation";
Уменьшение лога транзакций (Shrink transaction log) в MSSQL
Иногда случается что большие транзакции могут зависнуть (эксепшны, аварийный выход), в таком случае Transaction Log может вырастать до неимоверных размеров – иногда соизмеримыми с объемом данных. Если лог все же не нужен, уменьшить его объем можно простой командой SHRINKFILE:
USE [MyDatabase]; BACKUP LOG [MyDatabase] WITH TRUNCATE_ONLY; DBCC SHRINKFILE(MyDatabase_Log, 10) GO
В гугле почему-то очень трудно найти внятный пример использования.
Задача на внимательность
Если задача об идентификаторах была скорее на логику, то вот небольшая задача на внимательность.
Как будет работать такая конструкция в C#?
while (value --> 0) { ... }
Одним словом, что делает такая стрелочка?
Разные модификаторы для get и set в C#
Отнють нетривиальным можно назвать возможность выставлять различные модификаторы доступа для get и set в свойствах. Все очень просто, а между тем и очень полезно.
public string Name
{
get { return this.name; }
internal set { this.name = value; }
}
Update: Жаль, нельзя так же определять свойства в интерфейсах.
Url Routing в ASP.NET
Сейчас достаточно популярен фреймворк ASP.NET MVC. Сам по себе «паттерн» MVC достаточно интересен, но не всегда применим. Конечно же он накладывает множество ограничений и на разработчика, и на приложение. Но ведь иногда можно почерпнуть отдельную часть, без ущерба для кого-либо, в данном случае это механизм URL роутинга, который всемте с .Net 3.5 SP1 вошел во фрэймворк в виде неймспейса System.Web.Routing.
Прочтите эту запись до конца »
Удобный дебаггинг в C#
Просматривая нэймспейс System.Diagnostics, обнаружил много интересного, но самым интересным показался аттрибут DebuggerStepThroughAttribute. Сегодня же, нашел интересный пост посвященный тому, как применять этот аттрибут к свойствам (очень неочевидно, но логично):
public object MyProperty {
[DebuggerStepThrough]
get { return this.myobject; }
}
В результате же на таком вызове мы не будем проваливаться в геттер:
object one = two.MyProperty;
Ответ на задачу об идентификаторах
Самое производительное и ничем не ограниченное решение задачи об идентификаторах:
def Increment( string ):
for i in range( len( string ) - 1, 0 ):
if string[i].isdigit():
val = int( string[i] ) + 1
if val == 10:
string[i] = '0'
else:
string[i] = str( val )
break
else:
break
return string
Задача на собеседование
Проводя собеседования я всегда давал одну из самых моих любимых задачек на логику и внимание в программировании. Задача простая:
Имеется идентификатор платежа, например INV03329993892129, нужно придумать как этот идентификатор инкрементировать и описать метод, позволяющий это сделать. Префикс постоянный. Длина идентификатора должна быть неизменна.
Жаль, что первым делом я видел лишь демонстрацию знания регулярных выражений.
Прочтите эту запись до конца »