Experimental Space

CSS, .Net, XHTML, flash, flex and general web development information


Error when trying to install full Visual Studio : You must uninstall all the pre-release products in a specific order before you can continue with setup

If you had been participating in the Beta program and once expired want to install the full 2008 you might come across this error. The dialog box will tell you which programs / components it wants you to delete before allowing you to install, however sometimes you won’t be able to find them in add/remove programs. Before you try what I originally did and delete nearly everything, most of which didn’t need to be deleted, try these steps:

1. Download msiinv.zip
2. Extract the contents of msiinv.zip to the folder c:\msiinv on your system
3. Click on the Start menu, choose Run, type cmd and click OK
4. Run c:\msiinv\msiinv.exe -p > c:\msiinv_output.txt
5. Open the msiinv_output.txt document and search for that damn program you hadn’t been able to find
6. Grab it’s program code which will look something like this: {90120000-0021-0000-0000-0000545446}
7. Open command prompt and run this line with your product code instead of the one I’ve used: Msiexec /x {90120000-0021-0000-0000-0000545446}
8. Repeat 6 & 7 for each of the programs you needed to uninstall
9. Run the VS 2008 installer again and you should be alright

If luck just isn’t going your way and it still isn’t working, try this link for further ideas:
http://blogs.msdn.com/varungupta/…..

Sorting Gridview (Get it working quick!)

There are lots of references out there for getting a sortable gridview up, however I feel each of them are missing certain bits of information which make them incomplete. I ended up having to use three different references before I could get mine working!

Firstly, the stuff you are here for, the complete code to get a sortable gridview up and working! Below the code are the details you may/may not want to be bothered with.

.aspx.cs file

using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
private string _connectionString;
private SqlConnection _conn;
private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gvSortable.DataSource = getData();
gvSortable.DataBind();
}
}

private DataSet getData()
{
_connectionString = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
_conn = new SqlConnection(_connectionString);
SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM tbl_user", _conn);

DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}

public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;

return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}

protected void sortGv(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;

if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, DESCENDING);
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, ASCENDING);
}
}

private void SortGridView(string sortExpression, string direction)
{
DataTable dt = getData().Tables[0];
DataView dv = new DataView(dt);

dv.Sort = sortExpression + direction;
gvSortable.DataSource = dv;
gvSortable.DataBind();
}
}

.aspx file

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sorting Gridview</title>
</head>
<body>
<form id="form1" runat="server">

<asp:GridView ID="gvSortable" runat="server" Width="100"
AutoGenerateColumns="false"
AllowSorting="true" OnSorting="sortGv">
<Columns>
<asp:boundfield DataField="user_id" HeaderText="Id" SortExpression="user_id" />
<asp:boundfield DataField="name" HeaderText="Name" SortExpression="name" />
<asp:boundfield DataField="age" HeaderText="Age" SortExpression="age" />
</Columns>

</asp:GridView>

</form>
</body>
</html>

Add into the webconfig

<connectionStrings>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer" connectionString="Data Source=YOUR_SERVER_URL_HERE;Initial Catalog=YOUR_DB_NAME;Persist Security Info=True;User ID=YOUR_USER_NAME;Password=YOUR_PASSWORD;" providerName="System.Data.SqlClient"/>
</connectionStrings>

If you stick all of this code into your project and have a table (tbl_user) with user_id (int), name (varchar) and age (int) then your gridview will be up and working already!

You can choose to divert from the above and go with different options, but for seeing it working the code above is all that you need.

I’m going to revisit this post later to add in some options and comments however for now I have to go finish the project that I needed this sortable gridview for in the first place!

Change database owner in SQL server
(single and multiple items)

Changing a single table owner:

Exec sp_changeobjectowner ‘dbo12323.my_table’,’dbo’

dbo12323 = make this whatever the table currently has as the db owner
dbo = the new db owner

Changing multiple items owners:

SELECT * from sysobjects where uid = user_id(’UseNAme’)
declare @Return int
exec @Return = sp_configure ‘allow updates’, ‘1′
SELECT @Return as ‘Returned Code’
GO
reconfigure WITH OVERRIDE
GO
DECLARE @Rows int, @Error int
BEGIN TRANSACTION
update sysobjects set uid = user_id(’dbo’) where uid = user_id(’UseNAme’)
SELECT @Error = @@Error, @Rows = @@RowCount
SELECT @Rows as ‘#Rows’
IF @Rows > 0
BEGIN
SELECT @Rows AS ‘#Rows’
COMMIT TRANSACTION
END
else
BEGIN
SELECT @Error AS ‘Error #’
ROLLBACK TRANSACTION
END

exec sp_configure ‘allow updates’, ‘0′
reconfigure WITH OVERRIDE
go

Babbel - Learn Italian easily in this flex based environment

I’ve ’started’ to learn several different languages, all ending up in the same place that I didn’t want to spend the time or money taking classes at a school or a lot of money on a set of training-up cd’s. Recently I’ve taken to learning Italian and started by purchasing a rather in-expensive cd from Earworms (warning, the site is not high on the ‘pretty’ scale) whose method actually works really well. It combines the learning experience with a base of music, the same concept as putting the alphabet to a tune to help it stick in your mind.


As of yesterday however, I discovered Babbel.com, a flex based (+1 point) online language learning tool (+1 point) that is free!(+10 points!!) I registered and had a play through two of ‘packages’ and found the user-experience and ability to learn from it to be excellent. They start off by teaching you single words, which are each associated to an image, they then eventually go on to teach you to memorise them and learn to understand them when spoken within phrases. By the end I was very pleasantly surprised at how much I got through and how much was easily retained into memory. They also marked one of my finished exercise packages as needing a refresher in 4 days time, which I think is great to keep you interested and remembering previous lessons. So there’s my bit raving about how great it is for learning a new language, which isn’t just available for Italian either, but so far it also has German, French and Spanish.

I’m quite pleased to see it’s been created with Flex. It’s allowed them to create a fluid learning step-through environment, making it easy to learn the language. It’s also good to see that they’ve made it really simple for the community to contribute to it. On the home page, for example, there is an area of phrases that require images, and you as a user can click one of these phrases and choose to upload an image that you believe describes this phrase best. You can also mark images that others have uploaded as good/bad as you go through the exercises, although what effect that ultimately has on the image you’ve marked I’m not quite sure yet. All in all I still have to have a thorough play in it, but it is by far the best tool I have ever used for learning a language and I highly recommend you give it a try as well.

Ciao!

I’m a mac girl

Mac girlOh yes, I’ve got a MacBook Pro and am immensely proud of it as well. As a new mac user I was (and still am) noticing constant ‘attention to detail’ bits that make using a computer ‘fun’ again. Ok, so that sounds really cheese but it’s true! Little things like when it’s too dark the keyboard lights up (ok, I might have got a wee bit over excitable at that one than I should have) or how nice most installations are comparatively to Windows. The initial drawback is having to experience the humbling effect it has when you can’t figure out what should be the simplest tasks, the ones that you laugh at your mom for when she gets completely lost, I am now my mom (to mom: sorry for the reference).

So after the first 2 hours playing with Photo Booth I finally was ready to put the intriguing effects away and get some programs on so I could actually use it for development. I had / decided to go in search of a few different programs than normal to suit the mac environment.

Adium - An excellent IM client for MacFirstly, of course, was an instant messaging system. I ended up installing Adium and seems to be working out just fine so far. It has most of the features you’d expect in a typical IM client and it also allows for multiple email addresses to be bundled and controlled at once.

I also really needed a remote desktop client to access our Windows servers at work and found and would highly recommend one named CoRD. So far I’ve found this program to be excellent, allows for connections to be saved and easily connected to, multiple connections at once and generally well provide a well organised system for managing remote access to our Windows servers.

I do quite a bit of .net development so it led to a bit of a problem in that you can’t get a version of visual studio for Mac (yet). A solution I’ve found and I’m sure many of you are familiar with already is Parallels - An excellent VM allowing you to use Windows programs on your MacParallels. A virtual machine that allows me to set up Windows and run the programs which I otherwise couldn’t have running off the Mac. I’ve read though a lot of the documentation and can’t seem to find if you are supposed to download all of the windows updates and install anti-virus as if it was a completely separate machine so if someone has some advice on this it would be much appreciated. At any rate I have decided to take the safest route for now and get all the updates and install Clamwin on the VM, a free anti-virus for Windows.

I still have to sort a few other programs that I’m going to need but I’m rolling along nicely now
Does anyone know of a good Mac program that works well with Exchange? Mail just isn’t cutting it and prefers to spaz out then keep a constant and accurate connection with my new emails…I blame exchange (I love my Mac, it can do no wrong)

“I’m not hungry when I listen to techno”
- Flash on the Beach 2007

I love flash conferences, the ones I’ve been to have always had such an excellent selection of speakers and the general atmosphere is so lively and friendly (ok, so maybe not so lively first thing after a disco-styley party, but still).

The speakers I had the pleasure of seeing were:
Erik Natzke
Joshua Davis
Robert Hodgin
Brendan Dawes
Craig Swann
Carlos Ulloa
Hoss Gifford
Aral Balkan
Branden Hall
Grant Skinner
Keith Peters
Tink
Jared Tarbell
Ted Patrick
André Michelle

…and a little bit of Mario Klingemann at the 20 minute / 3 speaker session that they arranged last minute.

If you want to see what each speaker had to say, visit Dan’s blog cause I just snuck a peek over his shoulder to see him writing nice little details about each session we saw, so I’ll won’t go much into that and actually get some sleep while he does all the extra bits! Woohoo!!

But from creating insanely beautiful globes of light moving to audio created straight from numbers and code you couldn’t have been disappointed or uninspired.

My favourite quote from all of the FOTB’s sessions would have to be André’s answer to overrunning into lunch time and when being asked to wrap it up replied with “I’m not hungy when I listen to techno”. Queue well deserved applause. :D

Already looking forward to the next flash conference, and hopefully inbetween now and then I’ve actually sat myself down and put some of what I’ve learned into practice.

Import CSV to SQL Server Database

Quick steps to importing a csv to a sql server database. There are a couple first steps incase you have an existing database that you should make a backup copy of first or you can skip right to step number 3 which highlights the import itself.

1. Creating a backup of existing table

The code to take a table and back it up in case you do something wrong!

SELECT *
INTO tbl_mytable20070110
FROM tbl_mytable

TRUNCATE TABLE tbl_mytable;

That will take all of your existing table data and put it in a safe backup file. The truncate function then erases all of your tbl_mytable data, ready for the new data to be entered.

2. Conforming the CSV to date compliancy

Ensure the dates of your csv are in yyyy-mm-dd format to avoid any global date format issues.

3. Import the CSV data to the SQL database

  • Open SQL server and right click on the database’s ‘table’ section.
  • Choose ‘All Tasks > Import Data > Next’
  • Choose ‘Text’ from the drop down as the import file type and then browse to the location of your CSV file.
  • Click for larger example of choosing text

  • Ensure ‘delimited’ option is chose and that ‘first row has column names’ is ticked. Hit next
  • Click for larger example of choosing file format

  • Choose ‘Comma delimited’ and hit next.
  • For the destination source, make sure ‘Microsoft OLE DB Provider for SQL Server’ is chosen. I used the SQL server authentication. Choose the Database you wish to import the data too and hit next.
  • Click for larger example of choosing destination

  • In the ‘source tables and views’ window, select ‘destination’ and choose the tbl_mytable that you will be importing the data to.
  • Click ‘transform’ (the … button)
  • Ensure that all of the ‘Source’ items correctly match the ‘Destination’. Change as necessary.
  • Click for larger example of column mapping

  • Un-tick ‘Enable identity insert’ and hit OK.
  • Choose ‘run immediately’ if not already chosen and hit next and then finish.

Now this is the way that some CSV imports will work, you may have to adjust if you do not use column names in your excel/CSV document for example.

Growing from seeds : Part two…

Seeds in warm water overnight to encourage germination If you’ve read part one of “Growing from seeds” I’m sure you’ve been left cliff-hanging wondering what has happened to the seeds since their overnight warm water bath! Ok, so maybe not quite cliff-hanging but here’s the end to the seed planting opening scene nonetheless.

The sweetpeas and the lupins experienced a nice warm water bath over night to encourage germination, so in the morning I positioned myself in the usual ‘rainy-day, dry porch’ spot and started putting the seeds into the propagator. Sweet pea seeds in the propagator before covering with a layer of compost I’ve been using general purpose compost, which indications on the bag it is ideal for baskets, cuttings and seeds. I’ve recorded which colour sweetpea seeds were put which cells as I’m curious to see if it impacts which colour they ultimately grow as. I had yellow, brown and black seeds. Hopefully we’ll see soon!

Both of the propagators are now taking up the spare room’s windowsill and they all have different germination expectancy dates, with the soonest being 10 days (sweet peas) so hopefully in 10 days times I’ll be seeing some green work its way out from the compost.

I found a good reference guide here as well: (For sweetpeas)

Growing from seeds

Ok, this is my first attempt at growing from seeds. I’ve read up on germination and stratification and all sorts of general tips on growing from seeds… so I should be fine right? Dragged Dan out again earlier today to buy the seeds (it’s a rainy day and I was garden-eager but couldn’t do anything outside today, damn rain), so we went in search of Haskin’s near Ferndown. It’s a nice garden centre, quite big (not as big as Cadbury’s near Bristol) and has a good variety of plants, bulbs, seeds and garden tools. After being very tempted to just spend the extra money and buy the already grown plants we wandered over to the seed section. Firstly, are seed sections always terribly un-organised? Why don’t they just put them in sections, Annuals in one, Perrenials in another and then maybe alphabetically? Oh well…

So we rumaged through the different seeds, seeing which ones we could plant now and give me sprouts before I got bored and dumped them in the bin. We came home with four different seed packets and the ‘Mega value budget propagation 3-pack’, oh yes, no expense spared here! The seed packages consist of Canterbury Bells - Part of the Campanula mix of seedsCampanula (a mix of blue and white rockery plants), Achillea ‘Summer Berries’ hybrid, perennial sweet pea and some lupin ‘gallery mix’ seeds. I found myself a nice dry bit of ground under the porch to sit on and set about putting the compost in the propagator and then planting the Campanula and the Achillea seeds, the other two flower seeds have to be soaked in warm water overnight before being sowed apparently. I’m now thinking, yet again, that someone should really create some sort of microwavable plant. Put your seeds in and 30 seconds later, whala, big thick plant with gorgeous flowers… would be nice for someone as impatient as me…

Seeds from Campanula Rockery Mix and Achillea Summer Berries Hybrid at Day 1

Here are the seeds as they are now. Sitting happily in the windowsill, in a propagator (I took the plastic lid off for the picture) to keep the moisture in. I expect I’ll be happier with the Campanula mix as it takes 14-28 days to germinate while the Achillea can take 1-3 months. I’ll be checking them everyday to make sure the compost is moist but not wet, using a spray bottle to keep from drowning them and in turn causing them to mold.

The Space Available

We’ve just bought our first house earlier this year and it has a small fenced off space out the back. It’s about 15ft by 15ft with a diagonal fence slicing the farthest left corner off… so there’s not a ton of space to work with, but it’s a very sweet little space all the same.

Our garden space

The ground is shingled (nightmare for heels AND plants alike) but container plants have been working quite well this far as the sun covers at least half of the garden for most of the day. We’ve so far stuck a small four chaired table in the middle of it and some half-moon baskets along the fence.

Our garden space

My very patient man (thanks Dan x) has been repeatedly dragged off to garden centres, B&Q and generally anywhere where I’ve seen plants sitting outside with price tags on. At the beginning we bought a bunch of annuals for the baskets, tempting me in with their bright colours and low maintenance demands. I’m not so much of a fan of them anymore.

The basket of shame

They started off well but I wasn’t particularly educated on how big each would grow, to excited at the prospect of having nice new flowers and colour in the garden, and so I didn’t bother to find out if they’d grow straight up or wander off to the side like vines… two of the three baskets are alright as I just planted the plain marigold plants in them, but the third is doing a thing all of its own. The geraniums in it have been and gone (too bad, I liked those ones..), leaving a brown stick standing proudly in the air, the flowers on the right have decided they’d like to turn into a bush in mid-air, protruding far beyond any of the other flowers and the red flowers which I’ve completely forgotten the name of at the moment seemed to bloom for a day and then rot into brown droopy messes.

On the up side I’ve been growing a few trees, and I’m quite proud of them so far. One is my tiny but ever growing ‘Christmas Tree’ who was originally received through the post as a gift from a printing company that my boyfriend’s company uses. For some reason though he seems to have stopped growing upwards and would much more prefer to continue getting wider… I keep meaning to research that and see why that is. The other tree is my Bay tree. Unfortunately when I was getting the original cutting from my boyfriends mom I heard her incorrectly and thought she had said ‘Bailey Tree’ …. that would have been nice, sadly there is no such thing as a Bailey’s tree so I will have to continue to buy the heavenly drink from the off-licence. It’s been growing nicely though, the Bay tree, I even started marking its progress on its support stick every Sunday, it’s been doing about an inch to an inch and a half each week.

The other plant I have is a recent addition (also from Dan’s mom) is a tomato plant. It had three flowers on it when I first put it in the garden… two of which I sadly found had fell off because of the torrential rain England had a month ago, the third flower, to my further dismay, fell off when I touched it. Further on in the week I had just finished a load of laundry and Dan was taking it outside to set it up in the sun when the clothes horse snapped under the weight off the wet clothes, falling directly onto the tomato plant. The tomato plant now has one stem and no branches, although it’s been a couple of weeks now and new flowers have started to bloom… we may get tomatoes yet!