Catch up on stories from the past week (and beyond) at the Slashdot story archive

 



Forgot your password?
typodupeerror
PC Games (Games)

Journal Journal: Chronicle: Playing Diablo II (2) 1

Still playing Diablo II. Couldn't do the Ancients or Baal without points, so i got help. I'm at level 36. It's kind of fun, but i'm not sure i want to start Nightmare yet. I'm getting good XP near the end of Normal.

The Rogue is at level 34, though she could probably use some better hardware. I need a mule for all my precious stones, runes, and set pieces. I gave up on storing jewels. Problem is, i only have one account, and to logon to Battle.Net twice, i'd need a second Diablo II and LoD CD key. They sell them for $20 each, but a mule really isn't worth $40 to me. $10 maybe. Why does Blizzard still charge such a high price for an old game?

Anyway, when i logon on Sunday, i may play for a while, the rest of the week, is for a quick run if i logon. Or so it just worked out the past couple weeks.

Patch 1.13 is in beta. I may have to check that out.

PC Games (Games)

Journal Journal: Verbiage: Changes i'd like to make to SQL 2

Add * - col to get everything *but* a specific COLUMN
Standardize order for a TABLE's COLUMNs
Add pseudo-column to refer to a COLUMN by order
Add pseudo-column refer to the PK
Add pseudo-column refer to the FK in a join
Deprecate SELECT clause from EXISTS()
Make FROM keyword optional in an EXISTS()
Deprecate "ANSI-style outer joins"
Add an aggregate for string concatination
(Change UNION to mean UNION ALL, remove UNION ALL)
Add UNION DISTINCT
Add WITH KEY CHECKING clause INSERT and UPDATE

Add * - col to get everything *but* a specific COLUMN

* is used in ad-hoc queries. We want to see a few COLUMN but don;t care to specify which ones. * is just fine, except when one of those COLUMNs in a LOB or anything else that just goes too wide. For convenience, * - col1[, col2...] should work.

Standardize order for a TABLE's COLUMNs.

DBs store COLUMNs in order. A INSERT without a COLUMN specifier uses it. SELECT * uses it. It just isn't official. Good for ad-hoc queries.

Add pseudo-column to refer to a COLUMN by order

A UNION's ORDER BY can use a number, as a COLUMN name might not exist. Why not allow this for all ORDER BYs? The ORDER BY must happen after the SELECT because that's the data it works with, yet sometimes we have to repeat some complex syntax. Also, this would remove half the reason for dynamic SQL.

COL[UMN]() ought to do it, because COLUMN is already a keyword (in ALTER TABLE). Though, it might be good to start all keywords with *, so *(1) (as opposed to * 1 which means to multiple by 1) or *COL(1) might be good candidates. Or even a SQL-like SELECT COLUMN 1. But that just seems wrong because it's not refering to the COLUMN itself as in ALTER TABLE.

For example: SELECT COLUMN(1), COL(42) FROM ...

Add pseudo-column refer to the PK

How often during diagnostics do we want to grab the data associated with a PK? Often enough, i say.

For example: SELECT * FROM Moo WHERE *PK = 42;

Add pseudo-column refer to the FK in a join

Joins are usually on the FK. Usually the whole FK. This would be a convenience. It'd also make it easier to read the query and should an FK change, no reason to change the queries.

This is somewhat similar to the FK definition's REFERENCE clause, which refers to the target's PK by default.

For example: WHERE tab1.*FK = tab2.*FK

Deprecate SELECT clause from EXISTS()

SELECT in EXISTS is redundant. It also leads to SELECT 1 vs SELECT * debates, and confuses newcomers. Just get rid of it.

Make FROM keyword optional in an EXISTS()

An EXISTS clause must have a FROM (unless a pseudo-TABLE can be SELECTed which is pointless in an EXISTS) clause, and it is the first useful thing in the EXISTS, hence FROM is implied. Don't remove it, because it is implied, allow it to be explicit. It's also help readability to have it.

Deprecate "ANSI-style outer joins"

ANSI style joins are ugly, confusing, and wrong.

Ugly: clutters the FROM clause; adds a new ON keyword; forces all TABLE's in the ON clause to use the ANSI style as well

Confusing: nested joins are hard to follow; separates the join clause from other WHERE clauses

Wrong: FROM includes, WHERE exclude. a join exlcudes, therefore it belongs in the WHERE clause; standardizes RIGHT and LEFT as keywords which make little sense (a join should not refer to geography in the statement itself); standardize OUTER and INNER which are common terms but do not have any real relevance to the type of join.

When i first learnt SQL, i read Understanding SQL. He uses inner and outer as standard aliases for correlated sub-queries (that self-join). That make a lot of sense. Same TABLE, one is in the inner context, the other in the outer context. Now those are keywords and i have to stop using them, very annoying. And they are keywords for something that has nothing to do with being inner or outer.

Oracle's approach was good. Adding (+) to the end of a COLUMN reference made it a super-COLUMN, it that it had NULLs when no match was found. Pro: Attached to COLUMN itself which is what ultimately returns the NULL for a non-match. Con: It's the join that is special, not the COLUMN.

SQL Server wasn't bad with *= and =* making the equals be special, in that it didn't limit it to an exact match. Pro: It's the join clause that was marked as special, intuitive. Con it's the COLUMN that returns NULL, not the join.

Mixing the two: COL(+) *= COL is redundant.

Add an aggregate for string concatination

Following Oracle and SQL Server forums, this is a very common question. How do i aggregate?. There are tips, tricks, custom FUNCTIONs, and the like. The other aggregation FUNCTIONs aggregates and compute, and the compute obviates the aggregated data itself. MIN and MAX works like this, only keeping the current minimum or maximum scalar value. SUM, COUNT, AVG, and the like keep all the VALUEs (supporting DISTINCT as well) but return a new scalar. Concatenation would essentials return everything, just as one value. Perhaps this difference kept it away from being coded.

Delimiter would be any character(s). Have an option to allow keeping or removing the trailing delimiter, whether to delimit NULLs, and the like. Should support DISTINCT.

For example: CONCAT(val, delimiter, option)

(Change UNION to mean UNION ALL, remove UNION ALL)

If i was there when UNION was first implemented, i would have vehemently opposed UNION implying DISTINCT. I have to add a keyword to not do something automagically?? What were they thinking?

Also, many users use UNION when they should be using UNION ALL. Either wondering why DISTINCT was applied, or wasting cycles (DISTINCT is an expensive operation). It just isn't intuitive.

Unfortunately, it's been there for too long. I don't think it could be changed.

Add UNION DISTINCT

If UNION means what UNION ALL means, UNION DISTINCT would be required.

Currently, UNION generates the enitre list, then applies a DISTINCT. In a sense, UNION DISTINCT should remove from the second (the UNIONed) query that which already exists in the first query. It should actually apply DISTINCT to the first query too. If i wanted that, i'd add DISTINCT to the first query. If it doesn't appear in the first query, it should not apply a DISTINCT to the second query. If i wanted that, i'd add DISTINCT to the second query.

I guess if it were up to me, i'd abolish UNION and add a new keyword. APPEND perhaps?

Add WITH KEY CHECKING clause INSERT and UPDATE

When i write stored PROCEDUREs to do INSERTs, i have a "standard" to check the PK and all FKs so the INSERT will not fail. Similarly for UPDATEs where the key changes. That is, use an EXISTS for each KEY. I'd like to see that added.

One, it would (have an option to) allow the rest of the set to go through. Two, it would encourage more people to use it, resulting it more robust code. Three, it would remove alot of clutter. Four, (in the case of a PK or UNIQUE check) it would tell the optimizer that the subquery is not a new TABLE saving wasteful checking time. Five, it would remove the need for a DISTINCT in the SELECT subquery, in a case where the SELECT may pull up duplicates breaking te PK on the second one. DISTINCT is an expensive operation. The DB writer has to check the PK/UNIQUE KEY anyway, why use a wasteful DISTINCT?

PC Games (Games)

Journal Journal: Chronicle: Playing Diablo II 2

I have not been gaming lately, and i have missed it. Recently a kid (late teen) asked for a copy of Diablo II. Realizing how addictive it can be, i suggested that we play it together at my apartment. I have a second computer which i would setup for him, and we'd play together. Alternatively, i said i'd just give him the copy if he really wanted it. I think he's still debating the issue (or just ignoring the complexity).

But why should that stop me? I went ahead and installed Starcraft, Diablo, and Diablo II. I played a one vs one computer a few times as protoss vs terran and lost miserably. Considering i used to be able to handle five computer players, i've lost a lot about the game. And i'm not sure i care to get it back. I was always a horrible player against other people. When playing with friends, noone was allowed to attack me from the side. I still lost each time unless i was on a good team.

I installed Diablo and found that it doesn't support dual monitors. It just crashes unless the second monitor is disabled. I only sort of kind of want to play it especially with the Diablo jerks online.

I installed Diablo II with the expansion without a hitch and got the updates. Copied the MPQs to the installed directory to run without a CD. The graphics are outdated, but i never did play the expansion, so i decided to play. I rolled an eponymous sorceress on US East and usually play with a game name of "no point distrb". To keep out spammers, i limit the levels to exclude level 1. For example, at level 16, i set the range at 14, allowing levels 2-30 to play.

To make it interesting, i'm playing without distributing points for now. Not skill points or attribute points. The sorceress died a few times but survived Andariel without a problem. But the rogue has to be rezzed a few times.

Currently, she's level 16 (iirc) and at act 2. It seems a lot faster this time around.

User Journal

Journal Journal: Verbiage: Agile should be prevented, (Java) coders are bad designers. 10

We are using Yammer a the office. Someone started a thread to promote Agile at the office. When my reply got this long though, i figured i should just post a JE already. I edited my replies slightly.

I responded with: "Ugh, i despise Agile . It's an efficient way to deliver trash to the customer in five easy shipments. And forget the data model, it'll be worse than one designed by a java coder. If anything, we should have a group to make sure Agile stays out of our organization."

Someone challenged my generalization, and asked why coders can't design. I responded:

Why should an experienced developer in any technology not be capable of putting together a good data model? Developers and designers approach things differently. Developers architect, designers design.

Developers work on delivering something that meets the requirements. Designers design a model that supports the requirements. Meeting requirements is a perfect fit, but does not scale. Supporting requirements with a model scales.

Developers tend to work from the inside out. That is, get all the points then draw a big circle around it and call it the "model". Designers design from the outside in, draw a circle around an idea, and then check if it supports the requirements.

In Jungian terms (usually), developers are dominant Ts, Designers are dominant Ns. An NT can do both, but one will always be better, because of preference and training.

Designers tend not to code well. What they do works, but lacks runtime efficiency. Coders tend not to design well. What they do works, but lacks scalability.

Java coders are usually the worst of the bunch, as some schools churn them out with low quality. That is not to say that Java coders are bad coders. But bad coders, today, tend to learn Java. Leaving much room for generalizations.

User Journal

Journal Journal: Chronicle/Verbiage: Eating, craving, and related. 2

Lately, i've been trying not to eat before i get home from the office. That is, only have water (for more than just my 11:30 drink), not quite fasting, but it feels good. When i do get home, i eat nearly right away, and usually snack or eat again before i go to sleep.

This isn't really dieting in the traditional sense. It's that i have more choices--better choices--at home, and meal management from a cost, time, and taste standpoint is increased. Further, it keep me away from snacking, as at home, if i eat, i eat; i don't snack as much. I have a no eating rule outside the kitchen and table area of the dining room, (primarily because of Passover, but it has many side benefits). Not even water. So, i'm stuck in an eating area to eat. Why snack when i can handle the hunger more efficiently? Well, that works most of the time.

This morning i had a craving. So, i ate a piece of hand shmura matzoh (flour and water only, probably baked in a 800-900 degree oven for a few seconds) together with a vitamin, and i was still hungry. Even after a little while. So, i went to the convenience store here at iTek (Ford building) for some licorice. I passed by the potato chips, no craving. I looked at the licorice and imagined eating the Red Vines and the Twizzlers. I sort of wanted the Red Vines, because i was in the mood for their odd flavor, but no real craving. I ended up getting the Twizzlers by default (and because i forgot to check their yoshon status, (i checked now, and they are not listed in the chodosh guide)).

Listening to my cravings has worked well. Though, i sometimes want things for psychological reasons, that is, i have an association with it, but my body does not necessarily want it.

User Journal

Journal Journal: Chronicle: Teenager doesn't know what the walkman was. 8

We were talking about music, and i mentioned the walkman was probably the greatest change in recorded music, in that it made music portable. Others disagreed saying the mp3 player was much bigger. What youngsters. One guy turned to his younger brother (age: 13) and asked him if he even knew what a walkman was. His answer, no.

I'm getting old.

PC Games (Games)

Journal Journal: Chronicle: Debian upgrade broke exim4

Upgraded to Debian lenny last night. Going from stable to stable is a good thing, right?

Well, nope. exim4 is broken right now. The package maintainer for Debian's exim4 decided some time ago to make changes. Well, a lot of people ignored it, so it gives a forced error now.

To add insult to injury, /usr/sbin/update-exim4.conf has the following comment:

# check for left-over DEBCONF strings that may cause installation trouble
# (fix PEBCAK for people who don't accept conffile changes and don't
# read docs)

This is frustrating. I changed the configuration to support a customization. So, using the defaults wasn't an option. The changing are neither trivial nor obvious. And, my mail server does not work now. And this made it into stable.

Currently, i am trying to figure out how to get back to a working version of exim4. I can't just download exim4 because Debian has heavily modified it. So, i need an earlier version of the deb. But which version was i using? I have some searching ahead of me.

In any case, right now i am pretty sure i am dumping exim4. And, if Marc Haber is the maintainer of other packages that i use, i might be dumping Debian in general. I am left aghast that a stable upgrade left my smtp server unworkable with any customization.

Communications

Journal Journal: Verbiage: Mental Maturity (2) 12

In the previous post about mental maturity, an Idealist responded with something like "it's 'we' not 'me'".

While reading John Maxwell's second chapter of an upcoming book, he speaks about maturity

Maturity is the ability to see and act on behalf of others. Immature people don't see things from someone else's point of view. They rarely concern themselves with what's best for others. In many ways, they act like small children.

I think he expresses the Idealist's mental maturity quite well. It's not just being empathic. It's being so empathic that the other is more important.

PC Games (Games)

Journal Journal: Question: Backup & QB rights/ Chronicle: small data recovery 5

A small not-for profit organization recently had someone wipe and resisntall their OS. They backed up files beforehand and tried to reimplement. They ran into two issues:

  1. The ACT! 2005 database they backed up was missing the .ddf file.
  2. They could not figure out how to give a second user read-only access to Quickbooks on another computer.

Eventually, i was called in. Not that i know either of these spplications too well, but when they asked around town for help, apparently, my name kept coming up.

Well, i'm glad to help, so i gave it a shot.

ACT! kept its data in the .dbf file. Ostensibly, the .ddf was structure. A few backups they had were all missing the same file(!) Luckily, the backup from about one year prior had it. It was corrupt though, but the diagnostic tool fixed it. Using the recovered .ddf file with later backups was unsuccessful. So, one year's data lost. Better than the entire decade of data. The non-too-computer-literate director printed up a hard copy of the names and addresses "just in case".

I suggested they hire a kid during the summer to update and add new records from the hard copy while asking about data recovery, and giving a monetary value to the data lost. In the end, the cost of retrieval would have been higher than the value, and a responsible teen was hired to fix it.

I also suggested regular backups, and that they actually test the backups. It was agreed. Shortly thereafter, i was asked if i wanted the job. Heh, i guess i knew that was coming.

Onto Quickbooks. They upgraded to the latest version. One license is something like $200. The secretary and the bookkeeper use the same computer, just at different times. The director likes to have read-only access on his computer.

I figured read-only wouldn't require a full license. I tried setting up a multi-user environment. No good, licenses are required, and it checks that the same person isn't already signed in. Pointing both to the same file in single-user mode is similar, it works separately. I asked in the Intuit forums, and it was pretty much confirmed that it would require a new license. Basically, if they really had it working, i have no idea how. So, they may have to purchase that second license.

For the backup plan, i suggested off-site backup. That works, either at another location or online. The question is which makes sense, if only ACT! and QB need backing up. IIRC, it's about 100 MB.

Now i'm looking for ideas. One, what is a good backup plan? CDs? Internet to a server in another location? online backup?

Two, is there a way to get a second read-only instance of QB without a second license.

Slashdot Top Deals

As the trials of life continue to take their toll, remember that there is always a future in Computer Maintenance. -- National Lampoon, "Deteriorata"

Working...