You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Sunday, Nov 30, 2003, 11:46 AM
Learning to Learn, Part II
Here. The one where I find a kindred spirit on the topic of learning to learn who's looked into it way more deeply than I have.
Sunday, Nov 30, 2003, 9:10 AM in .NET
Interesting Ex-Microsoftie Blogs on Longhorn
Here. I read a post yesterday that pointed at Wesner Moise, an ex-Microsoftie, and now I'm hooked. I'm enjoying how he applies his technical riguor to Longhorn. I also want to know about SoftPerson, his software company that "develops desktop applications based on AI." Subscribed.
Sunday, Nov 30, 2003, 12:00 AM in The Spout
Learning to Learn, Part II
Tony R. Kuphaldt, an instructor at Bellingham Technical College in Washington
recently emailed me that my Learning to Learn piece
spoke to him and pointed me to
his web site where he provides
a wonderful look at his own experiences in self-teaching. In this paper,
Tony describes his insights, starting with an amazing look into my own previous
field of employ:
"Industry training, at least in its popular form, is roughly based on the model of a fire hydrant: sit in front of it, open the valve, and take a big drink. Due to time limitations, trainers present information at a rapid pace, with participants retaining only a fraction of what they see and hear. What knowledge they do gain seldom passes on to co-workers after the training session, and is forgotten almost as rapidly as it is presented, necessitating continual re-training. ... [Students] often leave with the impression of the instructor being something of a genius for being able to present so much information so quickly, and instilling within their own minds a sense of inferiority for not grasping all of it at the delivered pace."Further, Tony describes the technique I use to really learn something:
"What did I do to learn? Simple: I would challenge my existing knowledge of a subject by trying to apply it to real-world conditions and/or thought experiments. If I didn't know enough about a topic to successfully apply it to a realistic problem, I would research and study until I did. If ever I was completely baffled by a problem, I could determine my own conceptual weaknesses by incrementally simplifying the problem until I could solve it. Whatever complexity I eliminated from the problem that enabled me to solve it was where my understanding was weak. Once I knew what I didn't know, I not only knew where to focus my study efforts, but I also felt more motivated to study because I could perceive my own needs."Tony characterizes his (and my) self-teaching technique as an internal feedback loop, where the student knows what he doesn't know. This is as opposed to an external feedback loop in an instructional setting, where the instructor knows what the student doesn't know, but the feedback loop is broken between the student and the instructor.
And as if that weren't enough, Tony takes his goals on the road, as it were, testing a self-teaching-based curriculum on his students and reporting on his results. I find his work especially interesting not because I feel the need to teach the world to teach themselves; I'm perfectly happy to encourage folks to learn to learn, but to have them choose other techniques. However, I do feel very strongly that the Sells brothers learn to learn. I can't imagine sending them out into the world without a firm grasp of the ability to teach themselves. I don't know how to do that, though, unless I start home schooling them. That wouldn't be out of the question except for this unhealthy addiction I have to a steady income stream...
Saturday, Nov 29, 2003, 11:05 AM in .NET
XAML's Extended Attribute Syntax
Here. The one where I fall in love with XAML's extended attribute syntax.
Saturday, Nov 29, 2003, 12:00 AM in The Spout
The Wonder that is XAML's Extended Attribute Syntax
Saturday, November 29, 2003
I've been playing with GridPanel today and really like how elegant it is. If I say the following:
<GridPanel> <SimpleText>Testing</SimpleText> <SimpleText>1</SimpleText> <SimpleText>2</SimpleText> <SimpleText>3</SimpleText> </GridPanel>
I get the equivalent of an HTML table with four rows with each SimpleText element forming a cell like so (augmented with Border elements not shown above to accentuate the cells):
If I want to split the data into columns, I can do that using the Columns attribute:
<GridPanel Columns="2"> <SimpleText>Testing</SimpleText> <SimpleText>1</SimpleText> <SimpleText>2</SimpleText> <SimpleText>3</SimpleText> </GridPanel>
Which gives me two rows of two columns each:
That's all nice and simple, but still flexible. For example, if I want to set the Testing string to cover two columns, I can give it an ID in the XAML and call the GridPanel.SetColumnSpan static method in code, e.g. when the Window loads:
<!-- xaml --> <Window ... Loaded="window1_Loaded"> <GridPanel Columns="2"> <SimpleText ID="testingSimpleText">Testing</SimpleText> <SimpleText>1</SimpleText> <SimpleText>2</SimpleText> <SimpleText>3</SimpleText> </GridPanel> </Window>
// C# void window1_Loaded(...) { GridPanel.SetColumnSpan(testingSimpleText, 2); }
This code yields 3 rows arranged as follows:
This is all fine and makes you appreciate the elegance of the GridPanel. However, that's not what inspired me to write this entry.
Remember that the SimpleText element serves as a cell in the GridPanel. Even better, the SimpleText element doesn't know it's serving as a cell in a GridPanel. The architecture of Avalon is loosely-couple so that all of the elements don't need to have intimate knowledge of each other. This loose coupling is really great for future elements that some developer wants to host in a GridPanel or that want to host SimpleText elements. Still, I'd like to be able to set GridPanel-related properties for each "cell" on the cell element itself, even if the cell element doesn't know it's a child of a GridPanel. And that's what the extended attribute syntax in XAML lets me do. Instead of writing the code, I can just do this:
<GridPanel Columns="2"> <SimpleText GridPanel.ColumnSpan="2">Testing</SimpleText> <SimpleText>1</SimpleText> <SimpleText>2</SimpleText> <SimpleText>3</SimpleText> </GridPanel>
This dotted attribute syntax allows me to set a GridPanel setting for the SimpleText element w/o any knowledge from the GridPanel of the SimpleText or vice versa. That means that if I define the FooBar element tomorrow, I can set it's GridPanel.ColumnSpan on it when it's used inside a GridPanel w/o extending GridPanel. This also means that if FooBar has a Quux per-child property, I can set the FooBar.Quux attribute of the SimpleText element w/o extending SimpleText. Nice!
BTW, if you'd like to see the code that provides the GridPanel in "outline mode" as above, it looks like this:
<Border Background="black" Width="100%" Height="100%"> <GridPanel Columns="2"> <Border Background="white" GridPanel.ColumnSpan="2"> <SimpleText >Testing</SimpleText> </Border> <Border Background="white"> <SimpleText>1</SimpleText> </Border> <Border Background="white"> <SimpleText>2</SimpleText> </Border> <Border Background="white"> <SimpleText>3</SimpleText> </Border> </GridPanel> </Border>
Notice that the GridPanel.ColumnSpan is on the Border element, not the SimpleText element. That's because it's the Border that's the cell of the GridPanel, not the SimpleText.
Wednesday, Nov 26, 2003, 7:18 PM in .NET
Avalon Performance Tips and Tricks on Build 4051
Here. Markus Mielke, a PM doing performance for the Avalon team, lists some pointers on perf in the PDC build of Longhorn and provides a place for you to send in your perf complaints (him).
Wednesday, Nov 26, 2003, 11:07 AM in .NET
ComputerWorld: Orbiz Developer's View of Longhorn
Here. ComputerWorld corralled an Orbiz developer and took down his observations about Longhorn from a developer point of view. It’s interesting to see the perspective.
Wednesday, Nov 26, 2003, 11:02 AM in .NET
Best of the Microsoft PDC 2003
Here. If you missed the PDC, the WSA is sponsoring a day-long "Best of” in Redmond on December 16, 2003. Learn about the new technologies coming in Microsoft's "Longhorn", "Whidbey" and "Yukon" directly from the leaders driving the evolution of the Microsoft platform and tools, including Don Box, Scott Guthrie and John Shewchuk.
Wednesday, Nov 26, 2003, 9:36 AM in Tools
WinForms SDI and MDI wizards?
Here. I noticed that Stephane Rodriguez put an SDI and MDI wizard up on CodeProject. I've been *dying* for those forever, but I couldn't get his to work. Anyone come up with a simplified set up for them? Anyone interested in porting them to Genghis?
Wednesday, Nov 26, 2003, 9:06 AM in .NET
Xamlon Beta: XAML for the .NET Framework 1.1
Here. XAML is the Longhorn mark-up language for declaring object types and instances and hooking them up to code. While it's most often used for declarative Avalon UI, it's useful for more than that. In fact, one enterprising 3rd party has just released a beta tool that provides a XAML subset for .NET 1.1. It's not quite the same, but interesting never the less.
Wednesday, Nov 26, 2003, 8:47 AM in Tools
WksSync Updated
Here. Ethan Brown has done a massive update to the wkssync tool, the command line tool for accessing source from GotDotNet workspaces. Thanks, Ethan!
Tuesday, Nov 25, 2003, 9:42 PM in Fun
Oh Lord, I've Been ASSified...
Here. Rory does it again. : )
Tuesday, Nov 25, 2003, 1:01 PM in Tools
ADO.NET CSV File Tester
Here. I wrote CsvFileTester to explore the ADO.NET/ODBC/JET support for CSV files and I was amazed at how comprehensive the support was. And, since I can never remember the syntax and limitations between one use of Jet expression syntax and the next, I put a bunch of samples into the program itself.
Tuesday, Nov 25, 2003, 12:00 AM in Tools
ADO.NET CsvFileTester
CsvFileTester is a tool inspired by Shawn Wildermuth's ExcelFileTester, which he wrote 'cuz I kept asking him how to do queries on .xls files. However, because the Excel query language has no where or order by clauses, I gave that up in favor of comma-separated text files.
I wrote CsvFileTester (with Shawn's help) to explore the ADO.NET/ODBC/JET support for CSV files and I was amazed at how comprehensive the support was. And, since I can never remember the syntax and limitations between one use of Jet expression syntax and the next, I put a bunch of samples in the combobox.
Enjoy.
Monday, Nov 24, 2003, 10:58 PM in .NET
I don't know UIs, but I know what I like...
Here. The one where I declare an official, immediate need for all those unemployed web site designers to get to work on Avalon ASAP.