grab our rss feed

stevienova.com

Homepage of Steve Novoselac

SQL Server Reporting Services: Quick way to get 10 digit year (all the zero’s) using String.Format

Dates are fun. See, by default most dates come out like 5/6/2008. But computers, and programs like them formatted as 05/06/2008. That way, all the dates, no matter what month or day, are all the same length, cool huh?

Well, in Reporting Services, if you have a date field coming back in a dataset, and you want to format it as a 10 digit string, there are about 50 different ways to do it. You can use old VBA Left and Mid etc, or you can use String.Format like..

=String.Format(”{0:MM}/{0:dd}/{0:yyyy}”,CDate(Fields!CalendarDate.Value))

Hacking Microsoft Pro Photo Tools - Using Reflector to use MapPoint Lat Long Lookup (for free!) in C#

The other day, came out with “Microsoft Pro Photo Tools” which allows you to geocode your photos. It is a pretty cool app, but there are some things that I wonder, like why didn’t they just build this functionality into Windows Live Photo Gallery?

Anyway’s, with any new thing I download and play around with, I started digging into stuff. I looked in the install directory, C:\Program Files\ Pro Photo Tools and noticed that there are some Interop assemblies and other assemblies, etc. I fired up Reflector and started disassembling the assemblies and exe. Pretty cool stuff, you can see what they are doing. Using xaml forms, etc. The cool stuff is the Location based stuff.

has MapPoint web services which you can use/sign up for, but they cost a pretty penny. I have used some of these web services in the past and they have a ton of functionality.

Like I said, digging through the disassembled stuff in Reflector, I saw a method “GetLatitudeLongitude()” which takes in country, state, city, address, zip and returns a lat long object. But, you need a “MapPointWrapper” object to use it.

I fired up Visual Studio 2008, and then referenced the assemblies in the Pro Photo Tools directory so I could use them in code. I created a test WinForms app, and started hacking away.

Looking at the MapPointWrapper class constructor in Reflector, I noticed that it needs a username, password, URL, and timeout, the first three I don’t have - but I bet I could find!!

Here you can see the constructor as it looks in Reflector. The thing I noticed right away is that they have the username and password embedded in the function, although its all “encoded”, then blend the strings together to create default credentials. Their blend method is using some bitwise operators, etc, if you are interested, you can just click on the Blend method and it browses to that (did I mention Reflector is cool??) - anyway’s, I still need a URL…

image

Reflector lets you click on a class and “analyze” it, which gives you what classed depend on it, which classes use it etc. Just going through the list for MapPointWrapper, I found one that showed how they call the constructor.

image

That’s the ticket! You can see they are passing in empty strings for user/pass (which then gets converted to the correct user/pass by the constructor) and then the URL is right there!!! nice! We can use this!!

Now, on to using this functionality in our own app!!

image

Now, this will give you the lat/long back from MapPoint! Sweet. Now we can start digging into everything else - what else do these assemblies expose?? Can I get routes? directions? Maps? etc, etc, etc. There is a plethora of things to dig into. It looks like they are just using Virtual Earth though to get maps, not MapPoint (from what I can tell anyways).

I know there are a ton of other ways to get this info, but this was basically a test to reverse engineer their assemblies and use the functionality. I don’t recommend or condone hacking/reverse engineering assemblies like this for profit, more for fun , in other words - don’t use this in a production app as would probably find out and come hunt you down.

This post is also just an example of how .NET code can be disassembled easily and re-used, for good, or evil :)

There are some basic things that every developer should do with .NET desktop apps - use Dotfuscator (which just obfuscates your code, making it harder/not feasible to reverse engineer, and also encrypt any strings/values you don’t want anyone else using or reading. That being said, Reflector is a great way to see how other applications are coded, and learn how they work. Happy Coding Hacking!

links for 2008-05-01

Auto Submit Form in ASP.NET With Javascript

Not sure if this is the best way to do this, but this is what I do. Say you want to auto submit a form on an aspx page. You can call document.formname.submit(); from the body onLoad event and it will submit, but ASP will automatically post it back to itself.

I tried added buttons with different postbackUrl’s, clicking the submit button in javascript, etc to no avail.

First, what I had to do was put on my ASP Classic hat. Look at your <form> and remove the runat=”server”

Then, you can say document.formname.submit(); and it will submit your form.

How do you pass data though?

Well, you have to created input fields, probably hidden like

<input type=”hidden” name=”blah” id=”blah” value=”<%= Request.QueryString["myvalue"] %>” />

Then you can pass data from another page or whatever and auto submit your form.

It would be nice if you could say in your Page_Load() something like

 

btnSubmit.Click(); and it would automatically click it and submit your form, but that doesn’t seem to be available at all.

Like I said, there is probably a better way to do this, and it shouldn’t be this complicated, but a few minutes googling for answers left me up in the air. Funny how something that is so easy in ASP Classic turns out to be harder in ASP. ASP wants you to really post back to the same page by default. It hijacks the “action” attribute on the form no matter what with runat=”server on there.

Ubuntu 8.04 Hardy Heron - Linux is Cool, Linux Wireless is Not - 10 Step Program

Gah. I have a love hate relationship with . It is pretty cool, can do pretty much everything. But.. But.. wireless support is just a joke. Same issues with Yellow Dog on the PS3.

Wireless should JUST WORK.

I downloaded the 8.04 iso, and burnt it to cd. Installed it in windows, which is cool, a 10 GB partition. rebooted and the windows boot manager lets you choose , Vista or Ubuntu.

After getting set up, logged in, I tried to get on wireless. Doesn’t work. The thing is with , is if you start configuring stuff here and there, it can get WAY out of hand, and then its just wacked. That happened, so I reboot to Vista, uninstall , reinstall.

Now, lets search the forums, blogs and what not to get wireless to work. These are the steps I took to get it to work. My laptop is Inspiron E1705 with Broadcom wireless..

Fire up terminal..

1) sudo apt-get install build-essential

2) wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2

3) tar xjf b43-fwcutter-011.tar.bz2

4) cd b43-fwcutter-011

5) make

6) cd..

7) wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2

8) tar xjf broadcom-wl-4.80.53.0.tar.bz2

9) cd broadcom-wl-4.80.53.0/kmod

10) sudo ../../b43-fwcutter-011/b43-fwcutter -w “/lib/firmware” wl_apsta.o

Now, reboot a few times, and then maybe.. just maybe your wireless will connect and work. Once it latches on, it seems to be fine. I am on Ubuntu right now, writing this post.

Only 10 steps to get wifi working, all manual, and just a PITA. Granted it took me about an hour to patch together 18 different ways to get it to work..

Now I know why people use Mac and Windows. There is now way regular users are going to put up with that. Its like having to turn a crank to get your engine in your car to start. Just ain’t going to happen. Maybe in version 9 :)

links for 2008-04-25

Ruby on Rails and MySql .. on Windows Vista

So, this evening I got the urge to get Ruby on Rails working on Vista, with MySql. I haven’t done much with RoR, but figured I would give it a go. I have this test hosting account that has RoR hosting, so that is what got me somewhat motivated…anyway’s, on with the show.

 

Install Ruby

Installing Ruby is pretty easy. You can follow the tutorial pretty much step by step from the rubyonrails.org site, except it is tailored to *nix machines (Mac, ) as far as paths and stuff..

1) Download and install ruby..(http://www.rubyonrails.org/down)

2) get RubyGems, run ruby setup.rb

3) Get rails:…. gem install rails –include-dependencies

Create Application

At the command prompt:

rails c:\rails\blog

cd rails\blog

ruby script/server

test it on http://localhost:3000

if all is well, you will see a cool welcome screen..

Now.. lets actually start making our blog app by generating a controller..(remember , you need to call “ruby” before executing these scripts.. in Mac, etc you don’t have to)

ruby script/generate controller Blog

Then edit your blog_controller.rb and add some code:

class BlogController < ApplicationController
    def index
        render :text => “Hello World!”
    end
end

try it (http://localhost:3000/blog).. whoops.. error?

no such file to load — sqlite3

check under your app dir (c:\rails\blog\) your config\database.yml

it is set to sqllite.. we need to get MySql installed and configured

Install MySql (5.0.51a)

This is a whole nother debacle. MySql doesn’t really work right on Vista.

download MySql (http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-essential-5.0.51a-win32.msi/from/pick#mirrors), install it

you will notice.. the config assistant doesn’t run at the end..

Configure It, Hack It, Swear At It

First, in the MySql/bin directory, set both the MySql config assistant and the mysqld-nt.exe to run in XP Sp2 compatibility mode, and run as administrator (this will
allow the service to start once the config assistant is done, once we hack to run anyway’s)

In your application logs in event viewer you will see

Activation context generation failed for “C:\Program Files\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe”.
Error in manifest or policy file “C:\Program Files\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe” on line 6.
The value “asAdministrator” of attribute “level” in element “urn:schemas--com:asm.v1^requestedPrivileges” is invalid.

Nice..

I guess older version work, but 5.0.51a doesn’t. You can see in the error, “asAdminstrator”, it should be “requireAdministrator”, we need to hack the exe..

download resource hacker - http://www.angusj.com/resourcehacker/

Open the MySqlInstanceConfig.exe in Reshack, ctrl+f, search for “asAdministrator”, change to “requireAdministrator” save and compile the exe over the old one..

Whoo hoo! The config assistant runs!

Basically the defaults, except I chose

“multilingual” on the character set screen,

and checked the “Include Bin Directory in Windows PATH” box on the Windows Options Screen

and - setup a root password on the security screen!

after it is all done, I like to secure my local machine, go to the my.ini in your MySql directory, and under the [mysqld] add

bind-address=127.0.0.1

so only local apps can connect..

Test MySql by opening a cmd prompt,

mysql -h localhost -u root -p

hit enter, it will ask for a password , and you should be able to login

Configure MySql For Our App

login to MySql using the cmd above..then

CREATE DATABASE blog;
CREATE USER ‘blog’@'localhost’ IDENTIFIED BY ‘blog’;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON blog.* TO ‘blog’@'localhost’;
FLUSH PRIVILEGES;

quit

Now we have a database called “blog” a user called “blog” with password “blog”

We need to tie Ruby to MySql now…

run..

gem install mysql

now, you probably have your mysql directory in your path, but since you need to restart your machine or explorer for new paths to show up, it doesn’t work yet..
so we need to make sure we do that, otherwise, if you try hitting http://localhost:3000/blog you will get a libmysql.dll error popup. I just killed explorer.exe and
start->run explorer in task manager, and then hit http://localhost:3000/blog again and saw the “hello world”

Yesssss… it works. Now , for the fun stuff, actually coding and creating tables, and more!!!!

links for 2008-04-23

Windows Vista vs. Windows XP Debate. Who Wins?

I have been using ’s since it came out RTM, Oct 30 2006. I had it on a Dell desktop, which worked fine. Some driver issues before January 2007, but it still worked. I have had it on my main Dell laptop since May 2007. I use this laptop for work (read: Visual Studio 2005, 2008, Server, Office 2007 etc, etc)

I started using XP the same way since it came out in 2001. Even though, at work, I was forced to use 98/2000 for a while, but I had XP running at home, and ran it all they way up till I installed Vista fresh.

Now XP SP0, was very buggy, driver issues. Same with Windows 2000, SP1 came out and a lot of issues were fixed and it was more stable, yet insecure. SP2 fixed most of the big problems and it was very stable, mature OS, and now SP3 is RTM which adds a few hidden features, as well as all the security patches since SP2. Good deal, yeah, XP is stable, mature and works. Guess what? So is UNIX. It doesn’t mean we want to use it on our machines.

Vista is the new OS in town from , and it works just fine. Great almost. Yeah, you heard me right. It works, it doesn’t suck, and yeah, it is better than XP.

Anyone who says otherwise either

a) Doesn’t know how to setup and work Windows

b) has hardware that they can’t get working

c) has an OEM machine full of bloatware slowing it down

d) doesn’t know how to tweak a machine for performance.

e) they haven’t used Vista (because of work reasons or whatever)

Yes, XP works, it works well, for people running Compaq Pesarios or HP machines that are 5-6+ years old. It works well for geeks who really don’t know how to work Windows. It works well for Mac people that need Windows every now and then.

But Vista, just works. My desktop was purchased in Nov 2005. 2 GB of ram. Vista works like a champ. Laptop in May 2007, once again, runs like a champ. Even my with 1GB runs Vista very well using Apple’s Boot Camp.

Vista IS more secure. You can run it without added bloat of an antivirus/spyware in my opinion. And if you are behind a router, you don’t need a firewall. Now, in XP’s case.. you probably need all three, just because XP is more vulnerable, and when by chance it does get hit by malware, it makes it MUCH harder to get it off XP (I know from helping people) compared to Vista.  Vista has built in tools to identify rouge programs, processes, and things that just shouldn’t be there. It gives you more insight into what is going on - the control panel has tons of options to monitor everything, and, Vista is locked down by default.

Yes UAC is a pain. I disable it, I am a power user. You don’t even need to be a power user, just a smart user. Don’t install crazy things, use Firefox, things like that.

I have been using Mac OS 10.4 and 10.5 now for about 6 months. It is OK, it works, depending on what you want to do. If I wasn’t a Windows developer, I could get by on Mac. I could get by on (I have used it on and off for 8 or so years). But could an average user get by on ? No. That is why will never become mainstream for end users - it is too difficult. Even Mac/Windows (and pssst ) geek’s give up on because it is just too damn non-user friendly sometimes. No, I shouldn’t have to recompile my kernel to get wireless working. No, I shouldn’t have to edit config files ANYWHERE to change settings, not as an end user. As a power user, yea, that’s fine.

Back to XP vs. Vista - the petition to keep XP alive is just like trying to keep VB6 alive - it will always fail. VB is superior to VB6, Vista is superior to XP - it just is. Vista MCE is much better than MCE 2005, just a ton more options and features, and it works, I could just keep going on and on listing feature comparisons, but it isn’t worth it.

I can say from experience, that Vista wins this war with XP, and until someone can convince me, that is how I roll :)

FriendFeed, Pownce, Twitter, et al - And Why Twitter Is The #1 Service (Even though it is down a lot)

The A-listers. The are the people who just talk about themselves. The A-Listers on the Internet. The A-listers mostly talk to the just the A-listers. They all use every new service that has come out and claim it is the next big thing. Yes, some services are good, some not so good. They seem to miss points on things though. It is almost like the MSM. They don’t catch on to the good things till after the bloggers been talking about things for a while.

The a-listers, they catch on to things, but they get so caught up in everything they don’t step back and take a look at a service (Facebook for instance - for a good two months it was Facebook this, Facebook that, even after tons of people were using it and praising it, a-listers then all of a sudden “discovered” Facebook and it was glorious, now, people still using it, but the a-listers have moved on to new and shiner things aka FriendFeed)

Twitter seemed to pick up steam, and it is good, but can get overwhelming. I am ashamed to admit it, but I do like Pownce better, the ability to put files up is just stellar, which Twitter doesn’t have.

FriendFeed is like a super twitter almost, where it aggregates all these services (Twitter, Blog, Flickr, and more)

What ends up happening though is duplication. Ugh. So I subscribe to you on Twitter - cool, then Pownce - cool, Next, Facebook, alright. But the problem is, you use a tool that posts to all 3 (Plaxo pulse, SocialThing, etc, etc) - so what happens? I get the same update in 3 places - not cool. Duplication.

Then, I get your FriendFeed, which is duplication AGAIN of all that stuff. Yikes.

Now all these sites have web interfaces, which are nice. Some have desktop apps, and more and more desktop apps are coming out. So you end up having 3-4 desktop apps for all these services (reminds me of ICQ, Yahoo Messenger, Windows Live Messenger, AIM, Google Talk) - WTF huh? Are we going backwards?

Using the iPhone, you can get to mobile versions of Twitter, Pownce, Facebook, FriendFeed, etc, and its all good, yet … Duplication.

Personally, I like setting up Twitter in my Google Talk (I’m really using Pidgin). Then if I want to be apart of the conversation, I send “on” and it turns on updates, it comes through like an IM, and when it gets overbearing, I just type “off” and they are quiet, and I don’t miss anything.

Pownce has a third party tool, pownceaim, but it really lacks something, its too chatty, and handles auto replies bad.

But, overall, why is Twitter #1? Well, this is why.

You can TEXT your status to Twitter from your phone!

You can get TEXT’s of updates to your phone.

These other services lack in this area. Facebook has something similar but it doesn’t even work for T-Mobile.

Why do these other services lack the SMS feature? One word. Money.

They don’t want to pay for a short code (which is upwards of 5000 a year last time I was looking) to be able to handle text messages. Twitter has paid up for theirs, and I think that is the best part about Twitter, I can update my friends and followers just by texting, which is cool when you are not by the computer.

The blogosphere is rampant with “twitter replacements” this week since twitter has had some downtime, but no matter which you pick, it will never beat Twitter until they accept TXT, IM, and Web, and Other API built program updates - that is the killer feature.. It seems that most of the a-listers don’t realize that.