I just read this post by Paul Gielens (http://weblogs.asp.net/pgielens/archive/2009/05/06/why-asp-net-mvc.aspx) about why a group of developers decided to use ASP.NET MVC. The answer to the question “what made you guys decide to use MVC for this applications” was interesting “because we wanted to learn something new, and because it’s cool!”. So the feedback on this post ranges from “ahumpff” to “these guys should not be experimenting when someone else is footing the bill”. I’d just like to pitch in: a) It’s great to see people showing interest in new technologies. I’d rather have some folks on my team who are eager to dive into a new technology than those who shy away from anything new. b) There is not a lot of additional info: but assuming that the project was not a multi-million dollar project and there was some room for a little risk. Then “why not?”. In my experience you can play with any technology, but you won’t truly learn it until you have a serious goal. Without a fixed goal you won’t find the pain points of the technology. c) I believe in risk driven project management. I’m not sure whether it is an official approach to project management. But I like to list all known risks, then decide whether something needs to be done to mitigate the risk. If the cost of mitigation outweighs the risk, then agree to do nothing. In essence, just about everything in PM is about risk management. Anyway, back to the new technology: do an assessment: will this new technology cost me more time to develop this app? Yes/no? No, then use it. Yes? How much? Can we afford to spend X hours on learning? Will it make my team happy? Happy coders write more code… aw heck, let them use it .
Just ran across the boxes they will be using to ship Windows 7 (available Oct. 22, 2009):    From Bink.nu: Microsoft has now set July 13th for RTM “sign-off”. Sign off is the process where all divisions sign that they agree on the final code, which means the actual RTM build will be created a few days earlier, which is targeted on July 10th. The general availability (GA) is set to October 22nd, this is when you can buy it in stores in a box or on new PC’s (OEM).
We can expect the RTM much earlier on MSDN, Technet and Volume Licensing download sites, probably a few days after July 13th.
Daniel will present at the next Bangor Area .NET Developer (BAND) meeting (June 23rd, 2009): WPF - A little further down the rabbit hole Probably most of us have seen at least one slick demo of WPF or Silverlight. Such demos are inspiring, but they don't convey what it's like to actually use WPF in the real world. Fresh from completing our first business-centric application that uses WPF extensively, I'm excited to share from my experience of using WPF in the real world. Daniel is a developer for Tyler Technologies in Bangor. More information on: www.bangordevelopers.com More from Daniel: http://www.danielgpratt.com/
Only one week to go! The MSDN Northeast Roadshow will once again make a stop in Augusta, ME. If you haven’t done so already, then sign up now! June 18th is the day you can enjoy a day of free learning with Microsoft's New England Dream Team: Chris, Bob & Jim. More info and sign up info: http://tinyurl.com/Summer09Roadshow.
If you’re planning to use Virtual PC or make use of the XP backwards compatibility mode in Windows 7, then you’ll need to have a CPU that supports hardware virtualization. Sadly is not very clear which CPU’s offer that feature. I found two pages with useful info, one for Intel processors and one for AMD: Note: for XP virtualization you will also need a minimum of 2GB of RAM. I’ve copied the essential information (including the disclaimer) for your reference pleasure  Disclaimer: I believe this information is accurate, but it is possible that some mistakes may be present in the following tables. caused by inaccuracies in Intel’s documentation or by editing and composition errors. I urge you to do your own research before making any buying decisions. Even if a specific CPU appears to support Intel VT, make sure that the PC’s BIOS manufacturer allows this feature to be enabled. Intel Desktop CPUs | Core 2 Duo | | | E4300/4400/4500/4600/4700 | NO | | E6300/6320/6400/6420/6540/6550 | YES | | E6600/6700/6750/6850 | YES | | E7200/7300/7400/7500 | NO | | E8190 | NO | | E8200/8300/8400/8500/8600 | YES | | Core 2 Extreme | | | QX6700/6800/6850 | YES | | QX9650/9770/9775 | YES | | X6800 | YES | | Core 2 Quad | | | Q6600/6700 | YES | | Q8200/8200S/8300/8400/8400S | NO | | Q9300/9400/9400S | YES | | Q9450/9550/9550S/9650 | YES | | Core i7/Core i7 Extreme | | | I7-920/940 | YES | | I7-965 | YES | | Pentium D/Pentium EE | | | 805/820/830/840 | NO | | 915/925/935/945 | NO | | 920/930/940/950/960 | YES | | 955/965 | YES | | Pentium for Desktop | | | E2140/2160/2180/2200/2220 | NO | | E5200/5300/5400 | NO | Intel Mobile CPUs | Core 2 Duo Mobile | | | L7200/7300/7400/7500 | YES | | P7350/7450 | NO | | P7370 | YES | | P8400/8600/8700/9500/9600 | YES | | SL9300/9400/9600 | YES | | SP9300/9400/9600 | YES | | SU9300/9400/9600 | YES | | T5200/5250/5270/5300/5450/5470 | NO | | T5500/5600 | YES | | T5550/5670/5750/5800/5850/5870/5900 | NO | | T6400/6570 | NO | | T7100/7200/7250/7300/7400 | YES | | T7500/7600/7700/7800 | YES | | T8100/8300 | YES | | T9300/9400/9500/9550/9600/9800 | YES | | U7500/U7600 | YES | | Core 2 Extreme Mobile | | | QX9300 | YES | | X7800/7900 | YES | | X9000/9100 | YES | | Core 2 Quad Mobile | | | Q9000 | YES | | Q9100 | NO | | Core 2 Solo | | | SU3300/3500 | YES | | U2100/2200 | YES | | Core Duo | | | L2300/2400/2500 | YES | | T2050/2250 | NO | | T2300/2400/2500/2600/2700 | YES | | T2300E/2350/2450 | NO | | U2400/2500 | YES | | Core Solo | | | T1300/1400 | YES | | T1350 | NO | | U1300/1400/1500 | YES | AMD CPUs “With the exceptions of Sempron-branded processors and Turion K8 Rev E processors, all notebook processors shipped by AMD include AMD-V and therefore support Windows 7 XP mode." "With the exceptions of Sempron-branded processors and pre-Rev F Athlon branded processors, all of the desktop processors shipped by AMD include AMD-V and therefore support Windows 7 in XP mode." "Also, all AMD Opteron processors shipped by AMD from Rev F forward include AMD-V."
Copied from : http://www.proprofs.com/forums/index.php?showtopic=11932 Microsoft 70-536 Objectives Objectives as updated on Microsoft's Web site: March 29, 2007 Developing applications that use system types and collections Manage data in a .NET Framework application by using the .NET Framework 2.0 system types (Refer System namespace) Manage a group of associated data in a .NET Framework application by using collections. (Refer System.Collections namespace) Improve type safety and application performance in a .NET Framework application by using generic collections. (Refer System.Collections.Generic namespace) Manage data in a .NET Framework application by using specialized collections. (Refer System.Collections.Specialized namespace) Implement .NET Framework interfaces to cause components to comply with standard contracts. (Refer System namespace) Control interactions between .NET Framework application components by using events and delegates. (Refer System namespace) Implementing service processes, threading, and application domains in a .NET Framework application Implement, install, and control a service. (Refer System.ServiceProcess namespace) Develop multithreaded .NET Framework applications. (Refer System.Threading namespace) - Thread class
- ThreadPool class
- ThreadStart delegate and ParameterizedThreadStart delegate
- Timeout class, Timer class, TimerCallback delegate, WaitCallback delegate, WaitHandle class, and WaitOrTimerCallback delegate
- ThreadState enumeration and ThreadPriority enumeration
- ReaderWriterLock class
- AutoResetEvent class and ManualResetEvent class
- IAsyncResult interface (Refer System namespace)
- EventWaitHandle class, RegisteredWaitHandle class, SendOrPostCallback delegate, and IOCompletionCallback delegate
- Interlocked class
- ExecutionContext class, HostExecutionContext class, HostExecutionContext Manager class, and ContextCallback delegate
- LockCookie structure, Monitor class, Mutex class, and Semaphore class
Create a unit of isolation for common language runtime in a .NET Framework application by using application domains. (Refer System namespace) Embedding configuration, diagnostic, management, and installation features into a .NET Framework application Embed configuration management functionality into a .NET Framework application. (Refer System.Configuration namespace) Create a custom Microsoft Windows Installer for the .NET Framework components by using the System.Configuration.Install namespace, and configure the .NET Framework applications by using configuration files, environment variables, and the .NET Framework Configuration tool (Mscorcfg.msc). Manage an event log by using the System.Diagnostics namespace. Manage system processes and monitor the performance of a .NET Framework application by using the diagnostics functionality of the .NET Framework 2.0. (Refer System.Diagnostics namespace) Debug and trace a .NET Framework application by using the System.Diagnostics namespace. Embed management information and events into a .NET Framework application. (Refer System.Management namespace) Implementing serialization and input/output functionality in a .NET Framework application Serialize or deserialize an object or an object graph by using runtime serialization techniques. (Refer System.Runtime.Serialization namespace) Control the serialization of an object into XML format by using the System.Xml.Serialization namespace. Implement custom serialization formatting by using the Serialization Formatter classes. Access files and folders by using the File System classes. (Refer System.IO namespace) Manage byte streams by using Stream classes. (Refer System.IO namespace) Manage the .NET Framework application data by using Reader and Writer classes. (Refer System.IO namespace) Compress or decompress stream information in a .NET Framework application (refer System.IO.Compression namespace), and improve the security of application data by using isolated storage. (Refer System.IO.IsolatedStorage namespace) Improving the security of the .NET Framework applications by using the .NET Framework 2.0 security features Implement code access security to improve the security of a .NET Framework application. (Refer System.Security namespace) Implement access control by using the System.Security.AccessControl classes. Implement a custom authentication scheme by using the System.Security.Authentication classes. (Refer System.Security.Authentication namespace) Encrypt, decrypt, and hash data by using the System.Security.Cryptography classes. (Refer System.Security.Cryptography namespace) Control permissions for resources by using the System.Security.Permission classes. (Refer System.Security.Permission namespace) Control code privileges by using System.Security.Policy classes. (Refer System.Security.Policy namespace) Access and modify identity information by using the System.Security.Principal classes. (Refer System.Security.Principal namespace) Implementing interoperability, reflection, and mailing functionality in a .NET Framework application Expose COM components to the .NET Framework and the .NET Framework components to COM. (Refer System.Runtime.InteropServices namespace) Call unmanaged DLL functions in a .NET Framework application, and control the marshaling of data in a .NET Framework application. (Refer System.Runtime.InteropServices namespace) Implement reflection functionality in a .NET Framework application (refer System.Reflection namespace), and create metadata, Microsoft intermediate language (MSIL), and a PE file by using the System.Reflection.Emit namespace. Send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery from a .NET Framework application. (Refer System.Net.Mail namespace) Implementing globalization, drawing, and text manipulation functionality in a .NET Framework application Format data based on culture information. (Refer System.Globalization namespace) Enhance the user interface of a .NET Framework application by using the System.Drawing namespace. - Enhance the user interface of a .NET Framework application by using brushes, pens, colors, and fonts.
- Enhance the user interface of a .NET Framework application by using graphics, images, bitmaps, and icons.
- Enhance the user interface of a .NET Framework application by using shapes and sizes.
Enhance the text handling capabilities of a .NET Framework application (refer System.Text namespace), and search, modify, and control text in a .NET Framework application by using regular expressions. (Refer System.Text.RegularExpressions namespace)
Today I’m switching my default search provider in Internet Explorer over to the new Microsoft Search Engine: Bing. It seems fast, perhaps even faster than Google and with the few searches I’ve done it seems to provide the right results. Did some quick looking around, there is a Bing developer page and Bing API as well. Links:
I guess the success for LINQ to SQL makes it hard for Entity Framework to absorb the full feature set in a single (v2) release. The team has been working on a bunch of fixes and improvements to be delivered in .NET 4.0. Here is the list as posted by Damien: Change list Performance - Query plans are reused more often by specifically defining text parameter lengths
- Identity cache lookups for primary key with single result now includes query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefault
- Reduced query execution overhead when DataLoadOptions specified (cache lookup considers DataLoadOptions value equivalency – post beta 1)
Usability - ITable<T> interface for additional mocking possibilities
- Contains with enums automatically casts to int or string depending on column type
- Associations can now specify non-primary-key columns on the other end of the association for updates
- Support list initialization syntax for queries
- LinqDataSource now supports inherited entities
- LinqDataSource support for Dynamic Data query extenders added
Query stability - Contains now detects self-referencing IQueryable and doesn't cause a stack overflow
- Skip(0) no longer prevents eager loading
- GetCommand operates within SQL Compact transactions
- Exposing Link<T> on a property/field is detected and reported correctly
- Compiled queries now correctly detect a change in mapping source and throw
- String.StartsWith, EndsWith and Contains now correctly handles ~ in the search string
- Now detects multiple active result sets (MARS) better
- Associations are properly created between entities when using eager loading with Table-Valued Functions (TVFs)
- Queries that contain sub-queries with scalar projections now work better
Update stability - SubmitChanges no longer silently consumes transaction rollback exceptions
- SubmitChanges deals with timestamps in a change conflict scenario properly
- IsDbGenerated now honors renamed properties that don't match underlying column name
- Server-generated columns and SQL replication/triggers now work instead of throwing SQL exception
General stability - Binary types equate correctly after deserialization
- EntitySet.ListChanged fired when adding items to an unloaded entity set
- Dispose our connections upon context disposal (ones passed in are untouched)
SQL Metal - Foreign key property setter now checks all affected associations not just the first
- Improved error handling when primary key type not supported
- Now skips stored procedures containing table-valued parameters instead of aborting process
- Can now be used against connections that use AttachDbFilename syntax
- No longer crashes when unexpected data types are encountered
LINQ to SQL class designer - Now handles a single anonymously named column in SQL result set
- Improved error message for associations to nullable unique columns
- No longer fails when using clauses are added to the partial user class
- VarChar(1) now correctly maps to string and not char
- Decimal precision and scale are now emitted correctly in the DbType attributes for stored procedures
- Foreign key changes will be picked up when bringing tables back into the designer without a restart
Code generation (SQL Metal + LINQ to SQL class designer) - Stored procedures using original values now compiles when the entity and context namespaces differ
- Virtual internal now generates correct syntax
- Mapping attributes are now fully qualified to prevent conflicts with user types
- KnownTypeAttributes are now emitted for DataContractSerializer with inheritance
- Delay-loaded foreign keys now have the correct, compilable, code generated
- Using stored procedures with concurrency no longer gets confused if entities in different namespace to context
- ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first
Potentially breaking changes We worked very hard to avoid breaking changes but of course any potential bug fix is a breaking change if your application was depending on the wrong behavior. The ones I specifically want to call out are: Skip(0) is no longer a no-op The special-casing of 0 for Skip to be a no-op was causing some subtle issues such as eager loading to fail and we took the decision to stop special casing this. This means if you had syntax that was invalid for a Skip greater than 0 it will now also be invalid for skip with a 0. This makes more sense and means your app would break on the first page now instead of subtlety breaking on the second page. Fail fast :) ForeignKeyReferenceAlreadyHasValue exception If you are getting this exception where you weren’t previously it means you have an underlying foreign key with multiple associations based on it and you are trying to change the underlying foreign key even though we have associations loaded.Best thing to do here is to set the associations themselves and if you can’t do that make sure they aren’t loaded when you want to set the foreign key to avoid inconsistencies.
I’m playing around with code generation using Visual Studio 2008 T4 and I needed to pull in some data. Easiest way to create the data is using Excel and then pull it into a dataset. Using the right connection string this becomes very easy. The code below shows how to select the data from a worksheet. public class Excel2007Reader { private static string BuildExcelConnection( string filename ) { return @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=YES;"""; } public static DataSet Read( string filename, string worksheet, string range, string tableName ) { DataSet result = new DataSet(); string connectionString = BuildExcelConnection( filename ); string select = @"SELECT * FROM [" + worksheet + "$" + range + "]"; using ( OleDbConnection conn = new OleDbConnection( connectionString ) ) { conn.Open(); using ( OleDbCommand cmd = new OleDbCommand( select, conn ) ) { OleDbDataAdapter da = new OleDbDataAdapter( cmd ); da.Fill( result, tableName ); } conn.Close(); } return result; } }
News travels fast in todays world of digital information. Blogs, Forums, Facebook and Twitter allow for easy and quick repetition of a bit of information. Heck twitter even has a name for it ‘retweeting’ (look for the posts that start with RT). I guess not so long retweeting would have been called gossiping. However, just as in real life you can’t always believe everything somebody tells you. Sometimes you need to check to make sure the information you’re getting is true. Because yes, not everything that is repeated, retweeted or posted is always true. Yesterday Ted Neward fell prey to believing someone he received an email from and responding by posting a response on his blog. Now why would I care? Well, the email Ted got told him that DevelopMentor was bye bye… As a former instructor at DevelopMentor Ted felt sad and wanted to pay homeage to the “many good people” at DevelopMentor. As it turns out the email Ted received contained false information, but within minutes of posting the blog entry information was spreading (I believe the word is ‘virally’) across the Internet with re-tweets and all those other forms of digital goodness spreading this piece of false information almost at the speed of light. Now the good news is that DevelopMentor is very much alive and kicking and that the “many good people” that Ted paid homage to are working there today. They are teaching classes, helping customers be all that they can be. And not just with teaching classes, but also with onsite training, consulting on projects and also with the new Remote Access Open Enrollment Courses*. Upcoming classes include: June 15 Essential C# in LOS ANGELES June 15 Essential Windows Communication Foundation in BOSTON June 22 Essential Windows Presentation Foundation in BOSTON More information can be found at www.develop.com If you don’t believe me, or want to check the facts then call 800.699.1932 right now and register for a class! You can also email requests@develop.com * Save Time and Travel: Remote Access Open Enrollment Courses You can now take open enrollment courses in our Los Angeles and Boston facilities without traveling. Remote Access to our ongoing schedule of instructor-led courses will allow you to fully participate real-time in expert-level lectures, demos and labs that have made DevelopMentor a leader in software development training. We've added new collaboration tools and prepared our instructors for remote students in class so you will be fully engaged in the learning process.
In our Maine Microsoft Certification Study Group we recently had a discussion about using regular expression. Today I found myself writing a RegEx to check for illegal characters in a formula (string). I thought I’d share the solution: private bool FormulaContainsIllegalCharacters( string formula ) { bool result = false; try { Regex r = new Regex( @"(!)|(@)|(#)|(\$)|(%)|(&)" ); result = r.Match( formula ).Success; } catch { } // ignore any regular expressions errors -> return false return result; } In my case I’m not interested in handling exceptions. If a technical error occurs I will accept the input. Notice that I needed to put a “\” before the $ sign, since the $ is a reserved character marking the end of a line. I don’t need to put each character in “( )” brackets, but for personal preference I just find it easer to read.
Whenever I need one I always need search for a good ASII table. So here is one: | 000 | 00 | 0000 | null | [nul] | | Ctrl-@ | | 001 | 01 | 0001 | start of heading | [soh] | | Ctrl-A | | 002 | 02 | 0002 | start of text | [stx] | | Ctrl-B | | 003 | 03 | 0003 | end of text | [etx] | | Ctrl-C | | 004 | 04 | 0004 | end of transmission | [eot] | | Ctrl-D | | 005 | 05 | 0005 | enquiry | [enq] | | Ctrl-E | | 006 | 06 | 0006 | acknowledge | [ack] | | Ctrl-F | | 007 | 07 | 0007 | bell | [bel] | | Ctrl-G | | 008 | 08 | 0008 | backspace | [bs] | | Ctrl-H | | 009 | 09 | 0009 | horizontal tab | [ht] | | Ctrl-I | | 010 | 0A | 000A | new line, line feed | [nl] | | Ctrl-J | | 011 | 0B | 000B | vertical tab | [vt] | | Ctrl-K | | 012 | 0C | 000C | form feed, new page | [ff] | | Ctrl-L | | 013 | 0D | 000D | carriage return | [cr] | | Ctrl-M | | 014 | 0E | 000E | shift out | [so] | | Ctrl-N | | 015 | 0F | 000F | shift in | [si] | | Ctrl-O | | 016 | 10 | 0010 | data link escape | [dle] | | Ctrl-P | | 017 | 11 | 0011 | device control 1 | [dc1] | | Ctrl-Q | | 018 | 12 | 0012 | device control 2 | [dc2] | | Ctrl-R | | 019 | 13 | 0013 | device control 3 | [dc3] | | Ctrl-S | | 020 | 14 | 0014 | device control 4 | [dc4] | | Ctrl-T | | 021 | 15 | 0015 | negative acknowledge | [nak] | | Ctrl-U | | 022 | 16 | 0016 | synchronous idle | [syn] | | Ctrl-V | | 023 | 17 | 0017 | end of trans. block | [etb] | | Ctrl-W | | 024 | 18 | 0018 | cancel | [can] | | Ctrl-X | | 025 | 19 | 0019 | end of medium | [em] | | Ctrl-Y | | 026 | 1A | 001A | substitute | [sub] | | Ctrl-Z | | 027 | 1B | 001B | escape | [esc] | | Ctrl-[ | | 028 | 1C | 001C | file separator | [fs] | | Ctrl-\ | | 029 | 1D | 001D | group separator | [gs] | | Ctrl-] | | 030 | 1E | 001E | record separator | [rs] | | Ctrl-^ | | 031 | 1F | 001F | unit separator | [us] | | Ctrl-_ | | 032 | 20 | 0020 | Space | Space | | | | 033 | 21 | 0021 | Exclamation mark | ! | | | | 034 | 22 | 0022 | quotation mark | " | " | | | 035 | 23 | 0023 | Number sign | # | | | | 036 | 24 | 0024 | Dollar sign | $ | | | | 037 | 25 | 0025 | Percent sign | % | | | | 038 | 26 | 0026 | Ampersand | & | & | | | 039 | 27 | 0027 | Apostrophe | ' | | | | 040 | 28 | 0028 | Left parenthesis | ( | | | | 041 | 29 | 0029 | Right parenthesis | ) | | | | 042 | 2A | 002A | Asterisk | * | | | | 043 | 2B | 002B | Plus sign | + | | | | 044 | 2C | 002C | Comma | , | | | | 045 | 2D | 002D | Hyphen | - | | | | 046 | 2E | 002E | Period (fullstop) | . | | | | 047 | 2F | 002F | Solidus (slash) | / | | | | 048 | 30 | 0030 | 0 | 0 | | | | 049 | 31 | 0031 | 1 | 1 | | | | 050 | 32 | 0032 | 2 | 2 | | | | 051 | 33 | 0033 | 3 | 3 | | | | 052 | 34 | 0034 | 4 | 4 | | | | 053 | 35 | 0035 | 5 | 5 | | | | 054 | 36 | 0036 | 6 | 6 | | | | 055 | 37 | 0037 | 7 | 7 | | | | 056 | 38 | 0038 | 8 | 8 | | | | 057 | 39 | 0039 | 9 | 9 | | | | 058 | 3A | 003A | Colon | : | | | | 059 | 3B | 003B | Semi-colon | ; | | | | 060 | 3C | 003C | less-than sign | < | < | | | 061 | 3D | 003D | Equals sign; | = | | | | 062 | 3E | 003E | greater-than sign | > | > | | | 063 | 3F | 003F | Question mark | ? | | | | 064 | 40 | 0040 | Commercial at | @ | | | | 065 | 41 | 0041 | A | A | | | | 066 | 42 | 0042 | B | B | | | | 067 | 43 | 0043 | C | C | | | | 068 | 44 | 0044 | D | D | | | | 069 | 45 | 0045 | E | E | | | | 070 | 46 | 0046 | F | F | | | | 071 | 47 | 0047 | G | G | | | | 072 | 48 | 0048 | H | H | | | | 073 | 49 | 0049 | I | I | | | | 074 | 4A | 004A | J | J | | | | 075 | 4B | 004B | K | K | | | | 076 | 4C | 004C | L | L | | | | 077 | 4D | 004D | M | M | | | | 078 | 4E | 004E | N | N | | | | 079 | 4F | 004F | O | O | | | | 080 | 50 | 0050 | P | P | | | | 081 | 51 | 0051 | Q | Q | | | | 082 | 52 | 0052 | R | R | | | | 083 | 53 | 0053 | S | S | | | | 084 | 54 | 0054 | T | T | | | | 085 | 55 | 0055 | U | U | | | | 086 | 56 | 0056 | V | V | | | | 087 | 57 | 0057 | W | W | | | | 088 | 58 | 0058 | X | X | | | | 089 | 59 | 0059 | Y | Y | | | | 090 | 5A | 005A | Z | Z | | | | 091 | 5B | 005B | Left square bracket | [ | | | | 092 | 5C | 005C | Reverse solidus (backslash) | \ | | | | 093 | 5D | 005D | Right square bracket | ] | | | | 094 | 5E | 005E | Caret | ^ | | | | 095 | 5F | 005F | Horizontal bar (underscore) | _ | | | | 096 | 60 | 0060 | Acute accent | ` | | | | 097 | 61 | 0061 | a | a | | | | 098 | 62 | 0062 | b | b | | | | 099 | 63 | 0063 | c | c | | | | 100 | 64 | 0064 | d | d | | | | 101 | 65 | 0065 | e | e | | | | 102 | 66 | 0066 | f | f | | | | 103 | 67 | 0067 | g | g | | | | 104 | 68 | 0068 | h | h | | | | 105 | 69 | 0069 | i | i | | | | 106 | 6A | 006A | j | j | | | | 107 | 6B | 006B | k | k | | | | 108 | 6C | 006C | l | l | | | | 109 | 6D | 006D | m | m | | | | 110 | 6E | 006E | n | n | | | | 111 | 6F | 006F | o | o | | | | 112 | 70 | 0070 | p | p | | | | 113 | 71 | 0071 | q | q | | | | 114 | 72 | 0072 | r | r | | | | 115 | 73 | 0073 | s | s | | | | 116 | 74 | 0074 | t | t | | | | 117 | 75 | 0075 | u | u | | | | 118 | 76 | 0076 | v | v | | | | 119 | 77 | 0077 | w | w | | | | 120 | 78 | 0078 | x | x | | | | 121 | 79 | 0079 | y | y | | | | 122 | 7A | 007A | z | z | | | | 123 | 7B | 007B | Left curly brace | { | | | | 124 | 7C | 007C | Vertical bar | | | | | | 125 | 7D | 007D | Right curly brace | } | | | | 126 | 7E | 007E | Tilde | ~ | | | | 127 | 7F | 007F | delete | [del] | | |
On June 26th the SDN will organize it’s quarterly Software Development Event in Hotel Houten (te Houten) in the Netherlands. The speaker line-up is awesome (as usual), don’t miss it! Sessions: | 9:00 - 10:15 | iPhone Development for .NET Developers | Kevin McNeish | .NET | | | Agile anti-patterns. Yes, agile projects can fail too. | Sander Hoogendoorn | AR | | | 10 Tips to make your Delphi Win32 App .NET Ready | Michael Li | Delphi | | | Advanced DotNetNuke Module Development | Mitchel Sellers | DNN | | | MythBusters – debunking common SharePoint Farm Misconceptions | Spencer Harbar | IW | | | Van concept naar productie met Expression Blend 3 | Martin Tirion | UX | | 10:45 - 12:00 | Design by Contract in .NET | Pieter Joost van de Sande | .NET | | | Working with Expression Blend to Build World Class User Interfaces | Kevin McNeish | .NET | | | HYPER V/SharePoint How to create a proper lab | Bob Fox | AR | | | ASP.NET Development met Delphi Prism | Bob Swart | Delphi | | | Creating a DotNetNuke Authentication Provider | Mitchel Sellers | DNN | | | Waarom SharePoint Application Pages? | Robin Meuré | IW | | 13:00 - 14:15 | Windows Azure | Dennis van der Stelt | .NET | | | Sessie nog onbekend | Spreker Onbekend | AR | | | De toekomst van hardware | Dick van Es | CS | | | ER/Studio for Delphi Developers | Michael Li | Delphi | | | Kerberos Part 1: no ticket touting here. Does SharePoint add another head? | Spencer Harbar | IW | | | Wat is Silverlight 3? | Koen Zwikstra | UX | | 14:30 - 15:45 | A Lap Around VSTS 2010 | Hassan Fadili | .NET | | | Learning from the iPhone: Building World-Class .NET User Interfaces | Kevin McNeish | .NET | | | Model driven development for the cloud | Erik van de Ven | AR | | | Reduce, re-use, recycle | Gert Hekkenberg | CS | | | SQL Server Performance en Tuning | Peter ter Braake | DB | | | Building a Silverlight module | Stefan Kamphuis | DNN | | 16:15 - 17:30 | SQL Data Services & Silveright 3 | Dennis van der Stelt | .NET | | | Unix/Linux vs NonStop | Diederick de Buck | CS | | | Spatial Data Types: SQL Server 2008 als navigator. | Henk van Galen | DB | | | Delphi 2009 IDE for Delphi 5-6-7.x developers | Michael Li | Delphi | | | Creating a DotNetNuke Membership Provider | Mitchel Sellers | DNN | | | Kerberos Part 2: Advanced Scenarios and additional considerations. | Spencer Harbar | IW | Sign up here: www.sdn.nl/sde
Another little extension method. This one allows easy rounding to a specific number of decimals: double d = 0.66782423; string s = d.ToString(3); // s = “0.668” This is done by the following method: public static class DoubleExtension { public static string ToString( this double value, int decimals ) { StringBuilder format = new StringBuilder( "0" ); if ( decimals > 0 ) { format.Append( "." ); } for ( int i = 0; i < decimals; i++ ) { format.Append( "0" ); } return value.ToString( format.ToString() ); } }
I’ve been working a lot with the ReportViewer Control in Visual Studio 2008. The greatest part of the control is that you can implement reporting without using a database! ReportViewer Control in Visual Studio 2008
ReportViewer is a freely redistributable control that enables embedding reports in applications developed using the .NET Framework. Reports are designed with drag-and-drop simplicity using Report Designer included in Visual Studio 2008 (Standard editon and above.) See screenshots of some applications that have ReportViewer control embedded in them. The ReportViewer control offers the following benefits: - Processes data efficiently. The reporting engine built into ReportViewer can perform operations such as filtering, sorting, grouping and aggregation.
- Supports a variety of ways in which to present data. You can present data as lists, tables, charts and matrices (also known as crosstabs.)
- Adds visual appeal. You can specify fonts, colors, border styles, background images etc to make your report visually appealing.
- Enables interactivity in reports. You can have collapsible sections, document map, bookmarks, interactive sorting etc in your report.
- Supports conditional formatting. You can embed expressions in the report to change display style dynamically based on data values.
- Supports printing and print preview.
- Supports export to Excel and PDF.
The control can process and render reports independently using a built-in engine ('local mode') or it can display reports that are processed and rendered on a Report Server ('remote mode'). There is a WinForms and a WebForms version of the control. Excellent tutorials on ReportViewer can be found at: http://www.gotreportviewer.com/
Back when .NET 1.1 was cool people would often use DateTime.MinValue to indicate that a date was actually empty. With .NET 2.0 can the Nullable<T> which allows you to create a nullable datetime. Ofcourse there is still plenty of old code out there, so when adding new code you may need to convert DateTime.MinValue to null. With extensions methods (.NET 3.5) you can implement an elegant solution. The code below will allow you to write this:
DateTime old = DateTime.MinValue;
DateTime? current = old.ToNullable(); This is achieved with the following extension method: public static class DateTimeExtension { /// <summary> /// Examine the value of the DateTime, if the value is equal to DateTime.MinValue /// then the result is null, otherwise the supplied value is returned. /// </summary> /// <param name="value"></param> /// <returns></returns> public static DateTime? ToNullableDateTime( this DateTime value ) { if ( value == DateTime.MinValue ) { return null; } else { return value; } } }
The leading event for C#, VB.Net, ASP.NET, DotNetNuke and Delphi developers is now open for registration! For the 18th year running the Software Development Network will organize this 2 day event (on October 19th and 20th, 2009) with sessions about : - .NET (C#, VB.Net, F#, etc.)
- User eXperience (ASP.Net, Silverlight, Expressions, Flash, etc.)
- Information Worker (MOSS, BizTalk, OBA, etc.)
- DotNetNuke (OpenForce Europe ’09 conference)
- Delphi
- Architecture
- Core Systems (C, Cobol, NonStop, IDMS, PL/1, DB2, CICS, TSO, ISPF, etc.)
- Databases
Don’t miss out! Click here to register.
 | Visual Studio 2010 and .NET FX 4 Beta 1 are available for download from the MSDN Subscriber Downloads as of today. Go to: VS2010 Beta 1 Download for MSDN The 5 page factsheet for VS2010 can be found here. |
Here is a shameless plug for my friend Mike who now has his own website at www.ireland-environmental.com. If you need environmental services or help with getting the right permits to do construction and such, then Ireland Environmental Services is the place to go. Mike is running a blog on environmental issues too, visit it here.
|