Browsing the archives for the Software category.


How To Build .vdproj Files In MSBuild

Software

It’s somewhat amazing to me that in 2010 there should still be any problems or confusion surrounding how to build Windows Installer (.vdproj) projects in MSBuild.  But, as Edna Mode says, “Yet here we are, darling.”

First problem: figuring out the syntax.  Well that was the first, last, and in-between problem, but when I typed the following into PowerShell:

devenv.exe /?

I got Visual Studio to fire up and show a message box with some command-line help.  Unfortunately, the version of Visual Studio was 2005, not 2008 as I might have expected.  Turns out my $env:path environment variable was riddled with references to *Microsoft Visual Studio 8* when really I wanted *Microsoft Visual Studio 9.0*.

OK, I can fix that temporarily by navigating to:

c:\program files\microsoft visual studio 9.0\common7\ide

And re-running the command

devenv.exe /?

Yet I still got the IDE to open up with a message box full of command-line and switch information.

Aha! I thought.  Perhaps I need to run the .com version of the program, not the .exe.  I am operating in a command-line environment, after all.

Changing to:

devenv.com /?

Showed me an inline help list which matched the IDE message box, but at least I’m operating within PowerShell 100% now.

OK, so about the format of the command line to build a VDPROJ setup project.  At first I thought that it would be something simple like:

<Exec Command=”$(DevEnv) $(ProjectFile) /Build ‘Debug’”/>

Where $(DevEnv) was the path to devenv.com and $(ProjectFile) was the path to my .vdproj file.  Well, two problems.  First was the single- vs. double-quoting issue.  The Exec task’s Command attribute takes a quoted string.  It turns out you have to use XHTML &quot; pseudo-characters to delineate the arguments.

The second problem was more subtle.  As it turns out, you have to pass in the SOLUTION file first, then you have to tell devenv what PROJECT FILE you want built.  Very counter-intuitive.

Here’s my final target in my .msbuild file:

<Target Name="Foo">
        <PropertyGroup>
            <DevEnv>$(ProgramFiles)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com</DevEnv>
            <SolutionFile>$(MSBuildProjectDirectory)\MySolution.sln</SolutionFile>
            <ProjectFile>$(MSBuildProjectDirectory)\MySetupProject\MySetup.vdproj</ProjectFile>
            <Configuration>Debug</Configuration>
        </PropertyGroup>
        <Exec
                Command="&quot;$(DevEnv)&quot; &quot;$(SolutionFile)&quot; /Rebuild &quot;$(Configuration)&quot; /Project &quot;$(ProjectFile)&quot; /ProjectConfig &quot;$(Configuration)&quot; /Log"
                ContinueOnError="false"
                IgnoreExitCode="false"
                WorkingDirectory="$(MSBuildProjectDirectory)" />
    </Target>

I still have to do some work to do a clean prior to the rebuild, and I’m not sure why the configuration needs to be specified twice, but this has gotten me working this weekend. Hope this helps some of you out.

No Comments

First Look At The Gist Beta

Software, Startups

I’ve known of local Seattle startup Gist for a while, through the normal networking and informational circles – but I hadn’t ever gotten around to trying their beta until yesterday, when I hooked up on Twitter with @gregatgist and decided to give it a try.  My friends Buzz Bruggeman and Matt Scoble have both told me a couple different times what a great team and product they have over there, so I was pleased to finally dip my toe in the water.

First, I put the lie to an assumption that I’d been making that turned out to be incorrect – I assumed that Gist was tied closely to Outlook, sort of in the same vein as Xobni, and I haven’t used Outlook in my personal life for over 18 months.  That assumption turned out to be incorrect and I was pleasantly surprised to see how easily it worked with Google Apps.

Here’s a screenshot of the Google Apps import process:

clip_image001

Gist has a very clean, precise look and feel, but tends to get cluttered (IMHO) – more on that later.

You have full control over your profile’s privacy settings and can “publish” what you choose to your own vanity URL: mine is http://gist.com/anthonyrstevens.

image

My first reaction to the Gist dashboard was “huh?” – I had listings for companies and people that I hadn’t contacted in a long time, and some listings that, for the life of me, I couldn’t understand why they were present.

image

Who do I know at Arizona State University?  I’m not sure.  I’m guessing that since yesterday was the first day of use, Gist doesn’t yet have enough information about me and my contacts to be able to effectively segregate information.

The dashboard is visually very dense, but perhaps over time my eye will get used to going where it needs to go.  After all, Facebook and LinkedIn both have information-dense “dashboards”, but they are easy to use after you get used to them.  Usability has obviously been a priority for the Gist team – very nice, pleasant Ajax-y effects, clean, predictable workflow, and consistent design.

One intriguing thing about the Gist dashboard is this little item:

image

It’s their “importance filter” and I gather it’s supposed to let you decide how much or how little information to view on your dashboard.  I fiddled with it, but some people that were (in my own judgment) not all that important still showed up as having a high importance rating.  I may need to train the algorithm a bit, or maybe Gist will learn over time.

My next step may be to take Greg up on his offer to walk me through the app; perhaps I’ll do a follow up blog post outlining some of the additional things I learn.

Overall: I think this is a promising product with tons of potential.  I’m going to use it for a while and give it a fair shake.  Since one of my New Year’s goals is to network more, we’ll see if Gist can’t help me maintain the new professional relationships I’ll be making.

No Comments

Recursively Deleting SVN Folders in PowerShell 2.0

Software

I ran across this little nugget of PowerShell wisdom when working up a script to recursively delete those hidden .svn folders in your local working copy: PowerShell can make good use of parentheses.   And they’re sometimes necessary!  Consider the following two (almost identical) calls:

get-childitem -recurse -force | where-object { $_.PsIsContainer -eq $true -and $_.Name -eq ".svn" }  | remove-item –recurse –force

(get-childitem -recurse -force | where-object { $_.PsIsContainer -eq $true -and $_.Name -eq ".svn" } ) | remove-item –recurse -force

Very subtle difference: in the second one, I’m combining the pipelined directories obtained by the get-childitem call in parentheses BEFORE I pipeline it to the remove-item cmdlet.  This is the only way it will work properly.  The culprit?  The where-object filter, when left alone without parentheses, won’t pass the right objects to remove-item.  When put in parentheses with get-childitem, however, the where-object doesn’t pipe anything to anybody – it’s just filtering out the GCI data.

Hope this helps.

No Comments

The Browser Highlighter – Malware from Skype?

Computing, Software

I noticed a new icon in my quick launch toolbar that I hadn’t seen before and my malware antenna went all a-skitter.

image

It looks like a little flashlight, in black, yellow and gold.  Right-clicking on it gives you an “About The Browser Highlighter” menu option, which, if clicked, takes you to http://thebrowserhighlighter.com/leonardo/redirect?url=index.html, which timed out for me.

A little Google searching led me to this page on the Firefox add-ons website, which told me that The Browser Highlighter is an experimental add-on developed by eBay and which most likely was installed by a recent Skype upgrade.

FAIL.

First of all, I don’t remember upgrading Skype in the last week.

Second of all, I certainly don’t remember choosing to install a Firefox add-on.

To uninstall The Browser Highlighter: Go to your Control Panel | Programs and Features, select “Browser Highlighter – Firefox”, and click the Uninstall button.

image

Fun part: when you attempt an uninstall, you see this message:

image

GAH.  I thought Sticky Software had died an unnoticed death about 2006.  Guess not.

No Comments

Strange SVN/Unfuddle Problem: Solved!

Software

So I’ve been trying off and on for two days now to upload about 150 MB of files into a new SVN repository on Unfuddle, which I’ve been using and loving for about 18 months now.  I had to create a new project and associated repository for security/authorization reasons.

The problem was, that every time I tried to do an SVN IMPORT into the new repository, it would crap out.  the Tortoise SVN progress indicator (shown below) would all of a sudden go down to 0 kBytes/s, and then I would get a “connection forcibly closed by remote host” exception from Unfuddle.

image

Grr.

So then I thought, “let’s try just the biggest files first.”  In my import directory I have a subdirectory called /Assemblies/ which contain a bunch of binaries that need to be referenced elsewhere. So I tried to SVN IMPORT just the /Assemblies/ directory.

Same problem.

For the hell of it, I decided to just import a source code subdirectory, containing a bunch of little .cs files – let’s call it /lib/ – AND IT WORKED.  Yay!

Then, back to the /Assemblies/ directory. – AND IT WORKED TOO.

image

I’m thinking to myself: “self, what the hell is going on?”  I know that there’s no such thing as “priming the pump” in HTTP, so it must have something to do with the fact that I had an empty repository and was trying to load large (multiple-MB) files at the start.  Adding the smaller files from the /lib/ directory must have done something to the state of my repository that allowed it to successfully deal with the larger files.

Moral: when dealing with a new repository in Unfuddle, import small files first, before you attempt to import large binaries.

Hope this helps someone else.

No Comments

Windows Azure Goes Commercial

Software

…and your CTP data is going to be deleted:

During the first week of January 2010, you will receive an email to this account with detailed upgrade instructions.  You will then have until January 31, 2010 to upgrade.  If you elect not to upgrade, on February 1, 2010 your CTP account(s) will be disabled and any Windows Azure Storage will be made read-only.  SQL Azure CTP accounts will be able to keep using their existing databases but will no longer be able to create new databases.  On March 1, 2010, the SQL Azure CTP accounts that have not been upgraded will be deleted. On April 1, 2010, the Windows Azure Storage CTP accounts that have not been upgraded will be deleted.  It is important to export your data if you do not plan to upgrade to a commercial subscription prior to these dates.

If you have anything valuable in the Azure cloud (i.e. in your SQL, Table, Blob, or Queue Storage accounts), make sure to get it out before they pull the plug.

Overall I think this is a good sign for cloud developers – Microsoft is confident enough in Azure to eliminate the CTP program and move to a normal, paid model.

No Comments

Disposable “plus addresses” in Google Apps E-mail

Productivity, Software

I’ve been fighting with my Google Apps E-mail setup for a bit this morning, trying to get so-called “disposable” or “plus addressing” to work.  Essentially, the idea is that you can send e-mails to a special on-the-fly e-mail address that will make its way into your inbox, where you can use inbox rules or filters to put it in the right place.

So, for example, if you’re filling out a spammy form, you could enter:

anthonys+spam1@crowdify.com

and the e-mail would be delivered to your anthonys@crowdify.com inbox, where you can route it wherever.

I’m using very clear instructions from Matthew McEachen, but still having one final red-zone problem: the e-mails get delivered and placed in my “All Mail” folder, not my inbox.  And the filter I have set up, to label these incoming e-mails with a particular label, appear not to run against these incoming messages.

Kind of stumped right now.  Will continue to investigate for a bit, because I really want to get this to work.

2 Comments

The Pernicious Influence of Java on JavaScript

Software

They’re not the same language, and don’t even share any direct ancestry, but whenever I run into nonsense like this:

image

I shake my fist at the Java programming language, because I attribute this sort of harebrained semantics and/or method naming to the fact that “JavaScript” contains “Java” in its name.

Seriously, what kind of lame developer would create a method on a Date object called “setFullYear” – and have it take a month and a date as well as a year?  Grrrrr.

Flame away.

No Comments

Twilio Announces Conferencing Capability

Software

“Create a conference call in three lines of code.”

Sounds too good to be true, but Twilio has just announced the ability to set up conference calls via the Twilio API and TwiML markup language.  From their press release:

Sick of those crappy conference lines? The ones that that require you to enter your conference id, participant pin, access code, weight in kilograms and pi to fourteen digits before you can get to chatting? Now you can build your own with just a few lines of code. Ready?

Twilio conferencing adds new REST and TwiML elements to allow bridging two or more in-progress call sessions. Just <Dial> a <Conference>, and specify the name of the "Room"… any callers who dial the same room will be conferenced together… it’s that easy!

I’ve been working on and off with Twilio this year and am super impressed with the team, the technology, and the consistent stream of updates they’re making.  Telephony-enabled applications are a breeze using Twilio, and if you’re considering adding a phone icon to your Visio architectural diagram, you should seriously check out Twilio.

1 Comment

Steve McConnell Talk: November 19th 2009 in Bellevue

Software

Steve McConnell, one of my software heroes and the author of numerous books on software development, project management, and coding, is giving a talk on the 19th of November in Bellevue.  See you there?

Secrets of world-class software organizations
Steve McConnell, CEO, Construx Software

Thursday, November 19, 2009
6:30 pm – 7:00 pm (Networking)
7:00 pm – 8:30 pm (Presentation with question and answer period)

Bellevue College
Building N – Room 201
3000 Landerholm Circle SE, N201
Bellevue, Washington 98007

Admission is free. Please see <http://www.ieee-seattle.org/computersociety/?p=80> for more information.

(h/t Alex Bendig, via the STS discussion group)

1 Comment
« Older Posts
Newer Posts »