<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5756517632995991506</id><updated>2012-02-01T18:05:15.427-05:00</updated><category term='LINQ'/><category term='jQuery'/><category term='CSS'/><category term='Cab files'/><category term='SQLite'/><category term='Java'/><category term='IIS'/><category term='AsyncFileUpload'/><category term='ASP.NET'/><category term='HTTP'/><category term='C#'/><category term='SOAP'/><category term='LINQ to Entities'/><category term='Microsoft Certification'/><category term='ASP.NET 4.0 Chart Control'/><category term='WCF'/><category term='Memory Optimization'/><category term='Fiddler'/><category term='HTML'/><category term='MCTS'/><category term='ADO.Net Entity Framework'/><category term='BlackBerry API'/><category term='JavaScript'/><category term='.NET'/><category term='ASP.NET AJAX Control Toolkit'/><title type='text'>Michael Narinsky</title><subtitle type='html'>Programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-1647541067480417355</id><published>2011-07-11T19:22:00.001-04:00</published><updated>2011-07-11T19:23:42.258-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='BlackBerry API'/><category scheme='http://www.blogger.com/atom/ns#' term='Memory Optimization'/><title type='text'>BlackBerry: Cursor.close() and memory optimization</title><content type='html'>&lt;p&gt;There is a couple of things I’ve learned about BlackBerry Java development that I think might be worth sharing.&lt;/p&gt;  &lt;h4&gt;1. SQLite: Don’t use Cursor.close() – use Statement.close() instead.&lt;/h4&gt;  &lt;h4&gt;&lt;font style="font-weight: normal"&gt;It turned out that Cursor.close() method is also closing the Statement that was used to create that Cursor, even if the Statement was later reinitialized. I believe that removing Cursor.close() calls from the code helped me to avoid a couple of ‘File System Error (12)’ errors while doing some IO operations over the SQLite db file. I tend to think that ‘File System Error (12)’ error actually means ‘File is locked’ (thank you BlackBerry, btw, for such nice, self-explanatory error messages and providing no documentation about them), so now it all makes sense to me.&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;More info: &lt;a href="http://supportforums.blackberry.com/t5/Java-Development/Cursor-close-closes-the-Statement-used-to-Create-It/ta-p/614699"&gt;http://supportforums.blackberry.com/t5/Java-Development/Cursor-close-closes-the-Statement-used-to-Create-It/ta-p/614699&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;2. Memory optimization&lt;/h4&gt;  &lt;h4&gt;&lt;font style="font-weight: normal"&gt;There is a nice blog post that provides an overview of RIM’s memory monitoring tools (Memory Statistics, Object Statistics and Objects) and gives a set of steps that should be taken in order to detect a memory leak and identify the root cause. I’ve seen this article before, but this time I’ve actually read it thoroughly (all three parts) and I think it’s very good place to start if you do a memory optimization:&lt;/font&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;a href="http://devblog.blackberry.com/2009/10/how-to-find-that-memory-leak-part-one/"&gt;&lt;font style="font-weight: normal"&gt;http://devblog.blackberry.com/2009/10/how-to-find-that-memory-leak-part-one/&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;a href="http://devblog.blackberry.com/2010/01/how-to-find-that-memory-leak-part-two-detecting-the-leak/"&gt;&lt;font style="font-weight: normal"&gt;http://devblog.blackberry.com/2010/01/how-to-find-that-memory-leak-part-two-detecting-the-leak/&lt;/font&gt;&lt;/a&gt;&lt;font style="font-weight: normal"&gt; (you might need to tweak images’ source URLs in order to get them for this part)&lt;/font&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;a href="http://devblog.blackberry.com/2010/03/how-to-find-that-memory-leak-part-three/"&gt;&lt;font style="font-weight: normal"&gt;http://devblog.blackberry.com/2010/03/how-to-find-that-memory-leak-part-three/&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-1647541067480417355?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/1647541067480417355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=1647541067480417355&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/1647541067480417355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/1647541067480417355'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2011/07/blackberry-cursorclose-and-memory.html' title='BlackBerry: Cursor.close() and memory optimization'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-606213468351354133</id><published>2011-03-27T15:43:00.001-04:00</published><updated>2011-08-10T15:54:48.967-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><category scheme='http://www.blogger.com/atom/ns#' term='BlackBerry API'/><title type='text'>BlackBerry: Sending an HTTP request in a separate thread</title><content type='html'>&lt;p&gt;Sending an HTTP request in a separate thread is a very common operation for almost every client-server web application. The idea is to spin-off a background thread that will send a request and process the response data, but won’t block the main (GUI) thread on the same time.&amp;#160; At the end of its execution the background thread should use some kind of a callback mechanism to pass response results back to the main thread. Since this operation is very common I was expecting that pretty much every modern framework should have a lot of tutorials available online describing how to implement this functionality in a quick and easy way. However this was not the case for the BlackBerry Java API -&amp;#160; after a couple of hours researching I still didn’t find anything that was ‘quick and easy’…&lt;/p&gt;  &lt;p&gt;Finally, looking through RIM’s API docs I found a method &lt;a href="http://www.blackberry.com/developers/docs/6.0.0api/net/rim/device/api/system/Application.html#invokeLater(java.lang.Runnable)" target="_blank"&gt;Application.invokeLater()&lt;/a&gt; which can take a runnable object defined in a background thread and start it in the main thread. This method allowed me to pass execution control back to the main thread.&lt;/p&gt;  &lt;p&gt;Here is a sample code:&lt;/p&gt;  &lt;p&gt;First let’s create a ConnectionThread class that can take a URL (to send a request to) and call a method of some screen once the response is received (for the sake of simplicity we’ll be calling a method of the screen that is currently on top of the screen’s stack).&lt;/p&gt;  &lt;pre class="brush: java; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public class ConnectionThread extends Thread {
	String URL;

	public ConnectionThread(String URL) {
		this.URL = URL; //URL to send a request to
	}

	public void run() {
		//optional: show some popup &amp;quot;Please wait screen&amp;quot;
		final Screen dialogScreen = new WaitPopupScreen(); //wait popup screen extends RIM's PopupScreen class
		UiApplication.getUiApplication().invokeLater(new Runnable() {
			public void run() {
				UiApplication.getUiApplication().pushModalScreen(dialogScreen);
			}
		});

		//send HTTP request and save the response
		HttpConnection connection = null;
		//use API 5.0 Connection factory class to get first available connection
		byte responseData[] = null;
		try { 
			connection = (HttpConnection) new ConnectionFactory().getConnection(URL).getConnection();
			int len = (int) connection.getLength();
			responseData = new byte[len];
			DataInputStream dis;
			dis = new DataInputStream(connection.openInputStream());
			dis.readFully(responseData);
		} catch (Exception e) {
			 // TODO Handle exception 
		} 

		final byte[] responseDataToProcess = responseData;
		//use invokeLater method to pass results back to the main thread
		UiApplication.getUiApplication().invokeLater(new Runnable() {
			public void run() {
				UiApplication.getUiApplication().popScreen(dialogScreen); //hide wait popup screen
				//pass results to the callback mathod of the current screen
				((MyScreen)UiApplication.getUiApplication().getActiveScreen()).callBackMethod(responseDataToProcess);
			}
		});
	}
}&lt;/pre&gt;
This is the actual screen where we spin the connection thread off: 

&lt;pre class="brush: java; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public class MyScreen extends MainScreen {
	public MyScreen() {
		super();
		// add a button that will initiate an HTTP request
		ButtonField requestButton = new ButtonField(&amp;quot;Send HTTP Request&amp;quot;);
		requestButton.setChangeListener(new FieldChangeListener() {
			public void fieldChanged(Field field, int context) {
				//start connectionThread on a button click
				new ConnectionThread(&amp;quot;http://mnarinsky.com&amp;quot;).start();
			}
		});
		add(requestButton);
	}
	
	//this method will be called from the connection thread
	public void callBackMethod(byte[] responseData){
		//process response
	}
}&lt;/pre&gt;
Finally this is a code for an optional 'Please wait' popup screen – displays a simple “Please wait..” text. If you want you can make it little more fancy by using &lt;a href="http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800332/800505/800345/How_To_-_Display_an_animated_GIF.html?nodeid=1405903&amp;amp;vernum=0" target="_blank"&gt;some animated GIF image.&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;pre class="brush: java; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public class WaitPopupScreen extends PopupScreen {
	public WaitPopupScreen() {
		super(new VerticalFieldManager());
		LabelField labelField = new LabelField(&amp;quot;Please wait...&amp;quot;,
				Field.FIELD_HCENTER);
		add(labelField);
	}
}&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-606213468351354133?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/606213468351354133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=606213468351354133&amp;isPopup=true' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/606213468351354133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/606213468351354133'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2011/03/blackberry-sending-http-request-in.html' title='BlackBerry: Sending an HTTP request in a separate thread'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-5937848173877050355</id><published>2011-03-13T21:13:00.001-04:00</published><updated>2011-03-13T21:14:05.727-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Certification'/><category scheme='http://www.blogger.com/atom/ns#' term='MCTS'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Microsoft Certification</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_V2c2YNu_CKo/TX1rnv0SN8I/AAAAAAAAvWc/X6WdJZgSca4/s1600-h/mcts-logo%5B2%5D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mcts-logo" border="0" alt="mcts-logo" src="http://lh5.ggpht.com/_V2c2YNu_CKo/TX1rn3YgloI/AAAAAAAAvWg/L-giBXyXopU/mcts-logo_thumb.gif?imgmax=800" width="244" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Last month I have passed &lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-515" target="_blank"&gt;Microsoft Exam 70-515&lt;/a&gt; (Web Applications Development with .NET Framework 4.0) and thus finally completed my long term project of getting a Microsoft .NET Developer Certification.&lt;/p&gt;  &lt;p&gt;It all started in October 2009 – back then I’ve decided to pass MS Exam# 70-536 (.NET Application Development Foundation), which was a pre-requirement for all Microsoft development certifications. I’ve got a preparation book, studied it thoroughly and was ready for an exam around March 2010 - just a month before .NET 4.0 came out and Microsoft has announced a complete new set of exams targeting the updated framework. New exams became available on July 2010, but no preparation materials were released until December 2010. Around Christmas 2010 I finally got a new preparation book, spent another 2 months preparing and, voila, passed it in February 2011 – just 14 month after the start :)&lt;/p&gt;  &lt;p&gt;Anyway, glad that this project is finally over – time to move on to the next one…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-5937848173877050355?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/5937848173877050355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=5937848173877050355&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/5937848173877050355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/5937848173877050355'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2011/03/microsoft-certification.html' title='Microsoft Certification'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_V2c2YNu_CKo/TX1rn3YgloI/AAAAAAAAvWg/L-giBXyXopU/s72-c/mcts-logo_thumb.gif?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-4522971559444687985</id><published>2010-07-06T16:51:00.001-04:00</published><updated>2010-07-06T17:12:50.570-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='AsyncFileUpload'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET AJAX Control Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Customizing ASP.NET AJAX Control Toolkit AsyncFileUpload look</title><content type='html'>&lt;p&gt;The standard HTML &amp;lt;input type=”file”&amp;gt; element does not work inside ASP.NET update panel due to security reasons and restrictions a browser implies (It is not allowed for JavaScript to directly access files in a user's system and it is not allowed to access the details of the selected file). &lt;a href="http://www.asp.net/ajax/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx" target="_blank"&gt;ASP.NET AJAX Toolkit AsyncFileUpload control&lt;/a&gt; seems to be an easy way to solve this issue – it works out-of-box (well, after you add AjaxControlToolkit binaries to your project) and provides an excepted functionality to the end-user.&lt;/p&gt;  &lt;p&gt;One problem I faced during my work with AsyncFileUpload was inability to customize the look of the control. This is a pretty common issue with a &amp;lt;input type=”file”&amp;gt; element in general and a pretty neat solution for this is described &lt;a href="http://www.quirksmode.org/dom/inputfile.html" target="_blank"&gt;here&lt;/a&gt;. The basic idea of this solution is that you place &amp;lt;input type=”file”&amp;gt; element on top of another custom element (picture, button, etc.) and then set &amp;lt;input type=”file”&amp;gt; element’s opacity to 0, so it will be transparent and the user will only see the element underneath (picture, button, etc.), but clicking on that element will causes &amp;lt;input type=”file”&amp;gt; to fire off it’s click event. &lt;/p&gt;  &lt;p&gt;This technique seems to work fine when working with regular &amp;lt;input type=”file”&amp;gt;, however AsyncFileUpload control does not allow to set its opacity…&lt;/p&gt;  &lt;p&gt;So in order to solve this let’s take a look at how AsyncFileUpload control is being rendered.&lt;/p&gt;  &lt;p&gt;Turns out that this code:&lt;/p&gt;  &lt;pre class="brush: xml; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;div id=&amp;quot;fileUploadDiv&amp;quot;&amp;gt;
    &amp;lt;asp:AsyncFileUpload ID=&amp;quot;AsyncFileUpload1&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;will be rendered as:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;div id=&amp;quot;fileUploadDiv&amp;quot;&amp;gt;    
    &amp;lt;span id=&amp;quot;MainContent_AsyncFileUpload1&amp;quot;&amp;gt;    
        &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ctl00$MainContent$AsyncFileUpload1$ctl00&amp;quot; id=&amp;quot;MainContent_AsyncFileUpload1_ctl00&amp;quot; /&amp;gt;    
        &amp;lt;div id=&amp;quot;MainContent_AsyncFileUpload1_ctl01&amp;quot; name=&amp;quot;MainContent_AsyncFileUpload1_ctl01&amp;quot;&amp;gt;    
            &amp;lt;input name=&amp;quot;ctl00$MainContent$AsyncFileUpload1$ctl02&amp;quot; type=&amp;quot;file&amp;quot; id=&amp;quot;MainContent_AsyncFileUpload1_ctl02&amp;quot; id=&amp;quot;MainContent_AsyncFileUpload1_ctl02&amp;quot; onkeydown=&amp;quot;return false;&amp;quot; onkeypress=&amp;quot;return false;&amp;quot; onmousedown=&amp;quot;return false;&amp;quot; style=&amp;quot;width:355px;&amp;quot; /&amp;gt;    
        &amp;lt;/div&amp;gt;    
    &amp;lt;/span&amp;gt;    
&amp;lt;/div&amp;gt;    &lt;/pre&gt;

&lt;p&gt;This means that using a CSS selector &lt;strong&gt;#fileUploadDiv input[type=file]&lt;/strong&gt; you can modify the style (including opacity) of the AsyncFileUpload control the same way you do it with the regular &amp;lt;input type=”file”&amp;gt; control therefore you can still use &lt;a href="http://www.quirksmode.org/dom/inputfile.html" target="_blank"&gt;this nice solution I mentioned before&lt;/a&gt; to give AsyncFileUpload control a custom look you want.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-4522971559444687985?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/4522971559444687985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=4522971559444687985&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/4522971559444687985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/4522971559444687985'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2010/07/customizing-aspnet-ajax-control-toolkit.html' title='Customizing ASP.NET AJAX Control Toolkit AsyncFileUpload look'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-6194672353287789579</id><published>2010-06-16T15:19:00.001-04:00</published><updated>2010-06-18T13:30:25.487-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 4.0 Chart Control'/><title type='text'>ASP.NET 4.0 Chart Control breaks IIS 7.0</title><content type='html'>&lt;p&gt;I’ve decided to add the new ASP.NET 4.0 Chart Control to one of my web apps. Everything worked fine during the testing on my local machine, but once I published it to remote IIS 7.0 server I’ve got the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;HTTP Error 500.23 - Internal Server Error&lt;/strong&gt;         &lt;br /&gt;An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Turns out that it occurs &lt;a href="http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx" target="_blank"&gt;because ASP.NET modules and handlers should be specified in the IIS &amp;lt;handlers&amp;gt; and &amp;lt;modules&amp;gt; configuration sections in Integrated mode.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So the simple solution that worked for me was just to remove the following entry from web.config &amp;lt;system.web&amp;gt; section:&lt;/p&gt;  &lt;pre class="brush: xml; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;httpHandlers&amp;gt;
&amp;lt;add path=&amp;quot;ChartImg.axd&amp;quot; verb=&amp;quot;GET,HEAD,POST&amp;quot; type=&amp;quot;System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
    System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35&amp;quot;
    validate=&amp;quot;false&amp;quot; /&amp;gt;
&amp;lt;/httpHandlers&amp;gt;&lt;/pre&gt;

&lt;p&gt;Also make sure that &amp;lt;system.webServer&amp;gt; section has the following:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;handlers&amp;gt;
	&amp;lt;remove name=&amp;quot;ChartImageHandler&amp;quot; /&amp;gt;
	&amp;lt;add name=&amp;quot;ChartImageHandler&amp;quot; preCondition=&amp;quot;integratedMode&amp;quot; verb=&amp;quot;GET,HEAD,POST&amp;quot;
        path=&amp;quot;ChartImg.axd&amp;quot; type=&amp;quot;System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
        System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; /&amp;gt;
&amp;lt;/handlers&amp;gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-6194672353287789579?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/6194672353287789579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=6194672353287789579&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/6194672353287789579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/6194672353287789579'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2010/06/aspnet-40-chart-control-breaks-iis-70.html' title='ASP.NET 4.0 Chart Control breaks IIS 7.0'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-3216579263744150332</id><published>2009-11-11T18:17:00.002-05:00</published><updated>2009-12-07T16:57:44.504-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cab files'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Creating a .cab file with C#</title><content type='html'>&lt;p&gt;.NET does not have any classes for creating cabinet files out-of-box, so today I had to look what else is available out there. There are a couple of solutions I found for creating a .cab file from the .NET code. The one that actually worked for me was a library developed by Microsoft(!) as part of their &lt;a href="http://wix.sourceforge.net/" target="_blank"&gt;Windows Installer XML (WiX) toolset&lt;/a&gt;. This toolset is distributed with a bunch of dlls as part of its SDK. The library that allows to create cabinet files is called &lt;strong&gt;Microsoft.Deployment.Compression.Cab &lt;/strong&gt;and located under &amp;lt;WIX_Installation_Folder&amp;gt;\SDK.&lt;/p&gt;  &lt;p&gt;In your project you need to add a reference to the &lt;strong&gt;Microsoft.Deployment.Compression.Cab.&lt;/strong&gt;dll and to &lt;strong&gt;Microsoft.Deployment.Compression.&lt;/strong&gt;dll (located under the same folder and has some base classes for types defined in the Microsoft.Deployment.Compression.Cab).&lt;/p&gt;  &lt;p&gt;After doing this you can add files to a cabinet file from .NET with just a couple of line of code:&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;using Microsoft.Deployment.Compression.Cab;&lt;/pre&gt;

&lt;pre class="brush: csharp; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;//create a instance of Microsoft.Deployment.Compression.Cab.CabInfo
//which provides file-based operations on the cabinet file
CabInfo cab = new CabInfo(@&amp;quot;C:\Cabinet1.cab&amp;quot;);

//create a list with files and add them to a cab file
List&amp;lt;string&amp;gt; filesToArchive = new List&amp;lt;string&amp;gt;() { @&amp;quot;C:\file1&amp;quot;, @&amp;quot;C:\file2&amp;quot; };
cab.PackFiles(null, filesToArchive, null);
            

//add a folder (including subdirectories) to another cab file with a maximum compression level
cab = new CabInfo(@&amp;quot;C:\Cabinet2.cab&amp;quot;);
cab.Pack(@&amp;quot;C:\folder&amp;quot;, true, Microsoft.Deployment.Compression.CompressionLevel.Max, null);

//unpack a cab file into C:\Unpacked folder
cab.Unpack(@&amp;quot;C:\Unpacked&amp;quot;);&lt;/pre&gt;

&lt;p&gt;The library has an MSDN style help file located under &amp;lt;WIX_Installation_Folder&amp;gt;\doc\DTFAPI.chm. &lt;/p&gt;

&lt;p&gt;Another dll that also comes with WiX toolset SDK is &lt;strong&gt;Microsoft.Deployment.Compression.Zip&lt;/strong&gt;.dll that provides similar functionality for packing and unpacking zip files.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-3216579263744150332?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/3216579263744150332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=3216579263744150332&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/3216579263744150332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/3216579263744150332'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2009/11/creating-cab-file-in-c.html' title='Creating a .cab file with C#'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-8514602116148078606</id><published>2009-09-14T11:40:00.001-04:00</published><updated>2009-09-14T11:40:00.690-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Fiddler'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Catching local SOAP traffic with Fiddler</title><content type='html'>&lt;p&gt;&lt;a href="http://www.fiddler2.com/"&gt;Fiddler&lt;/a&gt; is a great tool for testing and debugging web services. It logs and analyze all HTTP traffic between your machine and the Internet. I think it could be extremely beneficial to see how data is actually being serialized and what exactly is being sent to/from a web-service or application. &lt;/p&gt;  &lt;p&gt;When it comes to catching a local traffic you have to do some &lt;a href="http://www.fiddler2.com/Fiddler/help/hookup.asp#Q-LocalTraffic"&gt;tweaks&lt;/a&gt;, since .NET tries to avoid any proxies when it sends local requests. I had no problem catching local REST traffic by simply changing web-service address from &lt;em&gt;http://localhost:[port]/…&lt;/em&gt; to &lt;em&gt;http://ipv4.fiddler:[port]/…&lt;/em&gt; However when I tried to see a local SOAP traffic this simple address change did not bring any result and the SOAP messages were still not logged.&lt;/p&gt;  &lt;p&gt;I had to spend some time and try multiple ways to fix this issue, starting from modifying a web.config to explicitly &lt;a href="http://dotnetcentral.net/weblog/posts/277966.aspx"&gt;specify a proxy&lt;/a&gt; and ending with modifying a localhost value in /etc/hosts. Here are the steps that actually worked for me:&lt;/p&gt;  &lt;p&gt;1. Modified client’s web-service address from “&lt;em&gt;localhost”&lt;/em&gt; to “&lt;em&gt;localhost&lt;/em&gt;&lt;font size="6"&gt;&lt;em&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;&lt;font size="3"&gt;”&lt;strong&gt; &lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;(I think it is better then changing it to the actual machine name (makes client configuration machine-dependent) and definitely better than &lt;em&gt;ipv4.fiddler &lt;/em&gt;(cannot work without fiddler proxy turned on)).&lt;/p&gt;  &lt;p&gt;2. Turned off listening on to the IPv6 adapter: Tools =&amp;gt; Fiddler Options… =&amp;gt; General tab =&amp;gt; Enable IPv6 (if available) [uncheck]:&lt;a href="http://lh4.ggpht.com/_V2c2YNu_CKo/Sq5jyAKZY1I/AAAAAAAAK7I/f_fxUdm3ThM/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_V2c2YNu_CKo/Sq5jzoJz6sI/AAAAAAAAK7M/lX-U4-x2AeE/image_thumb%5B3%5D.png?imgmax=800" width="416" height="301" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;These two steps allowed me to successfully see HTTP traffic to/from a web service hosted on a local ASP.NET development server (Cassini).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-8514602116148078606?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/8514602116148078606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=8514602116148078606&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/8514602116148078606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/8514602116148078606'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2009/09/catching-local-soap-traffic-with.html' title='Catching local SOAP traffic with Fiddler'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_V2c2YNu_CKo/Sq5jzoJz6sI/AAAAAAAAK7M/lX-U4-x2AeE/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-4827729443458995216</id><published>2009-07-21T13:13:00.001-04:00</published><updated>2009-07-27T10:12:10.273-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Dynamically changing HTML form action using jQuery</title><content type='html'>&lt;p&gt;In order to test a RESTful service I’m currently working on I’ve created a simple HTML page with a bunch of forms. These forms generate various POST/GET requests to my REST service API methods, so I can manually test the service during a development process. One issue I faced was that the action attribute of HTML form element is static while I need to modify it dynamically based on user’s input (i.e. so I can send a GET requests to a URL like http://www.myrestfulservice.com/item/{itemID} where itemID is entered to the form by a user). JavaScript comes to mind. &lt;/p&gt;  &lt;p&gt;So here is how this could easily be done with jQuery:&lt;/p&gt;  &lt;pre class="brush: xml; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src='http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js'&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
        $(document).ready(function() {
            $(&amp;quot;#getForm :submit&amp;quot;).click(function() {
                var item = $(&amp;quot;:input#itemId&amp;quot;).val();
                $(&amp;quot;#getForm&amp;quot;).attr(&amp;quot;action&amp;quot;, &amp;quot;http://www.myrestfulservice.com/&amp;quot; + item);
            });
        });
    &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;p&amp;gt;
        Enter item ID get:
        &amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;50&amp;quot; id=&amp;quot;itemId&amp;quot; /&amp;gt;
    &amp;lt;/p&amp;gt;
    &amp;lt;form id=&amp;quot;getForm&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Get Item&amp;quot; /&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-4827729443458995216?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/4827729443458995216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=4827729443458995216&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/4827729443458995216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/4827729443458995216'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2009/07/dynamically-changing-html-form-action.html' title='Dynamically changing HTML form action using jQuery'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5756517632995991506.post-3552360630601856581</id><published>2009-07-17T11:27:00.008-04:00</published><updated>2009-11-12T09:40:50.962-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADO.Net Entity Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ to Entities'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Getting Database column length with LINQ to Entities</title><content type='html'>&lt;p&gt;During the work with ADO.Net Entity Framework sometimes you need to know a metadata for a database you’re working with such as a nchar/nvarchar column max length. Trying to update a DB column using LINQ to Entities with a string greater than the column max length leads to an SqlException (e.g. System.Data.SqlClient.SqlException: String or binary data would be truncated); therefore you need to check that your data does not exceed DB column boundaries manually. LINQ won't do this for you on a run-time.&lt;/p&gt;  &lt;p&gt;If you don't want to have all your Entity Model metadata hardcoded, you need to get it on a run-time. &lt;a href="http://www.codeproject.com/KB/cs/LinqColumnAttributeTricks.aspx"&gt;Here&lt;/a&gt; is described how you can do this with LINQ to SQL. &lt;/p&gt;  &lt;p&gt;Unfortunately this approach seems not to work for Entities Model. In order to do this for Entities you would need to query MetadataWorkSpace class and get a conceptual (CSpace) metadata for your Entity: &lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public static int GetMaxLength(Type entityType, string columnName)
{
    int result = 0;

    using (myEntities context = new myEntities())
    {
        var queryResult = from meta in context.MetadataWorkspace.GetItems(DataSpace.CSpace)    //getting conceptual entity metadata
                          where meta.BuiltInTypeKind == BuiltInTypeKind.EntityType
                                &amp;amp;&amp;amp; (meta as EntityType).Name == entityType.Name    //selecting desired entity by name
                          from property in (meta as EntityType).Properties
                          where property.Name == columnName    //selecting an entity property that matches the column name
                                &amp;amp;&amp;amp; (property.TypeUsage.EdmType.Name == &amp;quot;String&amp;quot;)            
                          select property.TypeUsage.Facets[&amp;quot;MaxLength&amp;quot;].Value;              

        if (queryResult.Count() &amp;gt; 0)
        {
            result = Convert.ToInt32(queryResult.First());
        }
    }
    return result;
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;When you call this method, just pass a type of your entity e.g.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;&lt;/div&gt;

&lt;pre class="brush: csharp; auto-links: false; collapse: false; first-line: 1; gutter: false; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;GetMaxLength(typeof(myEntity), &amp;quot;myColumnName&amp;quot;);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5756517632995991506-3552360630601856581?l=mnarinsky.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mnarinsky.blogspot.com/feeds/3552360630601856581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5756517632995991506&amp;postID=3552360630601856581&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/3552360630601856581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5756517632995991506/posts/default/3552360630601856581'/><link rel='alternate' type='text/html' href='http://mnarinsky.blogspot.com/2009/07/getting-database-column-length-with.html' title='Getting Database column length with LINQ to Entities'/><author><name>Michael Narinsky</name><uri>http://www.blogger.com/profile/10887345517296376127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_V2c2YNu_CKo/TSjlfyeWMqI/AAAAAAAAvNc/3t4vUeBQoTM/S220/35622_172899709411571_100000746284506_396999_3565719_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
