The other day, I got an email from Twitter announcing that someone new is following me.
SIOOMA! (Siooma) is now following your updates on Twitter.
Check out SIOOMA!’s profile here:
You may follow SIOOMA! as well by clicking on the “follow” button.
If you are on Twitter, then you have seen that type of message before. It means that a user with the handle “Siooma” is now following my site. I took a peek at Siooma’s Twitter page and sure enough it lists a Fake Steve Jobs blog post as the home page. Siooma is one of the FSJ’s favorite sayings, read that blog post for the full definition – I don’t want to spoil the fun by taking it out of context. I read some of Siooma’s previous “tweet” and I don’t think it’s the real deal. They were sort of FSJ-like, but they were missing the sharp edge that a real FSJ post would have. Part of what makes FSJ so fun to read is how close to the truth he appears to get at.
If you do a search on Twitter for FSJ, you get a couple of hits. None of them are the authentic FSJ. His Twitter handle is FakeSteveTwit, which oddly enough doesn’t come up in that Twitter search. Doing a parody of a famous person can be entertaining, the “real” Fake Steve Jobs is both entertaining and informative. He does more than a Mad Magazine style of parody, FSJ covers actual Apple events and applies the FSJ twist to the analysis. The man behind the satire, Daniel Lyons, is a real journalist and does a good job covering the stock options backdating scandal that involved the real Steve Jobs a while back. When you read FSJ, you wonder how to close he gets to the actual Steve Jobs and does the real Steve Jobs ever wish he could say some of things that the FSJ says. None of the FSJ clones on Twitter have that magic. Even if they could, it would hard to produce that in 140 character limit of a Twitter post.
Siooma is welcome to follow my Twitter feed, but I’m not planning on reciprocating. FSJ has but some serious time and effort in his blog. The FSJ wannabees are just riding on his coattails. When they list his blog as their web site, it comes off that they are pretending to be the FSJ. Lyons does not have a monopoly on being a fake Steve Jobs, but it’s not right to claim his site as your own. If Siooma and the other clones want to be another FSJ, then they should get their own FSJ blogs and develop their own personas.
We have guidelines for the naming conventions of our database objects. It’s pretty much the common pattern you see all over the place. For example, we use the following convention for default constraints:
DF_TableName_ColumnName, such as DF_Student_School
Pinal Dave has great set of database coding standards on his site, more in-depth than ours actually. We have found that using coding standards makes the database schema easier to read and makes it easier to perform schema updates. If you don’t explicitly name a default, SQL Server will name it for you. And it wont be pretty or consistent across databases. We have our own tool for pushing out schema updates to our customers and it assumes the object names will be the same for each database.
When we submit our schema updates internally, we usually catch any deviation from our naming conventions. It’s not a perfect process and every now and then, something slips through the cracks. We then correct the schema update to use the appropriate naming convention. if we have been using the schema changes internally, we may have some databases that don’t match the published schema for the object names. When that happens, we run a simple T-SQL script that cleans house. The following T-SQL will scan the database for default constraints that do not match our naming conventions and rename the ones that it finds.
DECLARE @OldName nvarchar(512)
DECLARE @NewName nvarchar(512)
DECLARE @OldToNewName nvarchar(512)
-- We use a table variable to contain the list of objects to be renamed.
DECLARE @FixSchema TABLE(
sys_OldName [sysname] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
sys_NewName [sysname] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
-- Get the list of current column defaults
-- The OldName column represents the current name of the default
-- The NewName column represents the name of the default using
-- our naming convention
INSERT INTO @FixSchema(sys_OldName, sys_NewName)
select o.name AS OldName
,'DF_' + Object_Name(o.parent_obj) + '_' + c.Name AS NewName
FROM sysobjects o
JOIN syscolumns c ON o.parent_obj = c.id AND c.cdefault = o.id
WHERE o.type = 'D'
-- Declare cursor on this table variable to access on the non-compliant
DECLARE AddDrop CURSOR FOR
SELECT sys_OldName, sys_NewName
where sys_OldName <> sys_NewName
-- Loop through the list of defaults where the default name is not
-- strongly typed
INTO @OldName, @NewName
WHILE @@FETCH_STATUS = 0
-- Assenble a T-SQL command that can be executed dynamically
-- to rename the constraint
SELECT @OldToNewName = 'sp_rename ' + QUOTENAME(@OldName,'''') +
', ' + QUOTENAME(@NewName,'''') + ', ' + QUOTENAME('object','''')
-- Print the command to be executed. Useful for seeing
-- what is being done
-- Execute the T-SQL to rename the object. If the EXEC line is
-- commented out, the code will display what would be changed
-- with making any actual changes to the schema
INTO @OldName, @NewName
-- Close and deallocate the cursor
I usually use the INFORMATION_SCHEMA views to peek at the table and column structures. The INFORMATION_SCHEMA.COLUMNS view will tell which columns have default constraints, but not the name of the constraint. In this case I needed to access the sysobjects table to retrieve the name of the constraint. The same type of code can be used to rename other objects like check constraints.