Friday, March 18, 2005

SQL Server Reporting Services

For the past week or so, I've been exploring SQL Server Reporting Services. My only impression (coming from someone experienced in both Access report writing and Crystal Reports): WOW!

First off, if you have a license to run SQL Server (Standard or Enterprise), then you have the license to install Reporting Services onto your database server. It's now part of the SQL Server package, not a separate application that's licensed by itself.

Having said that, though, the recommended architecture is to have Reporting Services run on its own machine. This way, the report processing does not bog down your [production] database server. The caveat here is that you'll have to pay the boys in Redmond for another SQL Server license.

The product is built upon .NET Web Services. Because of this, you'll need the .NET Framework v1.1 installed, as well as IIS (for ASP.NET) on the reporting server.

If you're brave, or have complicated requirements, then you can perform all report processing via the Web Service. However, for integration with existing [legacy] applications, or to simplify development of new applications, there is a feature called "URL Access". Basically, this provides a hyperlink that links to a web-based report viewer running on the Report Server. The user clicks on the link (which also includes the report path and name), and is taken to the ASP.NET web site where the report is displayed.

Reporting Services offers a subscription feature. Maybe you need a report emailed to you every day detailing activity from the previous day. Set up a subscription for that report, and you'll have emails awaiting every morning. Cool feature!

Even though this is a SQL Server product, don't think that you're limited to just SQL Server databases. Because this is a .NET application, you're actually limited to anything that ADO.NET can get at (which is just about any data sources, including custom ones if you want to do the coding). So, if you need to query that Oracle database that contains your JDE sales data, then go for it!

I don't think that Reporting Services is necessarily a "CrystalReports" killer. Reporting Services does act as a server, so with that in mind, there still could be a use for ActiveReports or CrystalReports. But, I won't be using them anytime soon in my designs!

Saturday, February 26, 2005

New Mersenne Prime Confirmed!

The cat was let out of the bag a little bit early, but it has been confirmed that 2^25964951 - 1 is prime. In binary, this would be a string of numbers containing 25964951 ones. In decimal (base 10), this is a 7816230 digit number.

I say the "cat was let out" because George Woltman (the founder/coordinator/programmer of the GIMPS project) was working to allow the hometown newspaper of the volunteer whose computer found the prime to have an "exclusive" story, including revealing the exponent's value. But, the exponent's value was released by mistake on mersenneforum.org (and it was actually guessed beforehand by examining the Primenet log files).

Article: Mathworld Link

GIMPS homepage: mersenne.org

Congratulations to George and the lucky volunteer!

Tuesday, February 08, 2005

Review: maps.google.com

I stumbled upon Google Maps this morning (after it was slashdotted). First impression: WOW!

It seems to use the same type of client-side JavaScript service code that GMail does. This prevents the need for the browser itself to fetch a new web page with each request. Instead, the service code interacts with a webservice of sorts, and grabs only the data that it needs. This makes the requests lightning fast without bogging down their servers (because the server does not need to serve up redundant code that had already been given to the browser as part of the previous request).

It looks good, seems to be a little more accurate than other mappers (i.e., my home address usually gets plotted in the wrong block, but this at least hit the right block, but still not the exact location), and has a great search built in (i.e., try doing a search for all of the McDonalds in your town, or just put in Mexican, etc).

The sad thing is that right now, Google is still every geek's favorite underdog. But, as they establish more and more dominance on the web, they'll soon grow into another monopoly that people will grow to hate.

Thursday, February 03, 2005

Thank you FoxNews

A big Thank You! to Fox News, the first and so far only major news outlet that I read that actually call Terrorist in Iraq "Terrorists" instead of "Insurgents".

Case in point: I'm perusing the various news websites this morning. One of the top headlines is:

MSNBC: 20 dead as Iraq insurgents launch new attacks
CNN: Insurgents kill 12 Iraqi army recruits
CBSNEWS: 20 Killed By Iraqi Insurgents
ABCNEWS: Insurgents Ramp Up Attacks in Iraq
FOXNEWS: Terrorists Kill 19 in Iraq

Mainstream media in the United States has this fear that actually acknowledging the true nature of those perpetrating violence would somehow validate President Bush's choice to invade Iraq. It's pretty clear that al'Qaeda is running the "insurgency" in Iraq. It is so refreshing to see a news outlet call it what it is.

Monday, January 17, 2005

Geomagnetic Storming

As I write this, the first of two expected CME's has impacted the Earth's magnetic field, and has kicked off a G3 Geomagnetic storm (moderate). Skywatchers should be alert for middle and low-latitude auroras tonight (whenever nighttime is for you) and tomorrow also.

Thursday, January 06, 2005

GB-PVR Plugin Tutorial Released

Here's a tutorial that I put together to explain how to create a simple plugin for GB-PVR from nothing. The tutorial uses Visual Studio.NET 2003, so some parts might not translate to other development environments.

http://prdownloads.sourceforge.net/gbpvrwidgets/PluginTutorial.pdf?download


This will actually evolve into documentation for creating plugins using the Widget Library. But, since the library is not yet ready, I truncated the guide so that it's usable with GB-PVR today.

Tuesday, January 04, 2005

Why Lucas-Lehmer Test Works

A question was asked on Mersenneforum.org about why the Lucas-Lehmer test works. The answer given was basically "You need to study Number Theory for years and years to understand the complexity behind why the test works".

Okay, so that's my tongue-in-cheek summarization, but the thread did get a little heated.

I've done a little work with the Lucas-Lehmer sequence, and have found some surprising relationships to Quadratic Residues. Of course, without the years and years of Number Theory studies, I can't come up with a proof, so I'll never get my name on it. ;-)

Basically, it comes down to the fact that all terms of the Lucas-Lehmer sequence modulo a Mersenne number (Mp = 2^p - 1) must be a quadratic residue of that Mersenne number for it to be a Mersenne Prime. If you hit a term in the LL sequence that is not a QR of Mp, then Mp is composite.

Note: I'll qualify by saying that you need to verify that +/- the LL term must be a QR, because of one of those weird Number Theory things. For example, term 2 of the LL modulo 127 is 67. However, 67 is not a QR of 127. But, 127 - 67 = 60, which is a QR, so the test still passes.

So, here appears to be a necessary condition for primality. But that still does not answer the question of "why".

Well, this is where Number Fields come in handy. I'm no expert on fields, but you don't need to be in order to see how a field behaves.

Quadratic residues of a Mersenne Prime form a field of numbers with exactly (2^(p-1) - 1) elements. Each of these elements, when squared (mod Mp) results in another number in the field. This leads to a beautiful cyclical sub-field of exactly p-1 elements (meaning that the subfield starts to repeat itself every p element).

Here is an example of that sub-field effect starting with 44 modulo 127:

44	31	72	104	21	60	44
31 = 44^2 mod 127; 72 = 31^2 mod 127; etc

This behavior does not always exist with composite numbers, because the prime factors of those numbers somehow interfere with the field's behavior (during the modulo operation, I would guess). You end up with something like the fields for each prime factor overlapping, which distorts the results.

For example, here's two subfields modulo 2047 (a Mersenne composite = 23*89). Each starting number is a QR of 2047, but :
64	2	4	16	256	32	1024	512	128	8	64

36 1296 1076 1221 625 1695 1084 78 1990 1202 1669

Notice that 64's subfield correctly "wraps around" after 11 iterations, but 36 fails to. This shows that some subfields are cyclical, while others aren't (because of that interference effect).

When we continue squaring the subfield modulo 2047, we see that we actually jump into another cyclical subfield of the proper length:


36	1296	1076	1221	625	1695	1084	78	1990	1202	1669	1641	1076
In this case, both 1296 and 1641 are modular square roots of 1076, but the subfield containing 1296 actually turns into the subfield containing 1641. The fact that there are two roots for a QR is not unusual, but these numbers are not +/- the same number, as the roots of a prime's QR would be. The overall result is that the field containing all QR's of a Mersenne composite turns out to contain less than 2^(p-1) - 1 elements. (In this example, think because 36 did not have it's own 11 numbers, it only added 2 numbers to the total field).

So, the LL sequence is related to the same mechanism that causes the beautiful cyclical patterns of the quadratic residue subfields. These patterns only exist modulo prime numbers. Composite numbers cause one subfield to change into another. This same mechanism leads to the LL sequence to fail for composite numbers.

And, of course, I don't have any further explaination for this phenomenon, so you'll need to study Number Theory for a while. ;-)

For reference, here is a breakout for M7 (127 = 2^7 - 1). The field of QR's shown are x^2 % Mp, and are Quadratic Residues because they have modulo square roots (x).

Mp	LL	-LL	x	QR	x	QR

127 4 123 1 1 33 73
14 113 2 4 34 13
67 60 3 9 35 82
42 85 4 16 36 26
111 16 5 25 37 99
--> 0 127 6 36 38 47
125 2 7 49 39 124
2 125 8 64 40 76
2 125 9 81 41 30
2 125 10 100 42 113
2 125 11 121 43 71
2 125 12 17 44 31
2 125 13 42 45 120
2 125 14 69 46 84
2 125 15 98 47 50
16 2 48 18
17 35 49 115
18 70 50 87
19 107 51 61
20 19 52 37
21 60 53 15
22 103 54 122
23 21 55 104
24 68 56 88
25 117 57 74
26 41 58 62
27 94 59 52
28 22 60 44
29 79 61 38
30 11 62 34
31 72 63 32
32 8

Thursday, December 30, 2004

Possible new Mersenne Prime found?

Some guy posted with an Italian email address asking what he should do about his copy of Prime95 beeping and flashing at him. This is something that Prime95 will do if it finds an exponent "p" that passes the Lucas-Lehmer test (indicating that 2^p-1 is prime).

George hasn't heard from him since that posting, so it very well could be a prank or a known bug with small exponents. It would probably be easy enough for George to check which exponent was assigned to his client (since he has already matched the email address to a PrimeNet user), and start the verification process on that exponent.

The last Mersenne prime was discovered in May 2004, and the one before that in November of 2003. These numbers have no practical use, other than perhaps for random number generators. The ones being found today are millions of digits long.

Interesting FFT Explanation

I found a link to this person's web page where FFT Multiplication is demonstrated using an Excel spreadsheet.

http://www.gweep.net/%7Eshifty/portfolio/fftmulspreadsheet/index.html

Tuesday, December 14, 2004

Comet Machholz

There's a comet in the sky that is brightening, and will continue to do so through January. Currently located near the feet of Orion, it is a Magnitude 5 object, just visible to the naked eye. At its brightest, it's expected to be around a Magnitude 4 object.

http://www.spaceweather.com/comets/machholz/11dec04/Westlake2.jpg

http://www.spaceweather.com/images2004/13dec04/skymap_north.gif

http://cfa-www.harvard.edu/iau/Ephemerides/Comets/2004Q2_1.html

Comets are amazing sights to see. I missed Halley's back in '86, but I sure took in Hale-Bopp in '97. Machholz is not going to be nearly as spectacular, but it will be worth looking for in January to say the least, if only to say that you were able to pick it out of the sea of background stars.

Thursday, December 09, 2004

Kerry Absent More Than Not

Ok, I know that Senator Kerry was campaigning for presidency, which required him to be away from the Senate floor more often than not over the past year, but where I'm going to have a problem is if he receives his full salary for 2004. The law states that if a Senator is not present when Congress is in session, and he is not sick, then pay shall be deducted.

http://www.talonnews.com/news/2004/june/0617_kerry_preempt_ethics.shtml

I, for one, will be interested in seeing his tax filings for 2004 when he releases them in a few months. Same for Edwards and anyone else who had any absenses from Congress.

This isn't about the Presidential Election.... This is about holding our lawmakers fiscally responsible. These are the same people who can give themselves a pay raise while the rest of the country is working on frozen salaries.

Thursday, December 02, 2004

GBPVR: First Thoughts

Despite having developed for the GB-PVR platform, I don't actually have a HTPC running yet. Well, I don't have a complete one running with a remote control, etc.

I currently have a P3-800 box with 256MB and about 60GB of combined HDD space. It has a SB-16 sound card, and a WinTV PVR-150MCE capture card. Right now, there's a SIS AGP video card in there.

It took a little bit of trial and error to get GB-PVR to work on this interim setup. One lesson learned, and I'm not sure if it was made clear in the documentation or not (probably was, but I tend to skip over important details), is that you need a MPEG-2 decoding software (aka, a software DVD player that integrates with Media Player, etc) like WinDVD, etc. Or at least, GB-PVR started playing for me after I installed one.

In the current set up, I still have intermittent problems with live tv and watching video in GB-PVR, but scheduled recordings fire off without a hitch. I'm proud to report that I was able to record Ghost Hunters on SciFi last night during the busy Wednesday Night 9PM timeslot and play it back later (through Media Player, but it was still a great picture).

I'm sure my issues are related to the fact that Sub just put in support for the WinTV 150MCE, and probably issues related to the video card (it's not supported by Media Center, so it's going to get upgraded sometime). I won't rule out my software configuration either.


Annoying Website Feature

Here's something that annoys me, and I run into it using Blogger.com of all places:

Some sites take a while (meaning >1 second) to load, but the browser renders the page and its form elements while it's still loading. Then, there's a "onload" event handler for the body tag that sets the focus to a particular control.

That in itself is not the annoying part, but my bank and blogger.com both do this on the login screen.

So, what happens is that I type my username, hit Tab, and then start typing my password. Well, in the middle of the password, that "onload" handler fires off, moving the cursor back to the username box, and it usually ends up with the latter half of my password being typed in clear text within that username box.

Monday, November 29, 2004

GBPVR Widgets

As I began writing plugins for GB-PVR, I noticed that some things were being done in code that seemed to be repeated over and over between the plugins (and even within a plugin). Specifically, the creation of listboxes within a plugin seemed to really bloat the code, because the plugin author has to maintain the list, handle navigation, and then render the list.

So, I thought it would be handy if plugin authors could have a reusable library of widgets (controls, functions, data structures, etc) that would handle a lot of the harder stuff, and allow the coders to really concentrate on the "business" logic.

A design challenge was how to make these things skin-friendly. Sub has put a lot of effort in making GB-PVR skinnable, so I want the widget controls to make it even easier, if anything. I decided that the controls themselves would not be skin-aware. That is, they have properties like "Font", "BackgroundColor", etc, that the MenuTask item (a.k.a., the plugin) will control. In this way, someone could use a widget control "out of the box".

However, by adding a layer between the MenuTask and the WidgetControl, I can have a totally skin-aware container to hold the controls, and offset some of the user-interface functions (like navigation, focus handling, messaging, etc) to this middle layer. I'm calling this layer the WidgetForm, and it will also have the ability to deserialize WidgetControls from XML representations. This will hopefully enhance the skinning (by giving the ability to totally change control look-and-feel outside of code), and what's even better, is that it could be extended to allow for some design-time manipulation of the controls (i.e., a skin designer).

I've started a Sourceforge project to contain this effort. For now, I'm taking on a lot of the design and development in order to establish the initial direction of the project. But, once I have a solid start and a beta release, I'll gladly give up control if a team wants to continue to expand the library.

I welcome any .NET developers to join the development team. I've brought Jorm on to assist when he's got time (he's already helped me test how CVS works). Just shoot me an email or PM on the GBPVR forum, and I'll give you details.

Tuesday, November 23, 2004

Another Topcoder Challenge

Well, I did a little better this time around. For the longest time, I was actually in first place within my room. And then the system testing took me out (dropped me down a few positions).

Actually, I was a little careless in my unit testing and didn't test the simplest test that they provided. And wouldn't you know, that's what took me out.

The challenge problem dealt with parsing an English sentence and then translating it into some other language. So, a sample sentence might be "The dog jumps to the cat". In parsing this, my code needed to recognize that "The dog" was the subject, "jumps" was a present-tense verb, and "to the cat" was an objective preposition (or something like that) with "the cat" being the actual object. I would then have the components needed to perform the translation logic.

So, I tokenized the sentence into a string array, which worked fine. I then methodically determined the subject, verb, what kind of subject, the tense of the verb, etc. I also had code to handle the object, but this was optional data per the problem description.

At some point in the coding, I inserted a line of code to try to get the object by index number. In the above sentence, my code would do something like: obj=words[5] (and then obj would equal "cat").

Well, turns out that I inserted this line before my code that checked if there were more tokens (meaning, if there was an object). So, the test data was something like "Jason codes", and I was trying to perform: obj=words[2]. Since there's only 2 elements, index 2 (which would be the third element) is out of range.

Scoring is based on how quickly you submit a solution that compiles, so that's why I was pressured to not perform all example tests that they provided. I'm kicking myself now, because instead of losing another 10 points or so for the time that it would have taken me to run the last simple test, I lost 600 points (or so) for the entire problem.

BLAH! (kicking myself)

Wednesday, November 17, 2004

ILWWCM 2.0.1

I began working with ILWWCM 2.0.1 this week. I can't believe that they call this thing a production-level content management system (it feels very much like a beta product, and is limited in so many ways).

Setting it up was a little bit of a hassle. At least for me, Mr. Microsoft, who has been spoiled with Installshields for everything in the past. I had to pull out the old text editor to make a lot of configuration changes--things that I would have hoped that W.A.S. could have taken care of.

And since I installed it four different times, that meant doing the manual steps of the installation four different times. This includes copying the contents of the web-app folder into the installedapps .war folder, and editing the aptrixjpe.properties, aptrixsearch.properties, and connect.cfg files to find-and-replace about five variables to match your configuration.

I got wise after that and created a VBScript file (executed using Windows Scripting Host) to do these manual steps for me. And, thanks to the Internet, I'm placing it here for the world to use. Disclaimer: This is provided as is with no warranty or support. Use at your own risk.

Install ILWWCM into WebSphere Application Server per the IBM instructions. Some specific things that I chose to do:

context = ilwwcm
app name = ILWWCM
binding = server1 (port 9080)

When I got to the part of the installation instructions where they talk about editing the config/property files and copying the web-app directory, I just run my script. Then a restart of WAS and I was on my way.

Save this script to a .vbs file in the ILWWCM install directory (the one that has "app", "contentportlet", and "web-app" directories in it), edit the script to change the values to match the server's configuration (comments tell you what to replace), and then run the script either using wscript (i.e., double-click in Explorer) or cscript (i.e., from cmd prompt).

Tip: Copy this and paste it into Notepad, then save as a .VBS file (i.e., configme.vbs) in your ILWWCM install directory



'---------------------------------------------------------------------------------
' ILWWCM INSTALL HELPER SCRIPT by JASON F011@$ 11-17-2004
'
' JUST TO HELP GET AROUND THE PAIN-IN-THE-A$$ FILE COPYING AND FILE EDITING
' THAT IS REQUIRED WHEN SETTING UP ILWWCM 2.0 (and perhaps earlier)
'
' OBVIOUSLY, THIS IS A WINDOWS SCRIPTING HOST FILE, INTENDED TO BE EXECUTED
' ON A WINDOWS SERVER. NOT USING WINDOWS? FOLLOW IBM'S PAINFUL INSTRUCTIONS
'
' ALL RIGHT, IT'S NOT ALL THAT PAINFUL, SINCE THERE'S ONLY 3 FILES THAT NEED
' A BUNCH OF FIND-AND-REPLACINGS, BUT AFTER ABOUT THE 3RD INSTALL, I STARTED
' LOOKING FOR AN EASIER WAY TO DO THESE LITTLE TASKS
'---------------------------------------------------------------------------------
option explicit

dim scriptpath
dim WAS_INSTALLED_APPS
dim WAS_APP_NAME

scriptpath = left(wscript.scriptfullname, instrrev(wscript.scriptfullname, "\"))


dim variables
set variables = createobject("scripting.dictionary")

'------------------------------------------------------
' CHANGE THIS VALUE TO THE PATH WHERE YOUR WAS INSTALLED
' APPLICATIONS ARE (no ending slash)
'------------------------------------------------------

WAS_INSTALLED_APPS = "C:\WebSphere\AppServer\installedApps\myserver"




'------------------------------------------------------
' CHANGE THIS VALUE TO THE NAME THAT YOU GAVE THE
' APPLICATION WHEN YOU INSTALLED IT INTO WAS
'------------------------------------------------------

WAS_APP_NAME = "ILWWCM"




'------------------------------------------------------
' REPLACE THE FOLLOWING VALUES WITH ENVIRONMENT-SPECIFIC
' VALUES AS NECESSARY
'------------------------------------------------------

variables("[HOST]") = "myserver"
variables("[PORT]") = "9080"
variables("[CONTEXT_ROOT]") = "ilwwcm"
variables("[WEB_APP_HOME]") = replace(WAS_INSTALLED_APPS, "\", "/") & "/" & WAS_APP_NAME & ".ear/ilwwcm.war"
variables("[ILWWCM_HOME]") = replace(scriptpath, "\", "/") & "app"

variables("file:///") = "file:" ' Per IBM documentation






'-------------------------------------------------------------------
' Everything that you need to change should be above this point
'-------------------------------------------------------------------







' Kind of messy, inefficient because each set of code is repeated for each config
' file, but I'm okay with that for now. If I get a chance to refactor, then I'll
' make this a lot cleaner.


dim fso
set fso = createobject("scripting.filesystemobject")


'--- Make sure that the samples are where they're supposed to be, else abort

if not fso.FileExists(scriptpath & "app\config\samples\aptrixjpe.properties") then
wscript.echo "Could not file sample aptrixjpe.properties. Be sure that you
run this script from the root of your ILWWCM install directory."
wscript.quit
end if

if not fso.FileExists(scriptpath & "app\config\samples\aptrixsearch.properties") then
wscript.echo "Could not file sample aptrixsearch.properties. Be sure that you run this script from the root of your ILWWCM install directory."
wscript.quit
end if

if not fso.FileExists(scriptpath & "app\config\samples\connect.cfg") then
wscript.echo "Could not file sample connect.cfg. Be sure that you run this script from the root of your ILWWCM install directory."
wscript.quit
end if






'--- Back up any current existing config files using timestamp-based suffixes

if fso.FileExists(scriptpath & "app\config\aptrixjpe.properties") then
fso.MoveFile scriptpath & "app\config\aptrixjpe.properties", scriptpath & "app\config\aptrixjpe.properties." & cdbl(now)
end if

if fso.FileExists(scriptpath & "app\config\aptrixsearch.properties") then
fso.MoveFile scriptpath & "app\config\aptrixsearch.properties", scriptpath & "app\config\aptrixsearch.properties." & cdbl(now)
end if

if fso.FileExists(scriptpath & "app\config\connect.cfg") then
fso.MoveFile scriptpath & "app\config\connect.cfg", scriptpath & "app\config\connect.cfg." & cdbl(now)
end if





'--- Copy/Edit the config files to replace all variable placeholders with values set above

dim f, contents, v

set f = fso.OpenTextFile(scriptpath & "app\config\samples\aptrixjpe.properties", 1)
contents = f.ReadAll
f.close

for each v in variables.keys
contents = replace(contents, v, variables(v))
next

set f = fso.OpenTextFile(scriptpath & "app\config\aptrixjpe.properties", 2, true)
f.write contents
f.close


set f = fso.OpenTextFile(scriptpath & "app\config\samples\aptrixsearch.properties", 1)
contents = f.ReadAll
f.close

for each v in variables.keys
contents = replace(contents, v, variables(v))
next

set f = fso.OpenTextFile(scriptpath & "app\config\aptrixsearch.properties", 2, true)
f.write contents
f.close


set f = fso.OpenTextFile(scriptpath & "app\config\samples\connect.cfg", 1)
contents = f.ReadAll
f.close

for each v in variables.keys
contents = replace(contents, v, variables(v))
next

set f = fso.OpenTextFile(scriptpath & "app\config\connect.cfg", 2, true)
f.write contents
f.close




'--- Copy the web files to the web app home
wscript.echo "About to copy the web directory. After copying is complete, a message stating 'Done!' will be shown."

fso.CopyFolder scriptpath & "web-app\*", replace(variables("[WEB_APP_HOME]"), "/", "\"), true

wscript.echo "Done!"


Aurora as Seen from Satellite

http://www.spaceweather.com/aurora/images2004/07nov04e/dmsp.gif

This shows you how far south the auroral oval was during part of that geomagnetic storm last week.

Now, since the auroras take place in the ionosphere, which is some miles up, even though the oval was over Michigan, I was able to see it pretty high in the sky in Ohio (and it was visible further south into the Carolinas, I believe) because I'm looking into the "wall".

A lot of times, the oval will not progress any further south than Ontario or the UP , but you might still be able to see it low on the horizon if you're in dark sky Michigan (and know what you're looking for).

Monday, November 15, 2004

IBM Thinkpad R51

Finally, after using an old Gateway 9150 for five years, my company provided me with a new laptop. I've never been a fan of the Thinkpad, but this machine might just change my mind.

The quick specs:

Series: R51
Type: 1836
Processor: 1.6GHz Pentium-M
HDD: 60GB 4200RPM
RAM: 1.5GB RAM
Display: 15" SXGA+ TFT; ATI Radeon 9000 w/32MB
Networking: 802.11b/g; 1GB Ethernet; Modem
Media: DVD/CD-RW
Ports: USB, Firewire, S-Video Out, PC-Card

Now, perhaps I'm now spoiled since my frame of reference is an obsolete PII-400 with 256MB RAM and no working peripherals, including the keyboard. But this thing rocks.

One feature that so far has proven itself quite useful is a small LED that when activated, illuminates the keyboard. While not all that bright, it actually helps a lot when using the laptop in the dark (i.e., on your lap while watching television at night, or while riding in a car at night, etc).

Not that it's directly related to the Thinkpad, but I'm also currently using VirtualPC to create sandbox environments to isolate my development tools. Now, granted, I won't be able to run a lot of different VPC's at the same time with only 1.5GB of RAM, but I can keep a cleanroom onhand for testing, etc, while not polluting my main environment with a bunch of ad hoc software installations.

Tuesday, November 09, 2004

Active Week for Solar Activity

Again tonight, we were blessed with an active Aurora, though at the moment, it's little more than a glowing green fog in the northern sky.

At around noon my time, the first of two distinct shockwaves from CME's impact the Earth, which initiated a strong geomagnetic storm (Kp of 8). The second shockwave took the Bz component northward, and it remained that way until after darkness fell here. Then, around 8:30PM EST, the Bz component measured by the ACE spacecraft went south, giving me about 30 minutes go get out to my dark spot to observe the aurora.

We also had two major flare events occur back at the Sun. One, which happened minutes ago as I write this, was an X2 to X3 event, which likely has a CME associated with it that might have an Earth-directed component (if only a glancing blow, since sunspot 696 is nearing the limb). Give it maybe 3 days for travel, and that means that Friday night/Saturday morning, we'll have more Auroras lighting the sky. Though, I'm not optimistic about having clear skies when it arrives (but, so far, the WeatherChannel is predicting no clouds on Friday night).

Here's wishing you clear skies!

Monday, November 08, 2004

Very Active Auroras

My wife woke me up around 2AM. She had stepped outside, and saw for the first time the amazing pulsating auroras that lit up our skies as an Extreme level geomagnetic storm continues on. Despite partly cloudy skies, there were enough holes to be able to tell that the whole northern portion was alit in green, and pulse-like waves of colors rippled overhead and to the south.

I took her out to see the Northern Lights last year, but despite vivid reds and greens, the display that she saw didn't have much movement like we're seeing right now.

Perhaps now she won't poke fun at me when I chase auroras in the future. ;-)