четвер, 30 грудня 2010 р.

Ext-method: Capitalize


public static string Capitalize(this string value)
{
if(string.IsNullOrEmpty(value)) return value;
if(value.Length == 1) return value.ToUpper();
return value.Substring(0, 1).ToUpper() + value.Substring(1).ToLower();
}

середу, 8 грудня 2010 р.

CSS хаки

div {
background: red; /* для нормальных браузеров */
//background: green; /* для всех ie */
-background: blue; /* “_”, или дефис “-“ для ie6 и ниже */
*background: blue; /* для ie7 и ниже */
}

середу, 1 грудня 2010 р.

вівторок, 30 листопада 2010 р.

Render user control to a string

Simple render:

var c = LoadControl("uc.ascx");
using(var sw = new System.IO.StringWriter())
using(var tw = new HtmlTextWriter(sw))
{
c.RenderControl(tw);
Controls.Add(new LiteralControl(sw.ToString()));
}


Execute and render:

var c = LoadControl("uc.ascx");
var page = new Page();
page.Controls.Add(c);

using(var sw = new System.IO.StringWriter())
using(var tw = new HtmlTextWriter(sw))
{
Server.Execute(page, tw, false);
Controls.Add(new LiteralControl(sw.ToString()));
}

суботу, 20 листопада 2010 р.

Add mime types with IIS7


<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
</staticContent>
</system.webServer>
</configuration>

середу, 17 листопада 2010 р.

.NET Round


Math.Round(3.5);//=4
Math.Round(4.5);//=4

Math.Round(3.5, MidpointRounding.AwayFromZero);//=4
Math.Round(4.5, MidpointRounding.AwayFromZero);//=5

середу, 10 листопада 2010 р.

Call webservice with basic auth


var srv = new SalersService();
srv.Credentials = new NetworkCredential("[user]", "[pass]");
...

Call webservice via proxy


var srv = new SalersService();
var proxy = new WebProxy("[url]", [port]);
proxy.Credentials = new NetworkCredential("[user]", "[pass]", "[domain]");
srv.Proxy = proxy;
...

понеділок, 1 листопада 2010 р.

Кириллица в куках

Можно использовать UrlEncode, UrlDecode:

var cookie = new HttpCookie("user", Server.UrlEncode(name));
...
var name = Server.UrlDecode(cookie.Value);

вівторок, 26 жовтня 2010 р.

Cool Player

Нашел крутой плеер




пʼятницю, 15 жовтня 2010 р.

четвер, 14 жовтня 2010 р.

Write to appSettings


System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["LastMsgID"].Value = value.ToString();
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

WPF & Thread.CurrentPrincipal


так неправильно:

System.Threading.Thread.CurrentPrincipal = [YourPrincipal];

так правильно:

AppDomain.CurrentDomain.SetThreadPrincipal([YourPrincipal]);

вівторок, 28 вересня 2010 р.

Select Top n Random Items


class Item
{
public string Name { get; set; }
}
...
var list = new List {
new Item() { Name="Item1" },
new Item() { Name="Item2" },
new Item() { Name="Item3" },
new Item() { Name="Item4" },
new Item() { Name="Item5" },
};

Random rnd = new Random();

var items = from i in list
orderby rnd.Next()
select i;

var top = items.Take(3);

понеділок, 27 вересня 2010 р.

.NET 3.5 RSS Feed Handler


public void ProcessRequest(HttpContext context)
{
SyndicationFeed feed = GetNoveltiesFeed();

var output = new StringWriter();
var writer = new XmlTextWriter(output);

new Rss20FeedFormatter(feed).WriteTo(writer);

context.Response.ContentType = "application/rss+xml";
context.Response.Write(output.ToString());
}

четвер, 23 вересня 2010 р.

Получить top, left static-элемента



var div = $('#div1');
var top = Math.round(div.offset().top);
var left = Math.round(div.offset().left);

четвер, 9 вересня 2010 р.

Remove html-tags from string


var value = Regex.Replace(value, "<[^>]*?>", string.Empty, RegexOptions.IgnoreCase);

пʼятницю, 27 серпня 2010 р.

Метод для провірки телефона


public static bool IsPhone(this string phone)
{
return Regex.IsMatch(phone, @"^\+?[0-9\-() ]{5,19}$");
}

суботу, 21 серпня 2010 р.

Custom css for IE 6


<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="ie6.css" />
<![endif]-->

вівторок, 27 липня 2010 р.

ExtJS grid wrap column

Добавляєм в наше апп метод:

App.Globals.wrapRenderer = function(val) {
return '<div style="white-space:normal !important;">' + val + '</div>';
}


потім використовуємо:

...
{
header: "Описание",
dataIndex: "DESCRIPTION",
renderer: App.Globals.wrapRenderer,
width: 200
},
...

середу, 21 липня 2010 р.

ExtJS app errors handling

Для того щоб будь-які помилки від сервера виводились в спеціальному вікні
можна зробити override метода request:


Ext.override(Ext.data.Connection, {
request: Ext.data.Connection.prototype.request.createSequence(function(o) {
if (!o.failure) {
o.failure = function(response) {
var msg = "Unknown server error";
var resp = Ext.decode(response.responseText);

if (resp && resp.Message) {
msg = resp.Message;
}

Ext.Msg.show({
title: "Server Error",
msg: msg,
minWidth: 300,
buttons: Ext.Msg.OK,
icon: Ext.Msg.ERROR
});
}
}
})
});

пʼятницю, 16 липня 2010 р.

MSSQL paging + sorting + filtering


CREATE PROCEDURE [TestTable_GetPagedAndSortedAndFiltered]
(
@startRowIndex int,
@maximumRows int,
@order nvarchar(50),
@ID int = null,
@Name nvarchar(50) = null,
@Size int = null,
@From datetime = null,
@To datetime = null
)
AS
BEGIN

declare @lastKey int
declare @lastAsc sql_variant
declare @lastDesc sql_variant

set rowcount @startRowIndex

select
@lastAsc = OrderAsc,
@lastDesc = OrderDesc,
@lastKey = OrderKey
from
(
select *,
ID as OrderKey,
case @order
when 'ID' then cast(ID as sql_variant)
when 'Name' then cast(Name as sql_variant)
when 'Size' then cast(Size as sql_variant)
when 'Created' then cast(Created as sql_variant)
else ID
END as OrderAsc,
case @order
when 'ID DESC' then cast(ID as sql_variant)
when 'Name DESC' then cast(Name as sql_variant)
when 'Size DESC' then cast(Size as sql_variant)
when 'Created DESC' then cast(Created as sql_variant)
END as OrderDesc
from TestTable
where
((@ID is null) or (@ID = ID))
and
((@Name is null) or (Name like @Name))
and
((@Size is null) or (@Size = Size))
and
((@From is null) or (@From < Created))
and
((@To is null) or (dateadd(day,1,@To) > Created))
) as T
order by OrderAsc,OrderDesc desc,OrderKey

set rowcount @maximumRows

select *
from
(
select *,
ID as OrderKey,
case @order
when 'ID' then cast(ID as sql_variant)
when 'Name' then cast(Name as sql_variant)
when 'Size' then cast(Size as sql_variant)
when 'Created' then cast(Created as sql_variant)
else ID
END as OrderAsc,
case @order
when 'ID DESC' then cast(ID as sql_variant)
when 'Name DESC' then cast(Name as sql_variant)
when 'Size DESC' then cast(Size as sql_variant)
when 'Created DESC' then cast(Created as sql_variant)
END as OrderDesc
from TestTable
where
((@ID is null) or (@ID = ID))
and
((@Name is null) or (Name like @Name))
and
((@Size is null) or (@Size = Size))
and
((@From is null) or (@From < Created))
and
((@To is null) or (dateadd(day,1,@To) > Created))

)as T
where
(
@lastAsc is null
and
@lastDesc is null
and
@lastKey is null
)
or
(
@lastAsc is not null
and
(
OrderAsc > @lastAsc
or
OrderAsc = @lastAsc
and
OrderKey >= @lastKey
)
)
or
(
@lastDesc is not null
and
(
OrderDesc < @lastDesc
or
OrderDesc = @lastDesc
and
OrderKey >= @lastKey
)
)
order by OrderAsc,OrderDesc desc,OrderKey

set rowcount 0

END

MSSQL sort and filter procedure

Припустимо в нас є табличка:

CREATE TABLE [TestTable](
[ID] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[Size] [int] NULL,
[Created] [datetime] NULL
)

Для сортування і фільтрації по всіх полях можна використати процедуру:

CREATE PROCEDURE [TestTable_GetPagedAndSorted]
(
@startRowIndex int,
@maximumRows int,
@order nvarchar(50)
)
AS
BEGIN

declare @lastKey int
declare @lastAsc sql_variant
declare @lastDesc sql_variant

set rowcount @startRowIndex

select
@lastAsc = OrderAsc,
@lastDesc = OrderDesc,
@lastKey = OrderKey
from
(
select *,
ID as OrderKey,
case @order
when 'ID' then cast(ID as sql_variant)
when 'Name' then cast(Name as sql_variant)
when 'Size' then cast(Size as sql_variant)
when 'Created' then cast(Created as sql_variant)
else ID
END as OrderAsc,
case @order
when 'ID DESC' then cast(ID as sql_variant)
when 'Name DESC' then cast(Name as sql_variant)
when 'Size DESC' then cast(Size as sql_variant)
when 'Created DESC' then cast(Created as sql_variant)
END as OrderDesc
from TestTable
) as T
order by OrderAsc,OrderDesc desc,OrderKey

set rowcount @maximumRows

select *
from
(
select *,
ID as OrderKey,
case @order
when 'ID' then cast(ID as sql_variant)
when 'Name' then cast(Name as sql_variant)
when 'Size' then cast(Size as sql_variant)
when 'Created' then cast(Created as sql_variant)
else ID
END as OrderAsc,
case @order
when 'ID DESC' then cast(ID as sql_variant)
when 'Name DESC' then cast(Name as sql_variant)
when 'Size DESC' then cast(Size as sql_variant)
when 'Created DESC' then cast(Created as sql_variant)
END as OrderDesc
from TestTable
)as T
where
(
@lastAsc is null
and
@lastDesc is null
and
@lastKey is null
)
or
(
@lastAsc is not null
and
(
OrderAsc > @lastAsc
or
OrderAsc = @lastAsc
and
OrderKey > @lastKey
)
)
or
(
@lastDesc is not null
and
(
OrderDesc < @lastDesc
or
OrderDesc = @lastDesc
and
OrderKey > @lastKey
)
)
order by OrderAsc,OrderDesc desc,OrderKey

set rowcount 0

END

MSSQL ORDER BY CASE

Припустимо в нас є табличка:

CREATE TABLE [TestTable](
[ID] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[Size] [int] NULL,
[Created] [datetime] NULL
)


Сортувати її за значення певного параметра можна так:

declare @order nvarchar(50)
set @order = 'Created DESC'

select *
from TestTable
order by

case @order
when 'ID' then cast(ID as sql_variant)
when 'Name' then cast(Name as sql_variant)
when 'Size' then cast(Size as sql_variant)
when 'Created' then cast(Created as sql_variant)
END,
case @order
when 'ID DESC' then cast(ID as sql_variant)
when 'Name DESC' then cast(Name as sql_variant)
when 'Size DESC' then cast(Size as sql_variant)
when 'Created DESC' then cast(Created as sql_variant)
END desc

суботу, 10 липня 2010 р.

ExtJs VS2008 Project Template

Створив непоганий темплейт для студії:





кому цікаво - можу вислати:)

четвер, 8 липня 2010 р.

ExtJs store для json web-сервиса

Используя proxy из предыдущего поста, напишем и сохраним в файл
Ext.data.WsJsonStore.js следуючий код:


Ext.data.WsJsonStore = Ext.extend(Ext.data.JsonStore, {
constructor: function(c) {
var d = {
root: 'd',
proxy: new Ext.data.WsProxy({
url: c.url
})
}
Ext.data.WsJsonStore.superclass.constructor
.call(this, Ext.apply(d, c));
}
});


Потом, подключив оба файла, используем:

var store = new Ext.data.WsJsonStore({
url:'url',
fields: [fields],
...
});

ExtJs proxy для web-сервиса

В файл Ext.data.WsProxy.js сохраним такой код:


Ext.data.WsProxy = Ext.extend(Ext.data.HttpProxy, {
constructor: function(c) {
var d = {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
}
Ext.data.WsProxy.superclass.constructor
.call(this, Ext.apply(d, c));
}
});


Потом, подключив его, используем:


var proxy = new Ext.data.WsProxy({
url:'url'
});

суботу, 26 червня 2010 р.

JSON запрос к web-сервису на ExtJs

Для удобства создадим метод:

Ext.Ajax.ws = function(o){
Ext.Ajax.request({
method : "POST",
url : o.url,
jsonData : o.data || "{}",
headers : {
"Content-Type": "application/json;charset=utf-8"
},
success : function(resp){
o.success(Ext.decode(resp.responseText));
}
});
}

Потом используем:

Ext.Ajax.ws({
url:"url",
data:"json data",
success:function(data){
}
});

четвер, 24 червня 2010 р.

Уроки дизайну йдуть на користь

Застосував останні навики дизайну на сайті http://yoursofthouse.com/

неділю, 30 травня 2010 р.

Знайшов цікаві уроки по Photoshop

http://www.photoshop-master.ru

Виконав один урок:
http://www.photoshop-master.ru/lessons.php?rub=4&id=731

вівторок, 4 травня 2010 р.

MS SQL sysobjects table

SELECT * FROM sysobjects WHERE xtype = <type>

<type>:
C: Check constraint
D: Default constraint
F: Foreign Key constraint
L: Log
P: Stored procedure
PK: Primary Key constraint
RF: Replication Filter stored procedure
S: System table
TR: Trigger
U: User table
UQ: Unique constraint
V: View
X: Extended stored procedure

1. Get all tables:

SELECT [name]
FROM sysobjects
WHERE xtype = 'U'
order by [name]

2. Get all columns by table:

SELECT syscolumns.name as [name],
systypes.name as [datatype],
syscolumns.length as [length]
FROM sysobjects
JOIN syscolumns ON sysobjects.id = syscolumns.id
JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE sysobjects.xtype='U' and sysobjects.name = <table name>
ORDER BY syscolumns.colid

суботу, 1 травня 2010 р.

Raise error from SQL code

RAISERROR('error message', 16, 1)

четвер, 15 квітня 2010 р.

AJAX Control Toolkit CalenderExtender localization

The Calendar Extendar supports localization ,and you can localize it by setting the EnableScriptGlobalization Script Manager property to true , this way the calendar extendar will display its contents based on the current page culture.

суботу, 10 квітня 2010 р.

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



Вывод типа (Type Inference)
// Можно объявить переменную так:
var localVar = new MyLongFooClassWithTemplate<MyLongTypeParameter>();


Анонимные типы (Anonymous Type)
// Вот так выглядит объявление нового типа:
var anon = new { a = 3, b = 4.81, c = "string data" };


Расширяющие методы (Extension Methods)
// добавить this перед первым параметром метода
public static int ElementCount(this IEnumerable enumerable)
...
// и вызывать этот утилитный метод можно так
int count = array.ElementCount();


Лямбда-выражения (Lambda Expression
//old
var filtered = items.Filter(delegate(int i) { return i % 2 == 0; });
//new
var filtered = items.Filter(n => n % 2 == 0);


Auto Properties
public string Name { get; set; }


Ленивые вычисления (Lazy Evaluation)


Частичные методы (Partial Methods)

суботу, 20 березня 2010 р.

Cистемные требования windows XP, Vista, 7

Win XP Professional:
- PC: 300 MHz; min: 233 MHz
- RAM: 128 MB; min: 64 MB
- HDD: 1.5 Gb

Win Vista:

- PC: 1 GHz; min: 800 MHz
- RAM: 1 GB; min: 512 MB
- HDD: 15 Gb
- Graphics: DirectX 9.0
- Video: 32Mb (Home Basic), 128Mb(other)

Win 7:
- PC: 1 GHz;
- RAM: 1 GB(x86); 2 GB(x64);
- HDD: 16 Gb(x86); 20 Gb(x64);
- Graphics: DirectX 9.0
- Video: 128Mb

вівторок, 16 березня 2010 р.

Закладки

Знайшов кілька закладок
http://www.searchlast.co.uk/blog/search-engine-optimisation/how-to-create-a-twitter-bookmark/

del.icio.us
<a href="http://del.icio.us/post?url=http://www.searchlast.
co.uk/blog/&title=Product+Price+Comparison+and+E-commerce
+News+Blog" >Del.icio.us</a>

Digg
<a href="http://digg.com/submit?url=http://www.searchlast.
co.uk/blog/&title=Product+Price+Comparison+and+E-commerce
+News+Blog" >Digg.com</a>

Reddit
<a href="http://reddit.com/submit?url=http://www.searchlast.
co.uk/blog/&title=Product+Price+Comparison+and+E-commerce+
News+Blog" >Reddit.com</a>

Facebook
<a href="http://www.facebook.com/sharer.php?u=http://www.
searchlast.co.uk/blog/">Facebook.com</a>

StumbleUpon
<a href="http://www.stumbleupon.com/submit?url=http://www.
searchlast.co.uk/blog/&title=Product+Price+Comparison+and
+E-commerce+News+Blog" >StumbleUpon.com</a>

Twitter
<a href="http://www.twitter.com/home?status=Currently+reading
+http://www.searchlast.co.uk/blog/" >Twitter.com</a>

Мій твіттер

Тепер і я в твіттері)))

http://twitter.com/khmurach

суботу, 20 лютого 2010 р.

JavaScript: replace XML special characters


XmlHelper = {};

XmlHelper.getExp = function(str)
{
return new RegExp(str, 'g');
}

XmlHelper.encodeInvalidChars = function(str) {
return str
.replace(this.getExp('&'),'&amp;')
.replace(this.getExp('<'),'&lt;')
.replace(this.getExp('>'),'&gt;')
.replace(this.getExp('\''),'&apos;')
.replace(this.getExp('"'),'&quot;')
}
XmlHelper.decodeInvalidChars = function(str) {
return str
.replace(this.getExp('&amp;'),'&')
.replace(this.getExp('&lt;'),'<')
.replace(this.getExp('&gt;'),'>')
.replace(this.getExp('&apos;'),'\'')
.replace(this.getExp('&quot;'),'"')
}

четвер, 18 лютого 2010 р.

C#: replace XML special characters

System.Security.SecurityElement.Escape(string str);


  1. & - &amp;

  2. < - &lt;

  3. > - &gt;

  4. " - &quot;

  5. ' - &apos;