Tuesday, December 14, 2010

.NET 3.5 WPF Actions - ConditionalPropertyChangeAction

In my last blog post, .NET 3.5 WPF Triggers - KeyDownTrigger , i spoke of my frustrations regarding the lack of Actions/Behaviors/Triggers in .NET 3.5 Framework versions of WPF and Silverlight (and even 4.0 versions of WPF).

In exploring reproducing some of Actions that exist, my co-worker, who was converting a 4.0 project back to 3.5 (inter-company political reasons really) expressed the need for an Action that did something similar to one he had in Silverlight 4.0.

So i made the ConditionalPropertyChangeAction, here's my code for that below:

using System;
using System.Windows.Interactivity;
using System.Windows;
using System.ComponentModel;

namespace ToP.Common.Actions
    [Description("Changes the value of a property on the attached object IF a property on a target object is equal to the given value")]
    public class ConditionalPropertyChangeAction : TargetedTriggerAction<FrameworkElement>
        protected override void Invoke(object parameter)
            var pInfo = Target.GetType().GetProperty(TargetPropertyName);
            var pValue = pInfo.GetValue(Target, null);

            if (Convert.ChangeType(pValue, pInfo.PropertyType, null) == Convert.ChangeType(TargetPropertyValue, pInfo.PropertyType, null)
             || pValue.Equals(TargetPropertyValue))
                var newProperty = AssociatedObject.GetType().GetProperty(Property);
                newProperty.SetValue(AssociatedObject, Convert.ChangeType(Value, newProperty.PropertyType, null), null);

        [Category("Common Properties"), Description("Property Name on the Target to be used with the comparison")]
        public string TargetPropertyName
                return (string)GetValue(PropertyNameProperty);
                SetValue(PropertyNameProperty, value);
        public static readonly DependencyProperty PropertyNameProperty =
            DependencyProperty.Register("TargetPropertyName", typeof(string), typeof(ConditionalPropertyChangeAction), new PropertyMetadata(string.Empty));

        [Category("Common Properties"), Description("Property Value on the Target to be used with the comparison")]
        public object TargetPropertyValue
                return GetValue(PropertyValueProperty);
                SetValue(PropertyValueProperty, value);
        public static readonly DependencyProperty PropertyValueProperty =
            DependencyProperty.Register("TargetPropertyValue", typeof(object), typeof(ConditionalPropertyChangeAction), new PropertyMetadata(string.Empty));

        [Category("Conditioned Properties"), Description("Property to change, IF comparison conditions are met")]
        public string Property
                return (string)GetValue(PropertyProperty);
                SetValue(PropertyProperty, value);
        public static readonly DependencyProperty PropertyProperty =
            DependencyProperty.Register("Property", typeof(string), typeof(ConditionalPropertyChangeAction), new PropertyMetadata(string.Empty));
        [Category("Conditioned Properties"), Description("Value to be assigned to the Property, IF comparison conditions are met")]
        public object Value
                return GetValue(ValueProperty);
                SetValue(ValueProperty, value);
        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register("Value", typeof(object), typeof(ConditionalPropertyChangeAction), new PropertyMetadata(string.Empty));

Here's a simple example of this being used:
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:ToP_Common_Actions="clr-namespace:ToP.Common.Actions;assembly=ToP.Common" x:Class="ToP.Test.MainWindow"
        Title="MainWindow" Height="350" Width="525">
      <RowDefinition Height="20" />
   <RowDefinition Height="20" />
   <RowDefinition />   
     <TextBox Grid.Row="0" x:Name="textBox" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Center" Width="196"/>
  <Button Grid.Row="1" x:Name="button" Content="Button" VerticalAlignment="Top" HorizontalAlignment="Center">
       <i:EventTrigger EventName="Click">
        <ToP_Common_Actions:ConditionalPropertyChangeAction TargetName="textBox" TargetPropertyName="Text" Property="Content" Value="SUCCESS!" TargetPropertyValue="TEST"/>

In the above example, i have attached the Action to the Click EventTrigger. I set it up so that when triggered, if the TextProperty is equal to "TEST", then it will change the value of the ContentProperty of the object the action is attached to (which is the Button itself in this example).

Pretty simple, right?

You can customize the Action further to suit your needs, and make it more intuitive. If you do, i would love to see what you do with it!

There will be more Actions\Triggers\Behaviors to come...Stay tuned!

Wednesday, November 10, 2010

Quotes from the Coders - The Holy Application

The names below have been changed to protect the innocent...and the guilty!

Jose Says
"I feel like i'm working on a 'holy app'"
Cirrus Says
"Like it's full of security holes or something?"
Jose Says
"No like it's an application built for God"
Cirrus Says
"Why's that?"
Jose Says
"Because I'm using a method called 'SavePeople' and passing in a list of people to save"
Cirrus Says
"Hahaha...Maybe you should name the class to 'Salvation' just to mess with the original developer...if there's a method to delete people you could rename that to 'DamnPeople'.
Just make sure if you do use DamnPeople, you use the Description Attribute to make sure people know that you're removing these people from existence and if it doesn't have a splash screen...you could give it a literal 'Splash' screen"
Jose Says
"Of like holy water?"
Cirrus Says
"Better make it like baptism, since you're saving them after-all"

Tuesday, November 2, 2010

.NET 3.5 WPF Triggers - KeyDownTrigger

After having used Silverlight 4.0, i found myself getting frustrated using Silverlight 3.0, or even WPF of any version (lets face it, WPF just doesn't get the same loving the Silverlight does from the Microsoft Development Team) because of the absence of certain triggers and behaviors.

Since some of our projects rely on collaboration with people who don't have licenses to VS2010, we've had to keep those projects using .NET Framework 3.5. I suppose I ask for too much...but i always want more! And since the triggers and behaviors i wanted didn't work in 3.5, i decided to make more! Here's my code for the KeyDownTrigger:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Interactivity;
using System.Windows;
using System.Windows.Input;
using System.ComponentModel;

namespace ToP.Common.Triggers
    public class KeyDownTrigger : TriggerBase<FrameworkElement>

        /// <summary>
        /// Overides the OnAttached Method and adds our subscription to the PreviewKeyDown Event
        /// </summary>
        protected override void OnAttached ()
            AssociatedObject.PreviewKeyDown += AssociatedObject_KeyDown;

        /// <summary>
        /// Overides the OnDetaching Method and removes our subscription to the PreviewKeyDown Event
        /// </summary>
        protected override void OnDetaching ()
            AssociatedObject.PreviewKeyDown -= AssociatedObject_KeyDown;

        [Category("KeyEvent Properties"), Description("Comma Delimitered list of Keys the trigger is contigent on")]
        public string Keys { 
                return (string)GetValue(KeysProperty);
                SetValue(KeysProperty, value);
        public static readonly DependencyProperty KeysProperty =
            DependencyProperty.Register("Keys", typeof(string), typeof(KeyDownTrigger), new PropertyMetadata("None"));
        private List<Key> KeyList
                return Keys.Split(',').Select(x => (Key)Enum.Parse(typeof(Key), x)).ToList();
        private List<ModifierKeys> ModifierList
                return ModifierKeys.Split(',').Select(x => string.IsNullOrEmpty(x) ? System.Windows.Input.ModifierKeys.None : (ModifierKeys)Enum.Parse(typeof(ModifierKeys), x)).ToList();

        [Category("KeyEvent Properties"), Description("Comma Delimitered list of ModifierKeys the trigger is contigent on")]
        public string ModifierKeys
                return (string)GetValue(ModifierKeysProperty);
                SetValue(ModifierKeysProperty, value);
        public static readonly DependencyProperty ModifierKeysProperty =
            DependencyProperty.Register("ModifierKeys", typeof(string), typeof(KeyDownTrigger), new PropertyMetadata("None"));

        [Category("KeyEvent Properties"), Description("Sets the value of e.Handled for the PreviewKeyDown event. Default value is 'True'")]        
        public bool HandleKey
                return (bool)GetValue(HandleKeyProperty);
                SetValue(HandleKeyProperty, value);
        public static readonly DependencyProperty HandleKeyProperty =
            DependencyProperty.Register("HandleKey", typeof(bool), typeof(KeyDownTrigger), new PropertyMetadata(true));

        /// <summary>
        /// CallBack event to the PreviewKeyDown subscription that will InvokeActions 
        /// If the Key & Modifiers are found in our lists
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AssociatedObject_KeyDown (object sender, KeyEventArgs e)
            if (KeyList.Contains(e.Key))
                if (ModifierList.Count > 0)
                    if (ModifierList.Contains(Keyboard.Modifiers))
                        InvokeActions(new TriggerKeys { Sender = AssociatedObject, Keys = e.Key, ModifierKeys = Keyboard.Modifiers });
                        e.Handled = HandleKey;
                    InvokeActions(new TriggerKeys { Sender = AssociatedObject, Keys = e.Key, ModifierKeys = Keyboard.Modifiers });
                    e.Handled = HandleKey;

    public class TriggerKeys
        public object Sender { get; set; }
        public Key Keys { get;  set; }
        public ModifierKeys ModifierKeys { get; set; }

I was asked why i was using DependencyProperty(s), and it was simply to allow for those values to be databound to something. You'll also notice in the above code that we subscribe and unsubscribe to the Event. That can be done for ANY event, so you can use this idea to subscribe to any event you'd like!

This Trigger allows you to specify Keys, as well as ModifierKeys. It will also allow you to specifiy whether or not you want it to stop the RoutedEvent bubble after being triggered.

..And best yet, it works in both WPF & Silverlight, tested in .NET Framework 3.5 and .NET Framework 3.0!

Assuming we declare the namespace in the XAML as:
The usage will be as follows:
<triggers:KeyDownTrigger HandleKey="True" Keys="Up" ModifierKeys="Control">
     <actions:FocusTarget TargetName="txtFirstName" />

Enjoy! I'll be posting my other Triggers shortly!

Flex Developers Wanted - SLC, UT

Full-time Positions for both a Flex Developer & Sr. Flex Developer are available in SLC, UT. Proficiency in Flex is a must, while someone with additional knowledge in Flash/Ajax/XML, and familiarity with web and database design is also desired.



Friday, October 29, 2010

Fedora 13 v.s Microsoft PPTP

After such a long time of not having PPTP functionality in linux to communicate with microsoft pptp (RARS) servers that we have at various clients, I finally dedicated a night to getting it up and working.

I can't help but wonder why none of this is default. I find it hard to imagine anybody in their right mind using PPTP unless they are in a windows environment to begin with.

Anyways lets cut to the chase. I am working primarily with the builtin gnome network manager tray icon. I want Network Manager to be able to connect.

I have the same error on my Fedora 12 machine. The Fedora 12 Machine was a bit more helpful with its error and alerted the user "Error could not connect to the vpn, invalid secrets". Fedora 13.. just said vpn connection failed. but I assumed it was the same problem.

Here is a snippet from my /var/log/messages
Oct 30 00:09:57 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_rep:pptp_ctrl.c:254]: Sent control packet type is 1 'Start-Control-Connection-Request'
Oct 30 00:09:57 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_disp:pptp_ctrl.c:754]: Received Start Control Connection Reply
Oct 30 00:09:57 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_disp:pptp_ctrl.c:788]: Client connection established.
Oct 30 00:09:58 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_rep:pptp_ctrl.c:254]: Sent control packet type is 7 'Outgoing-Call-Request'
Oct 30 00:09:58 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_disp:pptp_ctrl.c:873]: Received Outgoing Call Reply.
Oct 30 00:09:58 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_disp:pptp_ctrl.c:912]: Outgoing call established (call ID 0, peer's call ID 31573).
Oct 30 00:10:00 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_disp:pptp_ctrl.c:927]: Received Call Clear Request.
Oct 30 00:10:31 Wolfbite pppd[3946]: LCP: timeout sending Config-Requests
Oct 30 00:10:31 Wolfbite pppd[3946]: Connection terminated.
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: VPN plugin failed: 1
Oct 30 00:10:31 Wolfbite pppd[3946]: Modem hangup
Oct 30 00:10:31 Wolfbite pptp[3948]: nm-pptp-service-3943 warn[decaps_hdlc:pptp_gre.c:204]: short read (-1): Input/output error
Oct 30 00:10:31 Wolfbite pptp[3948]: nm-pptp-service-3943 warn[decaps_hdlc:pptp_gre.c:216]: pppd may have shutdown, see pppd log
Oct 30 00:10:31 Wolfbite pptp[3954]: nm-pptp-service-3943 log[callmgr_main:pptp_callmgr.c:235]: Closing connection (unhandled)
Oct 30 00:10:31 Wolfbite pptp[3954]: nm-pptp-service-3943 log[ctrlp_rep:pptp_ctrl.c:254]: Sent control packet type is 12 'Call-Clear-Request'
Oct 30 00:10:31 Wolfbite pptp[3954]: nm-pptp-service-3943 log[call_callback:pptp_callmgr.c:79]: Closing connection (call state)
Oct 30 00:10:31 Wolfbite pppd[3946]: Exit.
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: VPN plugin failed: 1
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: VPN plugin failed: 1
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: VPN plugin state changed: 6
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: VPN plugin state change reason: 0
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: error disconnecting VPN: Could not process the request because no VPN connection was active.
Oct 30 00:10:31 Wolfbite NetworkManager[3739]: Policy set 'Auto gateway' (wlan0) as default for IPv4 routing and DNS.
Oct 30 00:10:36 Wolfbite NetworkManager[3739]: VPN service 'pptp' disappeared

Its important to know that MS VPNs only like require mppe. go to the advanced settings window, and make sure only MSCHAPv2 is checked. uncheck the others (pap, chap, mschap, eap).

Open up /etc/ppp/options.pptp
make sure these lines are located within the file somewhere

take note of the line that says require-mppe. I had to manually write that one, but the others were there for me. They need to be there for this to work properly.

Tuesday, October 26, 2010

In 10 months BC, Death Seemed Imminent

I was talking with a co-worker today, we'll call him Brian, about some software changes they were going to be requesting from another developer here at work. He made the comment, in all confidence, saying:
"That shouldn't take long at all to fix that."

My mind went in all different directions.

As Software Developers, we've all been in the situation of trying to explain all that goes into making a change to a piece of software to management & people outside the realm of development.  Sometimes the change is relatively easy, as far as coding goes....but other times it's much more involved. To them they make the request...forget about it, and magically it gets done.

Some companies have each of the steps of development separated into individual positions as described so eloquently in this blog written by Eric Lippert from Microsoft. However, not all companies can or (like my company) are willing to spend the extra cash to separate those roles, and as a result the responsibility of each step falls onto the shoulders of a single developer.

Now, bringing this back to my story...

Having a little knowledge of the system that was about to receive a change request...i knew that the change was far from simple...but only because of the implications it could have on other systems that make reference to that system. And the person who would be putting in the work, I knew, was unfamiliar with that system.

I retorted with a simple inquisition, asking what made him think it wouldn't take much time. It was then that he redeemed his previous comment of ignorance.
"Well back in The Dark Ages, before you came here...I'd assume It'd take much longer, or that I'd never get the change at all. But now we just have to  ask for it, and we can trust that you will work your magic and get it to us" 

Yes, I'm recognize that there was a little buttering up done in that statement (pandering your Programmers is always encouraged), but what deeply amused me was his referring to the time before my employment in this department, as "The Dark Ages".

"10 months BC (Before CloudyOne), there was contention amongst the people and plains were near desolate. Software was filled with bugs and errors. The buffer overflow threatened the very existence of the application, and workarounds could be found at every function. But there was hope....stories foretold of a man who would come and patch the...."

Oh wouldn't that be great to have a comic novel written to symbolically explain of your day to day changes? Maybe an idea for  the future.

Monday, October 11, 2010

Quotes from the Coders 2010-10-11

Cirrus Says:
"Ugh i hate testing programs with this guy, it pops up a box saying what he entered was incorrect and he just sits there..for like 15 seconds!
I mean we're supposed to be testing something and what is he even doing? "
Jose Says:
"What do you think? He is Thread Dot Sleeping"

Cirrus Says:
"That's what she said"
Jose Says:
"And who is this she you speak of?"
Cirrus Says:
"Some random girl i picked up on the corner"
Jose Says:
Cirrus Says:
"Oops, i meant to say 'your mom'"
Prestige Says:
"common typo"
Cirrus Says:
"Yeah..sorry, my intellisense was screwed up!"

Any developer that has to deal directly with the End User of a piece of software that's being used can relate to this next one...

After receiving an email where a Manager from our Customer Service department is claiming that all orders of a specific type are charging the customer double shipping...i looked through her "proof" and observed a few things. I noticed that in her screenshots, the shipping was accurately being calculated and added, but there was a similarity between all of the orders. My response?
"All of these customers that have order totals more than what you expected are from our state. Therefore they are charged sales tax, as shown in the pictures that you provided me."

The email she sent was pretty lengthy, and knowing how quickly she types...i wonder how much time she wasted of her day just to email me something she could have seen on her own if she'd only open her eyes. The only problem i found was between the chair and the keyboard!

World-Changing Awesome Aside, How Will The Self-Driving Google Car Make Money?

Graph of typical Operating System placement on...Image via Wikipedia

Working for Google has to be cool enough of a job...but imagine being the brilliant mind(s) that's engineering the software that's pushing that technology?

I think it's every Software Engineer's dream to be working on a project of that magnitude, and know you're pushing the envelope with every keystroke. If it's not yours...get out of the way and make room for the rest of us, because i know it's mine!

I imagine sitting in a car that is every surface inside of it has the ability to produce an image. You may not need to pay attention to the road anymore, but you can't help but pay attention to the ads flashing all around you. Maybe not the best image for someone with a headache, but it would presumably be similar to all the billboards around you when you drive!

I believe that, if the software was designed to follow local traffic laws, law enforcement agencies would strongly appose live implementation of this software. If everyone could be verified as following traffic laws, how would they make their money?

Maybe they could sell ad-space on their windshields :) Or maybe at the beginning and end of reading someone their Miranda Rights, they can give a short audio advertisement.
"Call 1-800-BAIL-YOU Now! You Ring, We Spring!"
Enhanced by Zemanta

Thursday, October 7, 2010

Google Code-in: School’s Out, Code’s In!

Are you a blossoming developer between the ages of 13 & 18?

Google's latest open-source contest/project, Google Code-In, encourages those young and bright-minded individuals in Jr. High, High School, or some other Pre-University educational institution to participate for a chance at earning some cash (up to $500) and a chance to be 1 of 10 grand prize winners that receive a trip to Google's California Headquarters to be given an award in Google's very own award's ceremony!

The best part is, if you participate and complete tasks required to qualify for being a grand prize winner, you are guaranteed a T-Shirt and cash prize of up to $500! (depending upon your level of involvement, and assuming your tasks meet their requirements)

To participate, or for more details, go to the link below!
Google Code-in: School’s Out, Code’s In! - Google Open Source Blog

**P.s. I apologize for calling you developers a girly word like "blossoming", i couldn't help myself :)

Friday, October 1, 2010

School of Facebook

Mark Zuckerberg, creator of Facebook, didn't get the full recognition he deserved after donating 100 million to the Newark, New Jersey school system. I have only one reason, the Mayor of Newark referred to Mark by the wrong name, Mark Zuckerman.

So how do you go about coming back from referring tom someone by the wrong name? Any guy who's called his girlfriend an ex-girlfriend's name will tell you that there is NO coming back! I, however, beg to differ (on both accounts really, but i'll only be explaining my proposal for the Zuckerberg situation).

Since alot of parents already treat the schooling system like a "free" babysitter, why not give the teachers better tools to keep the kids, who don't want to learn, busy? To makeup for calling Mark the wrong name, the Newark schools can give students uncapped access to Facebook! Okay okay, so not the best argument.
But wait! There's more!

So once facebook is widely accepted in the classroom of Newark schools, why not integrate it into the grading system? School Events? Student Body Elections?

Lets face it, the Newark Public School system's website is very ugly.

The color choices, the layout, the fonts...are all very displeasing to the eyes. And with it's non-interactive, "reference book"-like, approach to displaying their data....Facebook would be a welcome upgrade!

I'm sure my first notification in my mockup would instigate some anger in the child mental health activists. They'd complain that knowing how poorly they're doing in relation to their peers would cause them "mental anguish". I think it would help seperate the lazy cop-out ridden group from the hard-workers. Those who would end up going somewhere in life, would see it as competition and rise to the occasion.

I was browsing through the Facebook Apps Directory...and found a lack of school-based apps. Which means, developers, there's little competition! So...get coding!

Follow my blog with bloglovin

Thursday, September 30, 2010

ToP Chat - "UnScheduled" Downtime

Team of Programmer's Chat Server will have an unknown amount of downtime today.

I am told it should only be a few hours while some hardware is installed and configurations are worked out, but i haven't been given an ETA. I'll post more details as i get them!

Now what am i going to do while i wait for my Visual Studio to unfreeze?

Web Developer Wanted - CA

Full-Time position available in Pleasanton, CA for a Web Developer Proficient with several of the following: Java, JavaScript, HTML, AJAX, REST, CSS and XML.

The job title is "Senior Software Engineer" but based on the description of skills they're looking for, i think it's more of a Web Development position.

Wanted Web Developer

The Floor is Good Enough!

That's what she said.

Today, i received a spam email, encouraging me to get my carpet cleaned, that said:
"A dirty carpet is like a guilty conscience-it's always nagging you from the background, and it prevents you from eating off the floor in peace. "
This reminded me of something my mother always used to say when i would have come inspect my work of cleaning the bathroom. She would start by saying

"Is it mommy clean?"

I, of course, would nod my head and say yes to affirm that it was, hoping that that would be the end of it and i could go play. But then she'd ask

"Is the toilet seat clean enough that you would eat food off of it?"

.....I could NEVER answer yes to that question, no matter how hard i scrubbed. Even if the toilet was cleaned of all urine...bathroom cleaning products aren't necessarily known for their good tastes! Needless to say, my bathroom was incredibly clean on those nights.

It doesn't matter to me how much disinfectant i used, i don't think i would ever be okay eating off of the toilet seat. I would also not be okay, even after having a carpet cleaning, of setting food directly on the ground to eat it. In the event that it was dirty, i'd use a plate or paper-towel if i wanted to set my food down lol

If you live in Utah, and want to rid yourself of that nagging...click here to see this ad

Tuesday, September 21, 2010

WCF Error: CommunicationException was unhandled

From our friend over at XamlWorkShop we have another write-up. Matt writes about his solution to an "ungoogleable" CommunicationException error he received while using WCF services.

...now it's googleable!

The Xaml Workshop: WCF Error: The underlying connection was closed: T...: "CommunicationException was unhandled The underlying connection was closed: The connection was closed unexpectedly. Once in a while I have c..."

Thursday, September 16, 2010

The Takeover of "Cloud Nine"...or Whatever.

Last night, i reached 666 posts on twitter.  It's a milestone, yes i know! It was late, and i had noticed someone had started following me whom i didn't recognize.


 I noticed that under this person's newly followed people...i was at the top of 3 people that have "CloudyOne" in their name or description. Now I've used the name CloudyOne since i was 12, back when i was so cool...that i had 3 AOL separate dial-up accounts for my 3 phone lines at home. Back then, i was the ONLY one who was googleable with the name CloudyOne! So as far as i'm concerned, I'm the first CloudyOne and I'm the real CloudyOne The ladies dig my AOL CD collection

I've always felt like i should go around and reclaim my name so i don't get mixed in with some of the people who are playing the imposter to my name. There was some guy on some blog site a while back that wrote some poorly spelled and poorly written poems about how much he hated life. Then there was some girl in canada who was a really big movie...and cat...fanatic.
I don't want to be associated with cats!

So anyway, back to the milestone of 666 posts. This ampersand character, (you see what i did there?) had these other "CloudyOne"'s he was following. So i posted this:

"That's me!"

As you can see, my last name is Cloud, so i really do have a legitimate claim to the name!

Then this morning, i receive a message from my sister with a link to another impostor! Just look at the smug look on his face...

It's a cat! I guess it doesn't matter if i want to be associated with cats, it's already happening! Doomsday has come!

Yes, i realize that technically...the cat doesn't have my full nickname, but girls in high-school (after my aol cd collection, no doubt) used to call me "cloudy" as well, and some still do!

SO...If you are using my nickname, CloudyOne, start doing more prestigious things! Wake-up today and decide to be a little bit cooler!

...and if you're the person who adopted this cat, change her name so i can be selfish and keep Cloudy, and all it's derivatives to myself!

Wednesday, September 15, 2010

Timing is Everything - YouTube Instant

I don't even dare to pronounce his last name.

Ferros Aboukhadijeh, the creator of YouTube Instant has accomplished what many of programmers are constantly striving for: Good timing.

How many times as a developer have you gotten an idea for a site or a program, and rather than working until it's done...you add it to your list, buy the domain, and let it sit there? I know I've been guilty of that on many occasions, and as we speak my mind is rattling with a list of projects that are either halfway done, or yet to be completed.

I think of the many sites I've parked domains for, created the solution, and created a mock-up for; It's becoming a pretty hefty list. It's easy to my mind drift away with the many possibilities that await if i were to just sit down and actually do it. Seeing the success of one of my creations is worth than any revenue that can be made off of it, though the extra income is always a welcome perk.

But alas, like most of us, the list of projects on my "to-do list" continues to grow.

Think about how simple the idea was for YouTube Instant. The idea of instant search was fresh in everybody's mind from Google Instant's release, and i'm sure the idea struck many minds developer and marketer alike. The difference is...Ferros actually did it!  Kudos, and a big thumbs up to the many doors you've opened up for yourself by continuing to act, Ferros!

So Here's YOUR Call To Action!

Take those projects off the shelf, wipe off the dust and show the world how ingenious you really are! Don't let yourself be in the position to say
"Hey! I thought of that first....i just hadn't gotten around to doing it yet."

If the project is too big to handle, co-op with a friend (or if you're lacking developer friends come hang out on the Team of Programmers Chat and make a friend!).

Friday, September 10, 2010

Engineering the X-Wing Fighter Out Of Aluminum

Every developer has their caffeinated beverage of choice. Mine...well, just watch the movie and find out!

This design has taken a while to accumulate enough cans, as i only build with empty cans!

Note to anyone wanting to build their own--Not all cans are the same size. I measured each can and all the runts were set aside. Once i built the base using all the cans of uniform size, the runts were used at the tops of the wings or as accent cans not vital to the stability of the structure.
Published with Blogger-droid v1.5.8

M$ Team Member Gets WP7 Developers Involved

Mike Henderlight from Microsoft has given an open invitation to all Developers involved in Windows Phone 7 development to give their input on "needed controls" for the Developer Toolkit.

Though making a disclaimer about not being able to fulfill everyone's desires, this may indicate their intentions of keeping community involved in the progression of WP7! If there's anything that's keeping developers in Microsoft's court it's definitely their outspoken attentiveness to our desires and ideas.

Having an involved Developer make the direct invitation in a single thread, rather than the usual End-User developers making their individual threads for feature requests, was refreshing. It allows for the requests to be in one place, and thus allows for a discussion and catalyst of ideas. Keep up the good work Mike!

Thursday, September 9, 2010

O(h that doesn't work either?)racle, Fine.

For the amount of money our company pays every year to Oracle, i sure spend a lot of time cursing their name.

I spend a (un)fair amount of time finding "workarounds" to accomplish something in PLSQL that would have been a straightforward use of code in TSQL. Today's finding?

Code that would normally work in TSQL(Microsoft)

SET               TIMES_HATED = 233544
FROM              I_HATE_ORACLE HO,
                  HATE_REASONS HR
WHERE             HR.DESCRIPTION = 'Missing Keywords'
              AND HO.PROGRAM_ID = 1

Doesn't work in PLSQL(Oracle). Instead i had to add 2 lines of extra code....and because i like to keep things formatted properly spacing-wise, it doubled the actual width of the query.

SET               TIMES_HATED = 233544
WHERE             HATE_ID IN (
                   SELECT            HATE_ID
                   FROM              I_HATE_ORACLE HO,
                                     HATE_REASONS HR
                   WHERE             HR.DESCRIPTION = 'Missing Keywords'
                                 AND HR.REASON_ID = HO.REASON_ID
                                 AND HO.PROGRAM_ID = 1)

It's not a HUGE deal...but being i already am opposed to our Oracle servers here, every added annoyance is amplified by that predisposition!  TSQL > PLSQL

"Oracle is like the child who lives in the corner who sells you the first glass of Lemonade for $0.25, and then sells you the second glass for $80,000 because it has the antidote."

Wednesday, September 8, 2010

Quotes from the Coders 2010-09-08

 After watching my co-worker make multiple attempts at entering a password, make an observation and say
"You realize we don't have any users here called 'Administration'...right?"

Friends says
"wtf Youtube! Vmware.com directs me to watch a tutorial on Vmnetworking and under Youtube's other recommendations...it shows things like "Vmware this" & "Vmware that".
"and then, randomly...."How to breast-feed effectively".

Walking into a conversation at the wrong time.
"Codiality. Yanno, like beastiality...but where you love your code so much you'd have sex with it?"

...and another

"Well if Google doesn't have it, then it doesn't exist. So i'll have to reject your invitation to your 'Piddle Party' so i'm not the only one there." 
"Wtf? You actually looked it up?"

Save a Programmer, Visit a Sponsor

I would like to say THANK YOU to everyone who participated yesterday in the first un-official "Visit a Sponsor Day"!  

Though Google's Adsense program is far from being able to compensate me for the cost of running the servers i have over the years for all of you, it definitely does take some stress off of my wallet! Your response was bigger than i had hoped for--So for that, i tip my hat to you!

For those who weren't online when i made the call to "Visit a Sponsor", here's the low-down. If you like the site, if you've ever used one of my servers in the past, if you've found the blog useful, informative, or amusing--Next time you visit the site, also visit that Google-assigned sponsor that you see in one of the Advertisements!

Why visit a Sponsor? You see ads everyday, you see commercials everyday. Of those you see, how many of those benefit someone you know directly just by you watching or visiting the sponsor? Sites that are "well off" usually won't put ads on their site, so if you see a site you use often with ads, you should support the site by supporting their sponsors.

Tuesday, September 7, 2010

Job Opening @Twitter - Application Security Engineer

"We are adding to our technical staff to help us improve Twitter's application security. This is an exciting role in which you will have a real impact on millions of lives. You'll interface with Twitter's amazing application engineers, operations teams, and product managers, to name a few. If you have a passion for securing high-profile systems, this is your dream job."
Application Security Engineer / Working at Twitter

Wednesday, September 1, 2010

We the jury...find the defendant, a GEEK

There are days where i put my headphones in to listen to music (usually techno) while i code, but many times...i quickly take them back out.

Myself and 2 of the other programmers here sit in close proximity and all of us are slightly crazy. One of us isn't just crazy, he's "We the jury, find the defendant..." type of crazy.
-Quoted from Christopher Titus

At random times throughout the day, one of us will burst out with something completely random, and usually objectionable. Today, i'm sitting here coding and i hear my coworker making "beatbox" sounds with his mouth, then i hear:
"pschhhh te chhhhh wcki wcki WrapPanel"

The Silverlight Toolkit has a control in it called "WrapPanel" which we all have decided is fun to use. All day, presumingly anytime he saw the control name in his code, he would would break out into a geeky "rap" of some sort...which kept us laughing most of the day :)

Silverlight Toolkit: WrapPanel: "I’d like for us to talk about one of the new controls in the Silverlight Toolkit – WrapPanel.
In the following article we’ll deep dive into WrapPanel and see how it behaves in different situations."

Tuesday, August 31, 2010

The Xaml Workshop: Same-Old Apple Business Philosophy: iCrap

I, Adam Cloud, approve of this message.

This article from Matt over @ XamlWorkshop helps to separate the developer from the platform in the common argument regarding Apple's alleged "Supremacy" by all of their ISheep.

Regardless of what side of the argument you stand on, this is worth a read for the mere fact that the hardwork of individual developers is being overlooked, and creativity being credited towards the Corporations that created the platform it was written for.

The Xaml Workshop: Same-Old Apple Business Philosophy: iCrap: "The other day, while watching television, I was treated to a newer Apple commercial promoting the iPad. There was one glaring annoyance that..."

Monday, August 30, 2010

The Chrome Experiment - HTML5 -The Wilderness Downtown

This demonstration of the capabilities of HTML5 was amazing. It did consume cpu as it processed and put together the demonstration, and used about half a GB of memory, but it is still powerful.

I can't wait till HTML5 is more widespread and we get to see all the creative uses of it!

*Note, this cannot by viewed in any browser but Google Chrome

The Wilderness Downtown

Friday, August 13, 2010

System.Data.OracleClient deprecated in .NET 4.0

In .NET Framework 4.0 Microsoft has deprecated OracleConnection and OracleCommand (and likely all other dependent children from the System.Data.OracleClient.

This just supports what me and my coworker have been telling our company's DBA all along.


Unfortunately, a deprecation by m$ alone won't convince the higherups to stray away from the mess that is Oracle and migrate to a M$ Sql Server. Because the oracle client ships with Oracle.DataAccess.dll in the %Oracle Path%\product\10.2.0\client_1\BIN\ folder, it's likely we'll be stuck in Oracle land!

Oracle and ADO.NET Depreciated

Wednesday, July 28, 2010

Engineering Mountains...

of Dew.

Marvel at my ingenuity..

Published with Blogger-droid v1.4.8

The Xaml Workshop: Building a Dynamic, Efficient Data Auditing Model

What do you do when you're software is being blamed for the "incorrect" numbers being shown in reports? Learn to implement an Efficient Data Auditing Model so you can stick it to the man! Great writeup from our friend at XamlWorkshop

Error Code: ID10t

The Xaml Workshop: Building a Dynamic, Efficient Data Auditing Model: "Welcome to the wonderful world of data audits. As anyone who has ever dealt with annoying managers and clueless users knows, the word 'data..."

Tuesday, July 27, 2010

The Xaml Workshop: Converting Delimited Data Into a Table

Learn to dynamically insert comma-delimited data into a T-SQL from our friends at XamlWorkshop

The Xaml Workshop: Converting Delimited Data Into a Table: "To setup the scenario for this example, you can probably think of several instances when you pass a comma or semi-colon delimited list of values into a Stored Procedure, and need to parse each value separately. This function will do just that, but in a re-usable, dynamic way...."

Monday, July 26, 2010

The Xaml Workshop: How-To : Data Binding & Behaviors

Image representing Microsoft Silverlight as de...Image via CrunchBase
Here's a good write-up of using Data Binding Behaviors from our friend over at XamlWorkshop

The Xaml Workshop: How-To : Data Binding & Behaviors: "
For this example, we will utilize the power of Data Binding and the InvokeCommandAction behavior in a UserControl.

Let's imagine this scenario: we are creating a web application, and need to perform the same task when multiple controls receive the Click event. In my real-life solution, I am building a shell using Silverlight 4 and MEF...." 

Enhanced by Zemanta

Thursday, July 22, 2010

No Words To Describe...

At times, i wonder how the rest of our company manages to function. It's not that i don't believe they can use their brain to figure out simple issues, but i don't think THEY believe they can use their brain.

My coworker, codename "Jose", received an email from a manager from our Customer Service department yesterday after he was gone for the day. Recently a report was added to her report generation program that shows orders from the Internet. When she got around to running it for her first time, she noticed that the dates on the orders didn't go past 6/13/2010. She panicked.


She sent an email off explaining (really exaggerating the situation) and giving all kinds of doomsday scenarios about how Orders from the website didn't work, and she CC'd some of the higher-ups from her Branch on this email. In between the initial sending of the email, and the time Jose got around to checking on it and responding, there had been several emails back and forth between everyone but Jose, as he not yet read it.

"How could this happen? What are we going to do?"

..they wanted to know. Now, the manager had attached the report to the email..but nobody had bothered to look at it.

Jose gets into work, in denial about there being any issue with Internet Orders going through (especially since he and i had tested them a handful of times both internally and externally). He opens up the attached report, and sees the orders she saw. He then scrolls down and sees the rest of the orders that were supposedly missing.

The report was ordered by Order Total, rather than date, and just coincidentally had no dates after 6/13/2010 on the first page because of the ordering selected.


This video is actually about my company. We were on a Reality TV show and this was footage taken from that (Ignore the Bugs Life Title....Disney ripped it off of us! No really..). Watch the whole thing so you understand what we have to deal with on a day to day basis.

Special Thanks to my other coworker, codename "TurtleHawk", for digging up this shocking footage!
Enhanced by Zemanta

Tuesday, July 13, 2010

Reach For The Skyyyy...

Wanted to share a little tool with you that i found while making mock-ups for the new Team of Programmers layout.

You're mocking me, aren't you?

Oh no, no no no, no. - Buzz look, an alien!

Mocking Bird is a nice online tool that allows you to create quick & easy wireframe of your website or application!

Not only was it easy, but i can easily share my mockup!

This tool has saved me a lot of trees, so i thought it only justified i give it a bump ;)

Thursday, July 8, 2010

Shortcomings of the WPFToolkit DatePicker - Part 1

Anytime i develop and application using WPF, i can't help but wish i was doing it in Silverlight instead. The Silverlight Toolkit has been given way more love than the WPF Toolkit in terms of coming out with new and sexy looking controls. Despite the transparent differences in toolkits, they both had a DatePicker that left me wanting more.

The application i had wanted to use this DatePicker for needed to have all input controls optimized for speedy entry. Our employees however have come from using different kinds of programs developed by different programmers. Some developers made use of masking, some made things very key friendly, some made it mouse friendly, and some...made the user hate him by doing nothing.

So with the end user coming many different ease of entry backgrounds, i needed a DatePicker that has EVERYTHING

The first thing i had hoped to find, was textbox masking on the entry of the date so that it would hold the proper __/__/____ format and not allow excessive numbers to extend the text. Although errors were handled when the DatePicker was treated like this, it still allowed extra entries, and even letters to be entered into the DatePicker. The Calendar/DatePicker control from Telerik in their RadControls had the same drawbacks. I also didn't find what i was looking for in the DateTimePicker in the AvalonControlLibrary.

The second thing i was hoping to find, was smart increments and decrements made by the Up and Down arrow keys. The last thing, related to my last wish, are small "Arrow" buttons near the calendar button to allow for quick date increments for each of the 3 sections just by a mouseclick if you happened to select the wrong year or something. None of the above mentioned developers/groups had these feature either.

So now what?

Since i couldn't benefit from someone else's work, i decided that i would allow others to benefit from mine! Stay tuned for Part 2!

Disclaimer: I cannot be held responsible for your disgust for my lack of knowledge with Best Coding Practices
Enhanced by Zemanta

Wednesday, June 30, 2010

Leave It To A Programmer...

As an American, I'm not a big fan of watching soccer.

My co-workers, being confused by our win over mexico last year, imagine that watching soccer on the television is a fun past-time and have been trying to get me to show more interest in it.

My co-worker, we'll call him "Jose" to protect his identity, says to me:

I have something for you that i think may get you more interested in soccer...

I quickly reply that the only thing that's interesting about Soccer, is if it's a girl playing Soccer. He sends me a link to an article on the Huffington Post website

After viewing this site, and exchanging some of the normal guy comments back and forth, i say that if she didn't have the nice body she has, i wouldn't find her very attractive. Another co-worker retorts saying that she's prettier than those pictures give her credit for. Now i was only half-kidding about my comments about her not being pretty...in part because most of the pictures (as you've probably saw) show her face in some sort of enraged\cheering expression.

Jose decides to go on the dangerous mission of finding pictures of her on the internet, on our work internet mind you, that are SFW and that might make me think she's pretty.

Upon finding she has a website dedicated to her, of course, he passed the link around to all of us. http://www.larissariquelme.com/

His first comment upon loading the page was nothing less than what we expect from Jose. I'm paraphrasing from memory...

I wonder if she made this site herself, it has a really nice layout! Ooooo i like the sparkly thing she does with Flash for the images.

Yes. His first comments upon going to a website dedicated to a lingerie model, filled with pictures of her in risqué "outfits", is about the layout and design of her website.

Leave it to a Programmer! I love my job!

I do like Twilight, but i still thought this quote from my friend, not to be named, was funny:
Twilight's like soccer. They run around for 2 hours, nobody scores, and its billion fans insist you just don't understand.

Monday, June 21, 2010

Monday, June 7, 2010

Handling WCF TimeoutExceptions "Globally" Part 1

One of the WCF services I've setup at work has a high volume of calls being made through it. The application retrieving this information requires the data to be delivered in a timely fashion and we can't afford there to be timeouts.

Most of the methods have been split out onto separate WCF service instances to better configure their InstanceContextMode and ConcurrencyMode so that we may handle the priority of the importance of the data as well as handling caching.

Due to some clients being many network hops away, we would get random timeouts that we weren't able to control. In addition, sometimes there were high cost (webserver-side, not database) methods and resource consumption would spike causing a temporary queue for data.

I wanted to handle time-outs without having to muck-up my code by putting a try catch around everything. Also since i had split different methods onto different WCF service instances i had multiple clients. So if i made a change in the proxy, i'd have to make it in more than one place, which is bad news for code upkeep.

My solution was to make use of Generic Methods and Service Extensions to create a wrapper of sorts to handle my service calls.

namespace SecretProject.Module.Services
    public static class ExceptionService
        public static T TryWebMethod<T, TClient>(this TClient client, string methodName,params object[] parameters)
                    MethodInfo methodInfo = client.GetType().GetMethod(methodName);
                    return (T) methodInfo.Invoke(client, parameters);
            catch (Exception err)
                if (err.InnerException is TimeoutException)

            return default(T);

The above code would allow me to call the method and handle globally the TimeOutException, if thrown.

In this example, assume the GetProgrammers, from dataClient (of type CommonServiceClient), returns a List of the class Programmers
This would change my usage of the method from something like:

dataClient.GetProgrammers(parameter1, paramter2);

To this:

dataClient.TryWebMethod<List<Programmers>,CommonServiceClient>("GetProgrammers",parameter1, paramter2);

This allows us to now handle logging, rolling over to a backup server, requiring user interaction to make another attempt, or whatever you may want to handle here! And this will all be done without having to muck-up your code around every service call.

In Part 2, I will show how I handle rolling over to a backup server to temporarily balance the "overflow of the data queue" on that one server.

Thursday, May 20, 2010

I Spoke To Loud And Someone Heard Me, I'm SUING!

The bandwagon of people and companies that may have been stepped on during Google's rise to the top have found an opportunity to take a swing at the Gentle Giant.

Some people in Oregon have already started a Class Action Lawsuit against Google after Google came forward and admitted to having accidentally stored more information then they had intended to gather when going around gathering information for their StreetView application.

Now i'm NO law guru, nor have I ever studied law. My following comments are going based on the ethics or general behavior of society. (society being used very loosely)

If i were to stand on the sidewalk outside of your house and write down your address, or even walked up your driveway to write down your address, there would be nobody pointing their finger at me crying foul.

With this same regard, people should also be okay with the idea that someone came by and looked the Mac Address of their Wireless Access Point. Right?

If i were to look into your windows from the sidewalk and see your furniture, or even your family, inside your house, i would not have the police knocking at my door coming to arrest meor even a fine in the mail. If you're the kind of person okay with people seeing into your home, then in that same respect it should be okay for someone to see what's going on in the traffic of your wireless network.

Is it polite to sit there and look into someone's house? Probably not, i wouldn't like it if someone i didn't know was looking into my home. But i would put up blinds to keep them from being able to view into my home. The same way i would put encryption on my network to keep them from being able to view into my packets.

You wouldn't consider it stealing if you went and looked at someone's address on the side of their house. So it also shouldn't be considered stealing for looking at their mac address on the network.

You wouldn't consider it stealing if you peaked into someone's window, unless maybe if they had a "no trespassing" sign. (and no i'm not talking about walking right up to their window standing ON their lawn) So it shouldn't be considered stealing for catching glimpse of traffic going on on their network.

I've been in the garage working before, or even in my living room with the door cracked or open with my music loud, and I've had people who were looking for my dad walked into my house/garage and ask me "does my dad's name live here?". I understood they chose to walk right in because i wasn't responding to the normally accepted way of contacting people at their home, doorbells and knocking, but I found it kind of awkward, and was startled when this happened. I didn't go calling the cops trying to get a free handout, or try to get that company fined by the government. Instead? I closed the garage. I closed the front door and locked it. And with my Wireless Access Point, i put a password on it so people can't connect without me first giving them the password.

I'm Sueing!

I'm really not. If you want your networks private, make them private. If you don't know how, pay someone to do it the same way you'd pay someone to install blinds on your windows and locks on your doors.

Wireless Access Points go one step further and allow you to not broadcast your SSID name, which would be the home equivelant of cloaking your house and making it disappear off of the lot!

There is NO reason why people should be trying to get a free handout.

Lets say it was Christmas time and you decorated the outside of your house amazingly well. I take a picture because i'm in awe, and i am at home with my buddies showing them pictures only to have someone point out that you and your spouse could be seen through the window "rubber necking". I immediately remove that picture from my album of pictures i'm showing my friends, and write you an apology for the friends that had already seen it. Are you going to sue me? Could you? Should you?

That is essentially the same thing that Google did. They found the issue, assumingly removed it from public consumption, and made apologies to people who may have been affected by it.

That should be the end of it.

They could go out of their way to publish thorough tutorials\documentation on how to secure your networks, or even go a step further and allow you a way to "opt-out", but there should be no Class Action Lawsuits.

Monday, May 17, 2010

A Scrooge For All Seasons

I've been running a few "social experiments" here at work in regards to a certain co-worker of mine, who will remain nameless. This individual always comes in looking super grumpy, and he'll usually ignore you unless he's taking an opportunity to insult you or making a snide comment in an attempt to slight you!

So recently, he forgot his key to the building and my other coworker, Matt, went to open the door for him. I observed as the door was open, and the scrooge walked right past Matt without so much as a smile, thanks, or nod. He acted as if the butler had finally reached the door after he'd been waiting for a while and he was irritated he even had to wait.

People are allowed to have bad days..right?

Well most mornings i'm usually the guy saying "Good morning!" or "Welcome to work!" to everyone who comes in, being i'm usually one of the first people in. Scrooge, as i so lovingly call him, usually doesn't respond. (Though sometimes it's because he's listening to his Zune)

Well, the following morning i decided to address him by name in the good morning i gave him, and he had no headphones in. His response was to glare at me, like i was evil for even insinuating that the morning was anything but horrible lol

Have a good day! Unless..you already had plans to have a bad one. If you already bought the bullets and the ice-cream don't worry about it...

So the next day, i brought in a bag of kettle corn and dixie cups. After popping the bag, i went around and gave a cupful to everyone in the Systems department and Software Development department. Every single person said thanks, with the exception of 1 person. The Scrooge.

Now, He didn't reject my gift of sugary delightfulness. Without turning to look at me, or anything, he grabbed the cup and started eating it like it was a drink he was expecting the waiter to bring him. Even after the last handful of popcorn was eaten, and the cup was disposed of, not a single word was muttered! I was intrigued.

Good morning's came and went, not much changed. One day, he was complaining to somebody on the phone about how long it was going to take him to move some stuff from one location to another. After his phone call i told him that if he needed my help i'd be more than happy to help. Wrong wording i suppose because he retorted with "Not like you'll be of much help, i doubt you could lift a book".

Now i may not be the strongest of guys, but i can definitely lift my share of a load.

I withdrew my help.

The last incident, his Birthday. I knew his birthday was coming up because of his Facebook (hooray!?? facebook is taking over the world!). So i got into work about 15 minutes early, armed with posty-notes and decorated his office with "Happy Birthday!" written in block-letter'd posty-notes. When he got into work and saw my masterpiece, his words were far from surprising:

"Wow, someone had way too much time on their hands."

This was said in a voice that resonated with annoyance and bitterness. That mood followed him the entire day and he'd snap at anyone who was daring enough to wish him a happy birthday! How dare they!

I'm not sure why he's so unhappy, really. He's married, has kids, makes good money, accomplishes his goals, and he's not that old (30s maybe?). Well later that day, he ended up twisting his ankle going down the stairs. He didn't want wishes of a Happy Birthday...so i guess someone up there heard him :)

Thursday, May 13, 2010

Insults Are Okay As Long As You Prefix With "With All Do Respect...."

Maybe i'm just on a binge recently, maybe i'm thinking differently, or maybe some of CNN's authors are really starting to lose their edge.

Today's headline "Some quitting Facebook as privacy concerns escalate". I assumed facebook had removed their privacy settings or something, so i went to go feed my curiosity.

I was instantly turned away from wanting to read the rest when i saw the first paragraph.

Concerns over Facebook's new privacy policy and the online social network's recent efforts to spread its information across the Web have led some of the site's faithful to delete their accounts -- or at least try to.

I'm sorry but, if they were the "site's faithful" they wouldn't be trying to delete their accounts. That would make them the UNFAITHFUL. If that's faithful, i'd hate to see those people in a marriage.

Furthermore, you enormous amounts of control over who sees what on your Facebook, as well as you have YOUR OWN restraint (or maybe you don't, that might be the problem) of what you actually put on your Facebook!

Perhaps the article could have more accurately described it as "some users who are unfamiliar with the security options they have available to them, or who don't know how to properly work the security features, have chosen to leave Facebook."

In defense of the people leaving, i think Facebook should have a few "security presets" to allow people to easily set as "MOST SECURE", or something of that nature. Though i don't think having an easy way to set your security is going to keep the majority of the people from leaving. But that would mean... they didn't leave because of the security *gasp*