Friday, January 13, 2012

An App Store for the Rest of Us

I’ve blogged a year ago about App Stores, calling that everybody gets an App Store or as Scott Hanselman tweeted it “There's an App Store for that!”. I had hope for Microsoft to build a better app store that isn’t like Apple’s. So much for my hopes that were crushed when the details of Windows 8’s store was revealed last month. Microsoft promised developers a bigger bite of the apple, bigger than Apple’s. 80% rather than 70%. Your app qualify for the bigger cut if your sales exceed 25,000$.

While that seems generous, I still didn’t like the phrase Microsoft used to describe taking a percentage of your revenue; “Revenue Sharing”.

Microsoft previews the Windows Store

Imagine the government re-labeling taxes as “Revenue Sharing”.

So, Microsoft creates a platform (if we can pass upgrading Windows as creating a new platform), announces that the only way you can get applications of that platform is through their app store and then takes away a percentage out of every single copy sold on that platform.

Imagine you’re a tiny shop building applications for Windows. Now, you want to switch your app that costs 10$ to the new Metro-style UI of Windows 8. How are you going to handle pricing? Are you giving up 3$ to Microsoft and reducing your income by 30% or are you going to raise your price to make room for the new cost and piss off your customers who have seen price increase with no features to justify it which eventually will lead (at least some) customers to jump ship to other products.

Why is a 30% (or even 20%) cut out of every copy sold on Windows Store justified? Is Microsoft not making enough money from every single copy of Windows running on 90% of computers on the planet? Do they really need to have 30% share of the entire software revenue on top of Windows revenue.

What exactly justifies taking a 30% cut? Hosting the application, distributing updates, reviews capabilities, all these doesn’t justify taking a percentage of revenue. No, it’s the monopoly. “You wanna build an app for this platform, then we’ll share revenue”. It’s all part of the Apple-ification of Microsoft. Redmond has been lifting pages out of Apple’s playbook, but this time they’ve gone too far.

Apple has always used monopoly over its platform as a revenue generator. “Use our hardware”, “Use our software”, developers build little tools to add functionality to MacOS only to find Apple copy their ideas in the next release of the operating system and claim credit for it. Microsoft has always been unlike that. They celebrate partnership with other hardware and software vendors. They open up the chance for developers to build tools to cover up for Windows shortcomings. “Live and let live”. Not any more, it seems.

It’s also the “consumerization”. Putting the consumer first. Let business, power users and tech people take a back seat for a bit. The average Joe is the center of attention. He doesn’t want better software or more control, doesn’t care about customization, just make it easier and more shiny even with fewer functionality. Maybe it’s just me, but consumerization ruins general-purpose computation and PCs as we know it today. Consumerization turns PCs and Computers into appliances. One for each function. They deprive me from the ability to create and turn me into a consumer to whatever big companies give me.

I understand that this a lot to blame on an app store but it’s not the new functionality that bothers me. It’s the mentality with which it’s offered. An app store for Windows is a great feature that helps developers offer and distribute their applications. It’s been long over due. But Microsoft is taking the wrong approach to deliver this feature. If I were to build an app store for Windows, I would do the following:

  • Make it a new way to get applications, not the only way: Users should choose to use an app store because it’s better not because it’s the only way. At least a billion PC user in the world, I’m not gonna claim what’s best for them.
  • Developers can host their own apps: If you’re a developer and want to host your own app, that’s fine. An app store is only an entry point to discover all the different app repositories offered by all developers.
  • Recommendations not Control: I believe that it’s important to guide average users to what’s best for them. “You shouldn’t use this applications because it’s buggy”. But not do that by anointing yourself King of the world. When a user purchase an app from a developer, it’s an agreement between the two and the platform vendor has nothing to do with it. I know that this app is buggy but I still would like to use it, it’s performing a function that I really need right now, I don’t want for the developer to comply with your review process. As a platform vendor who cares about how your platform is performing and used, you can use recommendations. “Microsoft doesn’t recommend this app because of performance issues” or “because of privacy issues”, “Please read for more details”. Developers would get an explanation for the recommendation and be able to fix the problem. Microsoft gets to place its recommendation high in the list next to the application description. This recommendation would really affect user’s decision and wouldn’t be restrictive to users who know what they’re doing.
  • Standards, Standards, Standards: For this app store to be really open, and for it offer place for innovation by other software vendors, it has to rely of standards. A standard to how to discover apps, how to install them, license them, and update them. Standards that describe how these different process interact with each other, how two processes implemented by two different vendors can still work together. Microsoft can start by offering this standard and other would join.

It’s a shame really that Microsoft is taking over the software market like this. In times where there are attempts by governments to control the Internet, in more ways than one. It doesn’t help that giant software companies are restricting computers as well.

Thursday, January 12, 2012

Sync Windows Live Writer Posts Between Computers

With all the different PCs between work and home, desktops and laptops, synchronization is becoming very important. I wanted to sync blog drafts between different computers which turned out to be very simple. Unfortunately, Windows Live doesn’t offer a solution out of the box, even though Windows Live Essentials comes with Live Mesh along with Live Writer. It’s a matter of putting two and two together which what I’ll do.

First, change the posts folder of WLW (Windows Live Writer):

1. Open up regedit (in Win7, just type “regedit” into the start menu)

2. Navigate to HKEY_CURRENT_USER\Software\Microsoft\Windows Live\Writer

3. Right click on the “Writer” folder in the left pane and choose New > String Value

4. Name the value PostsDirectory and then double-click on it to edit

a. You can try pointing it to your documents folder, which is normally “C:\Users\<your-username>\Documents\” in Win7

b. Or point it somewhere else. Note that Writer will create two child folders wherever you point it: Drafts and Recent Posts.

The folder I switch to is a folder under the folder I keep synced with Live Mesh. On the other computer, do the same steps. Change the posts folder to the folder you keep synced with Live Mesh. You’ll need to copy your existing posts and drafts from their original location which normally is C:\Users\[User Name]\Documents\My Weblog Posts

Now you can start a post on my computer and finish it on the other. More importantly, you now have a backup of all your drafts on your SkyDrive.

You can, of course, use Dropbox or any other synchronization service to keep the posts in sync.

Saturday, January 7, 2012

Mozilla: Beyond Firefox

Who doesn't already know Firefox? But what other projects is Mozilla working on?

I've taken an interest lately in finding out more about Mozilla. I think it all started with reading some of the “How I got started with Mozilla” stories on the Planet Mozilla feed.

I've always been interested in Mozilla's work. It's not open source applications that they build. Most companies now build some tool and open the source code to everyone. This is a noble effort on their part but I don't think that what open source development is about. It's about “Open” before “Source”. Having a community-driven open development process is the key here. Involve the community in the process designing features, and building them. Invite developers to listen in on your meetings. It's a great learning tool for new developers who can learn about what it's like to work on a team. This is what I really admire about Mozilla, the open process. I'll list later in this post some links on where you can see for yourself what I'm talking about.

Before I talk about all those projects, I want to take a moment to mention the Mozilla manifesto (that I translated to Arabic back in 2009). Take a minute to read it. It might seem a high level goal that is not related to daily operations but reading a post about webOS and Mozilla lately, I watched how it's on everyone's mind. I think it really helps the mozillians stay focused on keeping the Internet open when they measure their decisions against the manifesto.

Firefox, Aurora and Nightly

There was always a nightly build of Firefox that if you search for it you can find an FTP page for it but it wasn’t official. With the new approach of versioning and releasing Firefox, nightly builds of Firefox have an official name “Nightly”. Last year, Mozilla came up with the 3 different names and inspiring logos to make it easier to adopt beta version. Firefox is the stable final release for the masses, Aurora is the beta release, it’s stable but could have few bugs. Nightly is cutting edge and updates every night. I use Nightly and love that there’s a 64 bit version of it. You can get it from Nightly’s page. You can also follow Nightly news on @FirefoxNightly or Tumblr. They post details of the upcoming features. For more details, here’s a complete list of features of Firefox, Aurora and Nightly. Here’s an example of a feature that should land soon in Nightly, the new Home Tab.

Mozilla Labs

Mozilla labs is the home of many great ideas that usually are built as addons to Firefox. Some of these projects “graduate” and become part of Firefox like:

  • Jetpack: the restart-less addons platform.
  • Personas: which provides an easy way to skin Firefox.
  • Sync: the indispensable sync capability to keep your Firefox profile up to date on multiple computers.

Other projects are not so lucky and are not active anymore including:

  • Ubiquity: one of my favorite projects. Task-centric natural-language-based command line that brings web tasks from any web site to your fingertips. It's extensible and builds on web standards (HTML, CSS, and JavaScript).
  • Prism: remember how Microsoft annoyed the heck out of everyone with “Pin a website to taskbar” feature in IE9. Well, before that there was Prism. Run any web app as a desktop application with the help of Firefox.

Meanwhile, a number of projects is always active:

  • Test Pilot: collects usage data and user feedback while maintaining user's privacy.
  • Contacts: centralizes the user's contacts in the browser and gives access to online services when requested and allowed.
  • Skywriter: a web-based code editor.

BrowserID

OpenID was a noble effort to outsource and centralize authentication of all the websites that we deal with everyday in a way that removes the hassle. For so reason, mainly the long ugly un-memorable URL, OpenID didn’t take over the web in the way it was hoped to.

Mozilla is take a shot at this problem with BrowserID. Instead of outsourcing authentication to a third party, BrowserID uses the browser to authenticate users using their email address. You add your address as your browser ID and verify it by clicking a link in an email you receive from the BrowserID service then every site wants to authenticate you can rely on BrowserID for that. Watch the video for a demo:

 

Introducing BrowserID from Mozilla

More info on BrowserID is the introduction post or on Identity at Mozilla page. Here’s a quick tutorial for developers, the demo site from the video. You can follow the development or contribute on Github.

WebFWD

WebFWD (Web Forward) is a new program from Mozilla to support open source projects with mentorship, access to Mozilla global network and infrastructure and resources. If you have an open source project that helps keep the web open, you can qualify for support from Mozilla. Read a brief introduction here or follow the program’s news on their blog or @MozWebFWD or watch some videos.

BigBlueButton is one of the projects participating in Mozilla’s WebFWD. It’s an open source project that enables universities and colleges to deliver high quality learning experience to remote students. Here are some videos showing how BigBlueButton works. It’s open source, download it now.

Mozilla Popcorn

Mozilla Popcorn tries to break videos from a big blob into browse-able element, this is how I see it. Videos, even though they’re everywhere on the web now, are still one element. You press play and watch. You can’t search in a video, you can’t make the video interact with other elements or contents that are related to this video. Popcorn tries to bring the web into video.

Watch the Shakespeare demo to get an idea of what Popcorn can do, it’s awesome (you’ll need a modern browser with HTML5 capabilities). Follow the project’s news on their blog or @PopcornJS. Download a copy, or follow the development on Github.

What Else?

There’s one more project I’d like to talk about, it’s the Boot to Gecko mobile OS. I think it’s a big enough topic that it merits its own post especially I don’t know much about it and would like to do more reading on it. If you have good resources on the topic, please mention them in the comments.

This was a quick tour of the Mozilla projects that really interested me over those past couple of weeks. I’m sure there are much more of them our there. If the list is missing your favorite project, mention it in the comments or blog about it, I’d love to read more about it.

Follow @Firefox or on Facebook or Contribute effort to the organization. Get some Mozilla and Firefox gear or Donate and get a free shirt.

Book Review: The Bridge

I've read quite a number of books about Obama, from the ones that were available during the 2008 campaign like David Mendell's "Obama: from Promise to Power" to the ones covering his first year in office like Richard Wolffe's "Revival", Bob Woodward's "Obama's Wars" and Jonathon Alter's "The Promise", not to mention Obama's two books. I list these books to brag but rather to show how David Remnick's book "The Bridge" is different.

Even though Remnick's book goes through all the events of Obama's life like any biography would, it offers an analytical look into those events. It reviews Obama's first book and tries to look into the author's intentions sometimes. It's a little skeptic on some aspects of the author memories of certain events. Maybe my focus on this analytical look is because I've read an Obama biography before, but I think it's also because it's the intention of Remnick who chooses to cover the 2008 campaign in its relation to Race rather than cover the day to day events or uncover new secrets like "Game Change" does for example.

However, the book does shed some light on events that weren't covered in other biographies of Obama like this time in Hawaii, the story of his mother, the process of selecting him as president of the Harvard Law Review, and other.

One thing I like about "The Bridge" is the dive into the history of other characters that affects Obama's life even in indirect ways. The election of Harold Washington as Mayor of Chicago is a good example. Also, I liked the review of Obama's performance as a Law Professor, it's a good indication of how thinks.

I listened to the audio version of the book and the narrator does a good job at changing voices to reflect the different characters participating in any dialog. He's at good pace and made following a 20+ hours books easy.

"The Bridge" is a good biography of Obama whether you already read another biography or not. Hope you enjoy it too.

Watch David Remnick on The Daily Show with Jon Stewart interviewed about the book.

Find all my book reviews and become my friend on Goodreads.

Saturday, November 19, 2011

On Ad Blocking

I was reading this blog post on Planet Mozilla feed on the moral dilemma on using Ad blockers and I left a comment that is the idea behind this post. I use an Ad blocker and I'm aware that I'm not doing good to the sites that I visit. I agree that Ads build brand recognition and by not looking at them, I might be taking away revenue from those sites.

This is why I disable my Ad blocker for almost all the sites that:

  1. I use regularly and want to support.
  2. Their ads are not an assault on my eyes or doesn't offend me.

I think that the reason this ad blocking started is because the ad providers (and indirectly the site owners) took unfair advantage of their users and threw all the crap that they could find at them (remember the good old days of pop-ups).

Ad providers are doing a terrible job in matching sites’ content with ads. You go to a website to read a serious article and find an ad that is completely different and unserious just because this user's profile at the ad provider indicates that they might be interested in this ad.

Content is subtle, but visual distraction can't be ignored. Ads give no regard to the page's colors and insert a foreign object with completely different colors. Some ads don't even care about having the correct size. Example is below (Click for bigger picture).

Some sites don’t even care and display ads that are stupid and offensive. Here’s an example of a (supposed to be respected) newspaper web site displaying (what is practically if not really) ad for a porn site. Some web sites don’t care about their users as much as they care about ad revenue. I understand that it’s a tough business, but I know a bad business strategy when I see one. Having no minimum when it comes to what is an acceptable ad is a bad business strategy.

Some content provider think that “Content + Ad = Money” without thinking through what content or what ads. Those content providers will never imagine that one good option sometimes is displaying no ad at all. Users will respond to those providers by using Ad blockers.

Instead of considering whether or not ad blocking should be a moral dilemma (which I can actually agree on), we should ask ourselves 'Why are users blocking ads?'.

Friday, November 18, 2011

Mirroring Hard drives Using PowerShell and SyncToy

My main protection against hard drive failure for a long time has been RAID 1. I would get two identical hard drives and RAID them so that everything I do on the first drive would be replicated on the second. One time, this actually saved me from a hard drive failure with almost zero down time.

I can say that this has worked out very well for a long time until one day I made a stupid mistake and accidently chose the wrong drive when installing Windows. I wiped out the data drive and sure enough RAID has mirrored everything I did. It was 4 days of crying, recovering data with DiskDigger, banging my head on the desk, recovering data, more crying, and so on. Since then, I dropped the RAID 1 on all my hard drives and switched to using SyncToy to mirror identical disks once a day.

SyncToy is very simple to use and you can use it with Windows Task Scheduler to sync the drives at night. However, I ran into two main problems: Copying SQL Server database files, and Copying mounted VHD files. These files won’t get copied if they’re in use. To solve this problem, I need to stop the SQL Server service, and un-mount the VHD file before mirroring the drives. To do that and after learning all about it, I’ll be using PowerShell.

Running PowerShell Scripts

The first thing to try out is running PowerShell scripts in Windows. If you’re running Windows 7 like I’m, you could run into the issue of restricted execution policy. If you try to run a PowerShell script, any script, you’ll find this error message:

File C:\test.ps1 cannot be loaded because the execution of scripts is disabled on this system. 
Please see "get-help about_signing" for more details.

This is caused by Windows limiting the ability to run PowerShell scripts by default. You can get the status of the execution policy using the PowerShell cmdlet Get-ExecutionPolicy



Get-ExecutionPolicy


To change the status of the execution policy use the Set-ExecutionPolicy cmdlet. Here, I’m switching to “Unrestricted”:



Set-ExecutionPolicy –ExecutionPolicy Unrestricted


Changing the execution policy is a one-time thing, you won’t have to worry about it again. Now, your Windows 7 is ready to run PowerShell scripts. You can read all about execution policy and running PowerShell scripts on Windows in this TechNet article.


Running PowerShell Scripts using Task Scheduler


The Task Scheduler will be responsible for running the script. It can’t run it directly, we’ll have to run PowerShell.exe and pass the script as an argument. It’s like running a PowerShell script from the command line. To do that we enter the PowerShell.exe path followed by “& then the path to the script surrounded by single or double quotes (Source). This helps with running scripts that have space in their path. Here’s an example:



“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” “& 'D:\Folder Name\Our Script.ps1'


Copying Database Files


Before we start writing the script, we’ll have to test copying the database file. I stopped the SQL service using the Services management console and tried to copy the file but it failed. Database files by default are not owned by your Windows user account. You have to take ownership of the files (the MDF file and the Log file) and grant your Windows account sufficient permission to be able to copy the files. You can use the Properties dialog to take ownership of the files. I do that and now I can copy the files.


I can write all the commands in the PowerShell script directly, but I would rather break down the script into reusable functions. To prepare to copy the database files, I have 3 functions; check the status of the SQL service, stop the service and start it. I would like to maintain the status of my SQL service as it is after the mirroring is complete. I want to stop the service and start it again only if it was actually running.


Checking the service status, stopping it, and starting it is the same for all services and is not related to SQL Server. You can read all about it here. We can simply use the commands Get-Service, Stop-Service and Start-Service.


I’m writing the functions in a bit of a generic way so that I can use them later in other scripts without having to change their content (only their name have to change). For example, I’m passing the name of the service. Here’s the Get-SqlServiceStatus function as an example:



Properties Window of SQL Servicefunction Get-SqlServiceStatus ($serviceName)
{
    # Get a reference to the service
    $sqlService = Get-Service $serviceName


    # Return the service status
    return $sqlService.status
}


All I need now is the name of the SQL service on my computer. To get the name of the service, navigate to the service properties dialog and pick the name of the service (not the display name). Make sure to use PowerShell escape characters to enter the name correctly. For example: “MSSQL$SQLEXPRESS” have a dollar sign ($), so I have to add a backtick before the dollar sign to make PowerShell parse the name correctly “MSSQL`$SQLEXPRESS”.


 


Mounting VHDs


I think that the common way to mount a VHD in PowerShell is using WMI (Windows Management Instrumentation). A quick search online will confirm this. However, WMI is not available for Windows 7, it’s for Windows Server. We can’t mount the VHD file using WMI because the namespace “Root\Virtualization” is not available on Windows 7. This namespace include the class that could be used to mount the VHD file. If you’re running Windows Server and can use WMI, here’s a description of how to mount virtual hard drives with HyperV and WMI.


Aside from using WMI, normally we’d mount a VHD using the DiskPart command. To do that, create a file and name it AttachMyVHD.s for example and add this to it:



select vdisk file=c:\MyVHD.vhd
attach vdisk


Then create a Windows command (.cmd) file that call the diskpart command and pass this file to it.



DiskPart -s "c:\AttachMyVHD.s"


In the S file, we’re selecting the VHD by specifying its location, then attaching it. In the Windows command file, we’re passing the S file to the DiskPart command.


In PowerShell, we’ll just execute the Windows command file. This Mount-Codebox function declares a variable with the location of the Windows command file. Codebox is the name of the VHD file I’m using.



function Mount-Codebox
{
     $scriptFile =
“D:\VBox\HardDrives\AttachVHD.cmd”
     & $scriptFile
}


To unmount a VHD, you can do the same thing, except in the S file, use detach vdisk instead of attach vdisk.


Before we unmount the VHD and re-mount it after the mirroring, we need to check if it’s already mounted. We don’t want our script to change an existing status, we want it to maintain it. If the VHD is not already mounted, don’t try to unmount, then re-mount it at the end. Just skip this step altogether.


To check if the VHD is already mounted, we’ll just check if the drive it creates exists or not. To check if a drive exists, we’ll use the Exists-Drive function.



function Exists-Drive ($driveletter)
{
    $drive = New-Object System.IO.DriveInfo($driveletter)
    $drive.DriveType -ne 'NoRootDirectory'  
}


Run SyncToy


To run SyncToy from PowerShell, we’ll use the same way we called the Windows command file above; using the & symbol to execute the SyncToy EXE file. We’ll call the SyncToyCmd.exe file which is the command line equivalent of the application so we can pass the name of the backup plan as an argument. If you use the command line to call SyncToyCmd, it’ll look like this:



SyncToyCmd –R “MyBackupPlan”


We’ll create the Run-SyncToy function with the backup plan name as an input so we can call it multiple times for different plans.



function Run-SyncToy ($backupPlan)
{
    $Exe = "C:\Program Files\SyncToy 2.1\SyncToyCmd.exe"
    & $Exe -R $backupPlan
}


Write PowerShell Output to File


Logically, I’m running this script overnight and I would like to understand what happened while I’m away, so we’ll write the output of the script to a log file named with the date of when the script ran.


To write the output of any PowerShell command or function to file, use the Out-File cmdlet. This TechNet page explains how to use it. Example:



Get-ChildItem | out-file "D:\MyOutputFile.txt" -Append -Force


This line write the output of the Get-ChildItem cmdlet to the text file named MyOutputFile.txt under the D drive. Notice the use of the two arguments –Append  (which appends to the file if it already exists) and –Force (which creates the file if it doesn’t exist).


We’ll need to stamp the file name with time of when the script ran, to do that we’ll use the Get-Date cmdlet and the argument –Format. Example:



Get-Date -format "yyyy-MM-dd HH-mm-ss"


Putting It All Together


You can notice that all the work above just creates functions to be used in the main body of the script. Here’s where we put it all together.



Clear-Host
# Decleare variable to hold the service name
$serviceName = "MSSQL`$SQLEXPRESS"


# Where the log file will be stored
$logHome = "D:\Amr\Backup\BackupLogs\"


# Get timestamp
$timeStamp = Get-Date -Format "yyyy-MM-dd HH-mm-ss"


# Generate name of log file
$logFile = $logHome + "Backup Log " + $timeStamp + ".txt"


# Write a starting message
"Starting backup at $timestamp" | out-file $logFile -Append -Force


# Stop the SQL service if it's running
$serviceStatus = Get-SqlServiceStatus ($serviceName)
"Service $serviceName is $serviceStatus." | out-file $logFile -Append -Force
if ($serviceStatus -eq "Running")
{
    "SQL service is running, stopping it..." | out-file $logFile -Append -Force
    Stop-SqlService ($serviceName) | out-file $logFile -Append -Force
}


# Unmount Codebox if it was already mounted
$CodeboxMounted = Exists-Drive "M:"
if ($CodeboxMounted -eq "True")
{
    "Codebox is mounted. Unmounting Codebox..." | out-file $logFile -Append -Force
    # Unmount Codebox
    Unmount-Codebox | out-file $logFile -Append -Force
    "Codebox is not mounted now." | out-file $logFile -Append -Force
}
else
{
    "Codebox is not mounted" | out-file $logFile -Append -Force
}


# Run sync toy
Run-SyncToy ("TestBackup") | out-file $logFile -Append -Force


# Mount Codebox if it was already mounted
if ($CodeboxMounted -eq "True")
{
    "Mounting Codebox..." | out-file $logFile -Append -Force
    # Mount Codebox
    Mount-Codebox | out-file $logFile -Append -Force
    "Codebox is mounted now." | out-file $logFile -Append -Force
}


# Run the SQL service if it's stopped
$serviceStatus = Get-SqlServiceStatus ($serviceName)
"Service $serviceName is $serviceStatus." | out-file $logFile -Append -Force
if ($serviceStatus -eq "Stopped")
{
    "Starting SQL service..." | out-file $logFile -Append -Force
    Start-SqlService ($serviceName) | out-file $logFile -Append -Force
}


# Write end message
$finishTime = Get-Date -Format "yyyy-MM-dd HH-mm-ss"
"Backup script finished at $finishTime" | out-file $logFile -Append -Force


Try It Out Yourself


You probably have a different backup strategy, but you can still take advantage of PowerShell and SyncToy in a whole host of other scenarios. Download the script here. Tweak it till it fit your requirements and please leave a comment below if you have a question or found a bug somewhere in the script. Even if not for mirroring hard drives, this still was a nice exercise for using PowerShell.


Saturday, November 5, 2011

How To Ruin Your Public Beta

Couple of days ago, I downloaded and installed the latest beta of Adobe Flash (11.2.202.18 Beta 1). I downloaded the IE version and the non-IE version, and the x64 version. I like to test out the latest betas of almost all the software that I’m using; I use Mozilla Nightly and Chrome beta (just updated to version 17 today). It’s my way of staying updated and keeping up with what’s coming next. I understand that I have to take some hits for using beta software but in return I get to enjoy all the new ideas months before everyone else, and every once in a blue moon I get to affect some feature in some upcoming release by providing feedback.

After I installed Flash, I started noticing this annoying beta disclaimer appearing on YouTube videos (a Flash element).

I ignored it at first, but then it started being really annoying. It’s hiding the full screen button in the YouTube player as you can see above. Then it started to get really annoying when it showed up on really small Flash elements; elements that are so small that I couldn’t see anything other than the disclaimer (look at the small Audible “Sample” button on the right). Naturally, I turned to Bing to start finding a solution for this annoyance. I found this post on Adobe forums. Here’s the answer from an Adobe employee:

Incubator builds are not preview, alpha or beta quality. It's before that state - this is code under active development. The watermark is a visual indicator of that fact. Many companies follow this practice for pre-release software - for example, Microsoft Windows pre-release builds have a watermark with version in the bottom right corner of the screen to indicate it an evaluation and not a final version.

Also, Flash Player is one of the most widely distributed pieces of software and our audience is quite broad. End users are by far our biggest customer segment. We need to make sure people - developer or end user - that install Incubator builds know and understand what they're getting themselves into. In the past, we have seen links to previews and betas delivered out of context of the content we have on Labs that explains that pre-releases have not yet gone through security review, may not be stable, etc. These builds don't give users auto-update notification and can make it difficult for a user to install a release player (because it is a later version, or you must run the uninstaller before you install a different version).

So, there’s no way to remove the disclaimer. Now, beta users who are willing to use such an early beta of a software like Flash (which is a component more than a software) are not stupid users. They understand that this is a beta, they accept the risks of using such a software, they just don’t want to be annoyed by a stupid disclaimer.

Someone argued in the forum post with a beta user about how Adobe is right and the beta users are wrong in complaining about this. One thing said is:

With all due respect tom, your comments are the very reason why Adobe tends not to let things publically available this early. They are afraid that people like you will make comments/judgments like this. You need to understand a little bit about software development, this is called an alpha build.

Not only that Adobe has already made this beta public, so they should just accept how users react. It also this a little condescending to assume that the user doesn’t know anything about software development, especially something as simple as what an alpha build is.

To go back to the example that Adobe used to defend their choice, the beta disclaimer in Windows is actually an option in Windows that you can turn on even in a non-beta release. Microsoft just chooses to turn it on by default in a beta release and leaves to the users the option to turn it off if they want to.

Beta users are volunteers who come to you as a software maker and give you a great opportunity to take advantage of their time to test out your software and find out bugs and usage scenarios about it that you wouldn’t imagine. Their reward shouldn’t be that you treat them like crap and tell them that they’re wrong and don’t understand how software works. Their reward should be to make their lives easier, to welcome their feedback and suggestions, to treat them like they’re part of the team.

Mozilla gives beta users access to a feedback dashboard. They give them a button that is very simple to use with happy face and sad face and you only need to write a single sentence to say what’s on your mind. You don’t have to register, you don’t have to answer a survey or pick from a list. No, it’s a minimum barrier of entry, because they want you feedback and they’ll figure out how to make most of it.

A public beta is not just publishing an early release of your upcoming version. It’s a process of including a new member in your development team; the public. Like any other member that is joining your team, if you don’t have a job description for them, or have tools ready for them to use, it’s all a waste of time and money. And what do Adobe do to this team member who is providing feedback, they decline their most basic feedback to have an option to turn this thing off. It’s a shame for Adobe to miss up something as simple as this. But others might say “What else is new?”.

I’m uninstalling this early beta of Flash and going back to the version before that.

Tuesday, November 1, 2011

PowerShell Study Notes

Last week, I found a great PowerShell tutorial over at Pluralsight (by Robert Cain). PowerShell has been a topic that I wanted to learn about for quite a while. As any power user/geek type of person, the command line is my friend but the standard DOS command line has been the same for years. That’s why PowerShell seemed so compiling. But the fact that it’s based on/using .NET objects and that it’s now integrated in Visual Studio 2010 made it a priority to understand what it’s all about.

I finished the tutorial in a day. It’s less than 3 hours long and it’s pretty straight forward. I went over the tutorial again for a deeper understanding and took down some notes that I’m attacking to this post (You can view the document online here).

I also found another tutorial here, that is a series of posts with more details on PowerShell. You’ll find the list of posts in the series on the right side under the title “PowerShell Tutorials”.

Basically PowerShell is a command line that handles .NET objects so that when a command return a result that result is a .NET object that you can retrieve the values of its properties or execute its methods. Even if the result is a simple string or integer, it’s a string object or int object.

PowerShell is built with three very nice concepts in mind. One, it has a script language built-in that has the basic capabilities and concepts of any programming language. Most are like .NET languages but always check your assumptions as it might lead to some confusion. Two, it uses aliases for commands, so you’ll find that most DOS and Linux commands are supported; not as native commands but rather as aliases to native commands. Three, it uses providers to support additional commands. For example, you can load the SQL provider and access SQL objects.

I don’t want to dive too much into the topic, but I thought I should sum it up to get you interested if you’re new to it.

Meanwhile, I hope the study notes can help. You can try out the Pluralsight courses here, they have very reasonable subscription plans. You can follow them and thank them on their Facebook page if you like their stuff.

PowerShell Study Notes

Saturday, October 29, 2011

Book Review: The Big Short

Amazing Story, Beautifully Told
In the tsunami of the economic crisis of 2008, there’s a million story. I've read many books on the topic and they cover it very well. "All the Devils are Here" covers the history. "Too Big To Fail" covers the top guys on Wall Street and Government during the crisis. "The Big Short" tells the story of few people who, while not connected at all, saw it coming. Not only did they see it coming but also made ton of money off of it.
Michael Lewis have a talent for adding a human touch on a tough cold subject like economics and trading on Wall Street. He dives in the background of the characters deep enough to make us understand why they do what they do but not too deep to make us bored with characters that are not known to the general public.
I don't really have many comments on the book itself other than the story is well told. I have lots of comments on the content of the story but I don't want to spoil it. All I can say is, this is probably the closest an economic story comes to a horror story.

Find all my book reviews and become my friend on Goodreads.

Monday, October 24, 2011

What I Use, Part 2

A few weeks I started with the hardware, today I continue with the software and services.

Operating System

Windows, what else? For a .NET developer, it’s really difficult to use another OS on your primary machine. I’m not a big fan of MacOS. Apple’s strength is in hardware not software, Windows is the best OS to run on a Mac. However, I love the idea of Linux. Not just the free and open source part of it, but the customizability of it. MacOS does few things very well and doesn’t let you draw outside the lines. Windows does a lot of things in mediocre to good way but because of the huge user base it has been turned upside down and inside out so many times to let a great degree of customization. Linux does everything in a poor way if you’re a beginner and great way if you’re a pro. Linux allows for a big degree of customization that is too much to resist for a power user. I’d love to switch to Linux (probably, Ubuntu) on my primary machine. Meanwhile, this post is coming to you from Windows 7 x64.

Browsers

Mozilla Nightly

Mozilla really made it easy to follow up on the different editions of Firefox when they announced Aurora and Nightly. Nightly updates everyday but gives a sneak peak into all the latest features. Nightly have another advantage over Firefox, its x64 edition. This requires using a x64 edition of Flash which is finally available from Adobe. It’s also causes giving up on Silverlight (sadly doesn’t have a x64 edition).

 

 

Chrome and IE9

Other than Firefox, I’d like to keep other browsers installed for testing web applications on multiple browsers. Chrome is a really good browser that I would probably use if it wasn’t for Firefox and the fact that it’s built by Google. The monster is big enough and doesn’t need more reach into our personal data.

Internet Explorer is already installed with Windows, but with IE9 you don’t have to hate it so much. It’s fast but have very few features compared to Firefox and Chrome.

Documents

Office 2010

Office with Windows is a no-brainer. Unlike most people, I really like the ribbon. Over versions 2007 and 2010, I discovered a lot of features because of the ribbon. Word and Excel are the applications that I use the most, but I really like Visio which is a great tool for visualizing ideas.

Foxit Reader

Like most people, for a long time, I used Adobe Reader as the PDF reader. It was the only one out there, until Foxit Reader came along and put speed into PDF reading. Version 5 of Foxit kept the great features but switched its visual appearance which made it a bit difficult to use it.

Sumatra PDF

Sumatra PDF is free, open source, fast and lightweight. Works really well, except it doesn’t have a tabbed interface which I got used to after using Foxit for a while.

PDFCreator

Easily create PDFs using a printer. I’ve noticed an error when printing an Arabic document, but it works well for the occasional PDF printing.

Notepad++

Are you still not using Notepad++, really? really?

Dev Tools

VirtualBox

VMware is great, but VirtualBox is just as good. I’ve wrote before about how I use virtualization in development.

Paint.NET

As far as I can remember, this was the first .NET open source application I use on regular basis and actually enjoy using. Paint.NET is really powerful and cover all the image editing scenarios that I need either as a developer or a power user.

IcoFx

As a developer, I don’t really create any icons but sometimes, I need to modify an icon. IcoFx works really well. Version 2.0 is now only a shareware but version 1.6 is a freeware. You can download it here.

Visual Studio 2010 Extensions

I thought it would be fitting to list the VS 2010 extensions that I use. It’s really easy to figure out their use from the title.

Cloud File Storage

With all the different offerings of file storage in the cloud, if difficult to pick just one. Almost all of them are free (at least have a free starting package that is enough for the occasional use). Here’s how I use different tools for different purpose.

Dropbox

If you’re using a file that needs to be synced across different devices, then Dropbox is your best choice. It’s easy, fast and you’re dealing with a local file so it’s easy to forget that you’re actually syncing a file. Dropbox is great for sharing files with friends, because most people have it. Refer a friend to Dropbox or take advantage or their offers to increase space, I’ve increased mine to 4.5 GB (They have up to 10GB of free space).

The downside of Dropbox is privacy. Their use of duplication technology to store one copy of a file across all users means that they’re reading every file you upload.

Live Mesh and SkyDrive

For a Windows Phone user, SkyDrive is an essential part of the service. Photos are uploaded automatically and Office documents as well. SkyDrive is great in terms of size. Can’t go wrong with 25GB of free space. Live Mesh on the other hand is more of remote access tool rather than a file sync tool. It’s only available on Windows, so it can’t sync with a lot of devices. However, SkyDrive and Live Mesh are making great advances, and I expect that I’ll be using more of them compared to Dropbox.

Tonido

If you worry about your privacy in anyway, you’ll love Tonido. It lets you set up your own server offering your files for access over the Internet. The way it works is you install a small piece of software on your home machine (for example), register a sub-domain with Tonido for free, then the folders on the home machine are now available for access from any of Tonido’s clients including Web and all major smart phones (iPhone, Android, and WP7). It’s free and super easy to use. The downside is that access to your files depend on your Internet upload speed which is usually much lower than your download speed. However, Tonido acts as fall-back solution to Dropbox and SkyDrive, whatever file is not available on either service can be accessed via Tonido. Also, it’s great for accessing files through the phone when within the house WiFi range. If it detects that you’re within the same LAN as the server, it won’t go through the Internet but rather through the LAN directly which is much faster. The upside of Tonido is you can access all of your files all the time for free from anywhere.

Social Media and Communication

MetroTwit

I was never a fan of TweetDeck, and MetroTwit came along to offer a strong replacement. I was an early adopter to support a .NET/WPF project that seemed to have potential. But later it turned into a strong contender for best Twitter client on Windows. It’s really beautiful, based on the new Metro UI that is the cornerstone of WP7. It has almost all of the features that make for a great Twitter experience. However, if you’re a heavy Twitter user like I’m, you’ll start to run into the sluggishness that MetroTwit starts to have when dealing with really big numbers of tweets. The Plugin Container that hosts the displayed media (when playing a YouTube video or viewing a photo in-place) crashes often. This doesn’t affect the application itself, but it’s one of the areas that need work for the application to come out of beta. After all, it’s still the best Twitter client I’ve used.

Trillian

For a very long time, I’ve used Google Talk (which has become very very boring after not receiving any updates for the last 4 years at least) and Windows Live Messenger (good example of the unnecessarily  bloated software from Microsoft) everyday. Now Trillian comes along to replace both with slick interface, attractive features, and great degree of control and customization that please a power user like me.

Skype

Skype is like Twitter, you hate the software but love the service and can’t really replace it.

File Management

CubicExplorer

There are number of alternatives for Windows Explorer out there. Most of them are built for the super geek power user, but CubicExplorer actually works for the regular power user who wants to have bookmarks, restore session, and multi tabs. It’s free and open source, have nice themes and other web-browser-like functionality. Downside is that it’s built by one person and sometimes it can go for months without updates (which could be fine, there isn’t a lot of updates needed in the file browser world).

TeraCopy

Throw away this awful Windows copier and replace it with TeraCopy. It supports pause and resume, listing handled files, and it completely replace Windows copier.

Daemon Lite

Until Windows 8 comes along with native support for mounting ISO files, Daemon Lite is my tool of choice. Using ISO files has become much more common than it use to be, and it has become a natural replacement for using CDs/DVDs. I haven’t used my DVD in a long time, and I have gone for few months without it when I ran out of ports. ISOs are much more convenient, and the proliferation of 8 and 16GBs USB sticks has made it more convenient. Even when installing Windows, I can use a USB stick with a simple utility.

InfraRecorder

This utility is built originally to burn CDs/DVDs but I use it exclusively to create ISOs. Free and works great.

Calibre

Calibre is not really for managing files but digital books are a form of books. For a Kindle user like me who uses Kindle for more than reading books (reading articles, and blog posts), Calibre really helps keep my library in order. It can download and edit books metadata, can manage books on the Kindle, and can grab RSS items and turn them into e-books and place them automatically on your Kindle (or any other e-book reader). Try it.

Media

VLC

To play any video, use VLC. It’s that simple. Video are not like music where other features of the application would matter. For videos there’s only one feature that matter, Can I play it? with VLC the answer is always “Yes”.

Zune

I’ve tried so many music player software but the Zune desktop player have great library features (for podcasts as well, not just music) and it has excellent UI design that makes it a lot of fun.

Freemake (Audio Converter, Video Downloader, and Video Converter)

While Widows Live Movie Maker and iMovie can edit movies, they can’t help with the step before that; getting some material to use in your video. You can download a YouTube video with Freemake, extract the audio track off of it, convert it to any format and then use it in your video. All free, all works really well.

Utilities

Windows 7 USB/DVD Download Tool

Copy a Windows DVD/ISO to a USB thumb drive and install Windows from it using this utility.

FileHippo

Not only a great source for applications but also its “Update Checker” can keep most of your applications up to date. Try using Scheduled Task to check for updates once a week instead of check on system startup.

CCleaner, Speecy and Defraggler

All great utilities from Piriform. You can clean up caches and temp files using CCleaner. Watch out before you clean up something you might consider important like Browser History.

Speecy gives you a detailed report on your machine and hardware.

Defraggler is a really good replacement for Win Defrag.

SyncToy

Very simple tool from Microsoft to keep two folders (or drives) in sync. You can use Task Scheduler to run it at specific times.

Logon Screen

I use my computer for very long hours and this simple (and nicely built) utility introduces a little change that makes it a little less boring. Here’s a nice background to use on your lock screen for all Firefox fans.

NetWorx

Small utility to keep an eye on how much bandwidth you’re using.