Velox & Facile: Partum a folder assignare adipiscing elit (Aut, Et Manduca habeant Your KPIs eos nimis)

In order to work around a KPI problem I wrote about here, I did some testing and discovered that KPI’s work against folders with meta data in the same way that they work against documents or list items. I proved it out by creating a new content type based on the folder content type and then added a few fields. I created some indicators and proved to myself that KPIs work as expected. This was welcome news. It’s not perfect, because the drill-down you get from the KPI against the folders is not exactly what you want. This isn’t too much a drawback in my case because 1) the end users don’t know any better and 2) the drill-down goes to a folder. They click the folder name and they are at the item. It’s two clicks instead of one, which isn’t the end of the world.

This flowed nicely with the work I was doing. I am creating a folder for every document that gets uploaded. This is done via an event receiver. Ut ex, it’s a piece of cake to keep the parent folder’s meta data in sync with the KPI-driven meta data from the file itself since the plumbing is already in place. Hoc mihi concedit KPI meum in ea, et comedent et 🙂

I modified the event receiver to add the folder and then set this new folder’s content type to my custom KPI-friendly content type. This bit of code did the trick:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Documents").SubFolders;
  SPFolder addedFolder = srcFolders.Add(properties.ListItem.ID.ToString());
  SPContentTypeId kpiCT = novum SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Content Type ID"] = kpiCT;
  addedFolder.Item.Update();

To locate the actual Content Type ID, I accessed that content type via site settings and copy/pasted it from the URL as shown:

imaginem

</finem>

Scribet ad mea blog!

Technorati Tags: ,

Vivos et Securus: Adepto de SPFolder SPListItem in eventum Receptor

Odi illud admittere,, but I struggled with this one all day. My event receiver needs to update a field of its parent folder. This little bit shows how to do it:

privatis Irrita UpdateParentFolder(SPItemEventProperties Proprietates)
{

SPFolder thisItemFolder = properties.ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ Approval Status"] = "Good news, omnes!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

In hoc, Ego sum operantes cum a tabellae bibliothecam proprietates veniunt ab eventu ItemAdded.

Dolum est, ut non directe item Lorem ipsum SPFolder (i.e. properties.ListItem.Folder nulla sit). Pro, item in album scriptor ire et adepto coniuncta File lima folder est scriptor.

</finem>

Scribet ad mea blog!

Technorati Tags:

Aliud Vicis Receptor debug Dolum

I’m sure I’m not the first person to come up with this. Autem, I haven’t noticed anyone publish a trick like this since I started paying close attention to the community last July. Ita, Ego stipes hoc mallem de facili debug apicem.

I’m working on an event receiver that started to generate this error in the 12 alveare:

Error oneratisque et currit eventus susceptor Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Culturae = neutra, PublicKeyToken=blahbalhbalh. Additional information is below. : Non objectum secundum posuit ad instantiam objectum.

I didn’t know where I had introduced this bug because I had done too many things in one of my code/deploy/test cycles.

I tried this solution to get my pdb in there with hopes that SharePoint’s 12 hive would show the stack trace, sed non fortuna. I don’t know if it’s possible and if someone does, placet me cognoscere 🙂

I know it’s possible to write your own log messages to the 12 alveare. Frankly, I wanted something a little less scary and quicker to implement.

It occurred to me that I could at least get some basic trace information by catching and re-throwing generic exceptions like this:

  experiri {
    UpdateEditionDate(Proprietates);
  }
  capiendos (Exceptio e)
  {
    mittent novum Exceptio("Dispatcher, UpdateEditionDate(): Exceptio: [" + e.ToString() + "].");
  }

This showed up in the 12 hive thusly:

Error oneratisque et currit eventus susceptor Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Culturae = neutra, PublicKeyToken=blahblahblah. Additional information is below. : Dispatcher, UpdateEditionDate(): Exceptio: [System.NullReferenceException: Non objectum secundum posuit ad instantiam objectum. at Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties proprietatum) at Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties proprietatum, String eventDescription)].

That gave me all the detail I needed to track down that particular problem and I expect to use it a lot going forward.

</finem>

Scribet ad mea blog!

Dominica Funny: “Non educendo”

Retro in circuitu 1998, the company I worked for at the time received some funding to create a new e-commerce product. We had the full gamut of business requirements to meet. It had to be fast, facile finem users, CARNOSUS, Linguam multi-, etc. Sad to say, I probably haven’t had as an ambitious set of work to accomplish since those heady days.

This effort pre-dated Microsoft.NET. Plain vanilla ASP was still somewhat new (or least very unfamiliar to my company). "Brick and mortar" companies were doomed. Doomed! This is to say that it was pioneering work. Not Hadron Collider pioneering work, but for us in our little world, it was pioneering work.

We were crazy busy. We were doing mini POC’s almost every day, figuring out how to maintain state in an inherently stateless medium, figuring out multi-language issues, row-level security. We even had create a vocabulary to define basic terms (I preferred state-persistent but for some reason, the awkward "statefull" won the day).

As we were madly inventing this product, the marketing and sales people were out there trying to sell it. Somehow, they managed to sell it to our nightmare scenario. Even though we were designing and implementing an enterprise solution, we really didn’t expect the first customer to use every last feature we built into the product day zero. This customer needed multi-language, a radically different user interface from the "standard" system but with the same business logic. Multi-language was especially hard in this case, because we always focused on Spanish or French, but in this case, it was Chinese (which is a double-byte character set and required special handling given the technology we used).

Fast forward a few months and I’m on a Northwest airlines flight to Beijing. I’ve been so busy preparing for this trip that I have almost no idea what it’s like to go there. I had read a book once about how an American had been in China for several years and had learned the language. One day he was walking the city and asked some people for directions. The conversation went something this:

  • American: "Could you tell me how to get to [XX] street?"
  • Chinese: "Sorry, we don’t speak English".
  • American: "Oh, well I speak Mandarin." and he asked them again in Chinese, but more clearly (as best he could).
  • Chinese: Very politely, "Sorry, we don’t speak English".

The conversation went on like that for bit and the American gave up in frustration. As he was leaving them he overheard one man speaking to the other, "I could have sworn he was asking for directions to [XX] street."

I had picked up a few bits and pieces of other China-related quasi-information and "helpful advice":

  • A Korean co-worked told me that the I needed to be careful of the Chinese because "they would try to get me drunk and take advantage of you" in the sense of pressuring me into bad business decisions.
  • We were not allowed to drive cars (there was some confusion as to whether this was a custom, a legal requirement or just the client’s rule).
  • There were special rules for going through customs.
  • We were not allowed to use American money for anything.
  • You’re not supposed to leave tips. It’s insulting if you do.

Et tandem, I had relatively fresh memories the Tiananmen massacre. When I was at college, I remember seeing real-time Usenet postings as the world looked on in horror.

In short, I was very nervous. I wasn’t just normal-nervous in the sense that I was delivering a solution that was orders of magnitude more complicated than anything I had ever done before. I was also worried about accidentally breaking a rule that could get me in trouble.

I’m on this 14 hour flight and though it was business class, 14 hours is a damned long time. There are only so many ways to entertain yourself by reading, watching movies or playing with the magnetized cutlery. Even a really good book is hard to read for several hours straight.

Tandem, I started to read the packaging material on a piece of software I was hand-carrying with me to the client, Netscape’s web server. I’m reading the hardware/software requirements, the marketing blurbs, looking at the pretty picture and suddenly, I zero in on the giant "NOT FOR EXPORT" warning, something about 128 bit encryption. I stuffed the box back into my carry bag, warning face-down (as if that would have helped) and tried to keep visions of Midnight Express out of my head.

Respiciens nunc, I should have been worried, if at all, when I left the U.S., cum nihil adversi accidit non 🙂 et intrantes Sinis est etiam considerans est optima et maxime omnium memorabile quae habebat negotium trinus Ego voluntas faciendi.

</finem>

Scribet ad mea blog!

Technorati Tags: ,

Solutio: Non SPQuery Scrutamini folders

This past week I was implementing an "evolving" solution for a client that uses BDC and SPQuery and ran into some difficulty using SPQuery against a document library containing folders. Imo linea: assign "recursive" Ad secundum proprium quaestionis.

Missionem meam:

  • Die Lune, Ego upload a tabellae et conpleamus aliqua notitia meta.
  • Sequenti septimana, I upload a new document. Much of this new document’s meta data is based on the document I uploaded on Monday (which we call the "master document").
  • Diximus creavit textus muneris ut suggero a latitudo autem ante faciem BDC-familiaris interface ut album ut users ut facile locus Lune per tabellae quaestionis titulus.
  • A BDC data column provides a friendly user interface. (Hæc est pars agminis conatu ad usura BDC pro amiciores Lookup).

Latitudo autem ante faciem ultima BDC cultum adhibet query hoc facere lookup:

 // U2U tool usus ad assistunt in generatione hac quaestione CAML.
      oQuery.Query =
        "<Ubi>";

      si (titleFilter.Length > 0)
        oQuery.Query   =
          "  <Et>";

      oQuery.Query   =
        "    <Et>" +
        "      <Geq>" +
        "        <FieldRef Name=\"DocumentId\" />" +
        "        <Value Type=\"Text\">" + MinID + "</Valor>" +
        "      </Geq>" +
        "      <Leq>" +
        "        <FieldRef Name=\"DocumentId\" />" +
        "        <Value Type=\"Text\">" + maxId + "</Valor>" +
        "      </Leq>" +
        "    </Et>";

      si (titleFilter.Length > 0)
        oQuery.Query   =
          "    <Continet>" +
          "      <FieldRef Name=\"Title\" />" +
          "      <Value Type=\"Text\">" + titleFilter + "</Valor>" +
          "    </Continet>" +
          "  </Et>";
      oQuery.Query   =
        "</Ubi>";

In initialis stadio progressionem, this worked great. Autem, nos in introductus folders album solvere quaestiones et subito quidam, my BDC picker wouldn’t return any results. I tracked this down to the fact that the SPQuery would never return any results. We used folders primarily to allow multiple files with the same name to be uploaded but with different meta data. When the file is uploaded, partum a folder item ex album, et tunc permoveo lima ibi ID scriptor (Ego scripsit quod hic; weve 'had mixta results sed cum omnis aditus, illud bene operetur). The user don’t care about folders and in fact, don’t really understand that there are any folders. We have configured all the views on the library to show items without regard to folders.

I hit this problem twice as the technical implementation evolved and solved it differently each time. The first time, I wasn’t using the CONTAINS operator in the query. Without a CONTAINS operator, I was able to solve the problem by specifying the view on the SPQuery’s contructor. Instead of using the default constructor:

SPList oList = web.Lists["Documents"];

SPQuery oQuery = novum SPQuery();

Ego potius uteretur sententia machinator quod specificatur:

SPList oList = web.Lists["Documents"];

SPQuery oQuery = novum SPQuery(oList.Views["All Documents"]);

Ut problema solvendum et coepi praecessi adepto meus.

I then added the CONTAINS operator into the mix and it broke again. It turns out that the CONTAINS operator, ut mihi indicet, Sic uti non sit simplicior quam GEQ / LEQ operators. I did some searching and learned that the query’s ViewAttributes should be set to "Recursive", ut in:

oQuery.ViewAttributes = "Scope=\"Recursive\"";

That solved the problem for CONTAINS. In facto, hoc problema solvitur etiam pristinae quaerere et si fecissem peregit recursive primum attributum,, Nec vero causae occurrunt.

Quod visus operetur in aliqua dicentur SPQuery operators (GEQ/LEQ) et non alios, (Continet), copulata hoc, quod non videtur ad operari cum KPIs folder-document continens bibliothecis ducit me ad credendum quod aliqua SPQuery orthogonality exitibus.

Praecipua gratias,:

  • At bonum folks U2U et machinatio eorum query.
  • Magna est scriptor Michael Hoffer "discendi facere," blog nuntius, comments et responsa.

</finem>

Scribet ad mea blog!

MUSCUS KPI bug? Indicis album Ligatum ad Document Bibliotheca Cum folders

UPDATE 02/29/08: I solved this problem by creating a folder and then assigning a content type to the folder which has the meta data I need for the KPIs. I described that in a little more detail here.

We have implemented a technical solution where users upload documents to a document library. An event receiver creates a directory and moves the file to that directory (using a technique similar to what I wrote about hic). We’ve successfully navigated around the potential issues caused by event receivers that rename uploaded files (mainly because users never start their document by clicking on "New" but instead create the docs locally and then upload them).

The meta data for these documents includes a Yes/No site column called "Urgent" and another site column called "Status". We need to meet a business requirement that shows the percentage of "Urgent" documents whose status is "Pending".

This is usually simple to do and I described something very much like this at the SharePoint Beagle with lots of screen shots if you’re interested.

In a nutshell, Fecit sequenti:

  • Create a view on the doc library called "Pending".
  • Configure the view to ignore folder structure.
  • Create a KPI List.
  • Create an indicator in the list that points to the doc lib and that "Pending" considerabit.

This simply does not work. The KPI shows my target (e.g. five urgent documents) but always shows the actual number of urgent documents as zero. Paradoxically, if you drill down to the details, it shows the five urgent documents in the list. I created a very simple scenario with two documents, one in a folder and one not. Here is the screen shot:

imaginem

The above screen shot clearly shows there are two documents in the view but the "value" is one. The "CamlSchema" with blank document Id is in the root folder and the other is in a folder named "84".

It appears to me that even though you specify a view, the KPI doesn’t honor the "show all items without folders" setting and instead, confines itself to the root folder.

If I’m wrong, please drop me a line or leave a comment.

</finem>

Scribet ad mea blog!

Technorati Tags:

SPD Lorem Ipsum “Colligere notitia ex A user”: Temperare forma generati Negotium

I’m working on a project that uses five different SharePoint Designer work flows to handle some document approvals. SPD provides the "collect data from a user" actionem possumus promptus pro diversis user notitia frenos, ut si comprobaritis, et maybe quidam comments quaerunt quid haberet alter nocte cenae.

The forms are perfectly functional. They are tied to a task list as a content type. Sunt 100% system-generated. This is their strength and weakness. If we can live with the default form, then we’re good to go. Autem, we don’t have too much control over how SPD creates the form. If we don’t like that default behavior, ut circa illud variis artibus uti oportet (enim, statuentes prioritatis ex negotii).

Opus ad providere a link ex his formis negotium aperuit visum proprietatum (dispform.asxp) of the "related item" in a new window. This provides one-click access to the meta data of the related item. This is what I mean:

imaginem

Gratanter, we can do that and it’s not very hard. Broadly speaking, accenderet SPD, navigate to the directory that houses the workflow files and open the ASPX file you want to modify. These are just classic XSL transform instructions and if you’ve mucked about with itemstyle.xsl, missionibus vel p alia quaerere, this will be easy for you. In facto, Inveni eam esse plerumque facilius cum forma generati, est aliquanto facilius sequuntur, per comparationem ad a quaero praecessi textus partem cori (uoniam nightmarish CWQP).

Utique, there is one major pitfall. SPD’s workflow editor expects full control over that file. If you modify it, SPD will happily overwrite your changes give the right set of circumstances. I did two quick tests to see how bad this could get. They both presuppose that you’ve crafted a valid SPD workflow that uses the "collect data from a user" step.

Test 1:

  • Temperare file per manum ASPX.
  • Experiri (verificetur quod mutationes sunt proprie vestra et non fregerunt aliquid salvus).
  • Et aperire workflow addere finitimus actione (such as "log to history").
  • Nisi workflow.

Result: In hoc, SPD non re-creare forma.

Test 2:

  • Ut idem faceret quod #1 except directly modify the "collect data from a user" Actio.

Result: Hac re-creare forma a VULNUS, nimium scriptis mutationes tuas.

Nota finali:

  • Saltem duarum partum formas huiusmodi actiones SPD: "Collect Data From a User" and "Assign To Do Item". Both of these actions’ formae possunt tincidunt modified.
  • Fui quod posse generare mea pagina dispform.aspx, hoc in casu, the relate item always has its ID embedded in the related item’s URL. I was able to extract it and then build an <a href> based on it to provide the one-click meta data access feature. It’s unlikely that your URL follows this rule. There may be other ways to get the ID of the related item but I have not had to cross that bridge, Nescio si ita fuerit soluta trans.
  • Non cognituros, Sed non est mirum si in aliquam lectus lima 12 quod posset immutare alvum pertinere quam default formas generat SPD (multo sicut nos can modify intenti Templates).

</finem>

Scribet ad mea blog!

Technorati Tags: ,

Sunt “Error incognitus” Nuntius Vere melior Stack Trace?

I was reading Madhur’s blog post on how to enable stack trace displays and now I’m wondering: Itaque omni suspicione quin Stack?

Qui simul ascenderant cum eo imperante quid sequatur?

End users will know something is wrong in either case. At least with a stack trace, instare possunt imperium-printscreen, copy/paste into an email and send it to IT. That would clearly reduce the time and effort required to solve the issue.

</finem>

Technorati Tags:

Sunday (Invidiam) Ridiculam: “Nomen Paulus Galvin”

Fasciculumque annos, mea bulla dixit ad me adhuc viveret et nutriret quidam users in productum dicitur Results. Results finis user quaestor tool. Suus 'dure analogum SQL Server Reporting Service Vitrum aut Crystallus,. Ad tempus, eam virides voluit currere fistulae (e.g. Wyse 50 terminatio) adnexa Unix box via telnet.

Ad mea interrogare defectus iste, "Tu … " est "Yes" ubi initium et omnem laborem.

Client erat eget dolor in Australium California et convolvetur superbia fere a major exsequendam ERP fundatur QAD scriptor MFG / PRO. Exsecutionem consilium nunc ad erudiendum in virtute finis users Results product.

Hoc instrumentum non erat magna et ariolos numquam quisquam peritus. Autem, Deduxisti me celeriter ordines et alia disciplina pedes meos, sic EGO eram non nimis sollicitus. Dennis, realis plenus-vicis Results instructor, dederat mihi disciplina materiam. Respiciens nunc, suus 'vere satis absurdum. Nesciebam tam uber, non formaliter et in eo docti numquam didici. Quid enim ego erudiendum quis in ea?

Inpediunt quae logistically, Interrogatus quam partem Chicago occurrere aliquem in itinere proelio sales praeclarum. Nam nimia disponebatur fugere de New Jersey, ire Chicago, occurrere ad horam prospectu et pergunt ad California.

Bene, EGO got me Chicago amet volutpat dolor nec confirmavit errorem conventus quosdam. Ita, Feci et non fuit in spem. Terribilis. Stipant et relinquere et pergens ad CA.. Alicubi in hoc processu, Discit minus invenero client 24 horis ante adventum meum quod 'Paulus Galvin" erudiens class, non Dennis. Client amat Dennis. Scire "Qui Paulus homo UIC?" "Quid speramus eum?" 'Quid pro eo?" Marcus quippe non subscriberent meum "da malum fama mane" philosophiam. Terribilis.

Ego pervenire airport et aliquamdiu aequa ratio incredibiliter stultus, I coercitis sarcinas. Et ego feci eum ad LAX autem mea non loci sarcinas specta. Enim me, similis sit amet impedimentis amissis perambulans septem ipsis aetatibus dolor. Tandem planum facio ad deversorium, cum non loci sarcinas specta, lassus, frange esurienti circumdatio mea (iam, duplicatis incubuisset valde) negotium sectam. Quae dudum ad itinerandum de Novo — ad O'Hare — ut a client — back to O'Hare — et tandem ad lax.

Tandem reperio sedens Hotel, mandendo in Snickers bar, exhaustis atque exinanitis conatur ad lustrandum drum industria disciplina materiam rursus ita per totum animal non ante class tamquam. Hoc enim tempore aliquid imum.

De somno suscitatus sum in crastinum, tamen operam, ut non tamquam incompti tenuem lecture petenti Loman Gulielmus in die malo et in capite huius. Ita ut saepe fit, in illa fuerit delicatus, polite et amoenissima. Hic stetit in summae antithesis ad eam vehementer emails / voicemails a priore die. Ducit me 3 miles in aedificare ad aedificium post a sectioned off area in gigas chemica CELLA ubi demorati sumus deducet genere pro altero triduo. The 15 aut 20 alumni sensim adunabo, maxime eos, sperans Dennis.

Semper satus off exercitatione mea classes introducendo me, nonnullas background et scriptum contactus notitia in albis tabulam supputatis. Ut Im 'dicens, "Bonum mane, et est nomen meum Paulus Galvin ", Scribo nomen meum, email et phone numerus in litteris super Flavia ut perspicuum cuivis constare potest. Quod ego loquor in loco idoneo Dennis et scient quia ego dico replacement, etc. Ego me omnibus breuiter, volentes habere nomen et genus facere possum consequi de requisitis ut pergam ad specificas. Solito effercio.

Ut alter decidat et ut accenderet proiciente. Delere me et quia vado ad commercial … Scripseram permanent in titulum. Fui ita onerosa. Cogitavitque cor meum mecum est oculus, sed tamquam huius: Est autem haec "Paulus Galvin" hominem, ultimum minutis replacement pro carissimis nostris Dennis. Ipse suus gerens duplicatis incubuisset usque negotium sectam et intonsa. Qui litteris nostris Flavia in praescriptis nomen ingens permanent marker. Spectaculum!

Omnia finita feliciter, autem. Hoc erat eget dolor, post omnes. A diversorum colorum veteran molestie trahi aliquid off PLUTEUM et, forsit in violatione EPA ordinationes, pandere tabulam supputatis. Potui manere 1/2 pridie generi dederunt et per saeculorum decursum in finem bonum review. Hoc coagmentatum meum "ternum hitter" famae concubitu meo. Sarcinas pervenit Quarum dies prima venerabilis, ita multo presentable dies annua bima trima die.

Ut rediit auspicantes rubrum oculus, Contemplatus sum "lectiones didicit". Spatii satis contemplari. Communicatio est key. Dic clientes circa mutationes in plan. Non reprehendo vestri loci sarcinas specta ad aeroportus si unquam potest evitare. Adducam parce "effercio" si feceritis reprehendo vestri loci sarcinas specta et ponam eam doens't. Puto optuma rei publicae doctus sum, autem, hoc: Semper titulum tentare in inferiore margine sinistro ad scribendum Flavia, ingens in litteras, "Paul Galvin".

</finem>

Technorati Tags: ,

Perspectivae: Nos SharePoint. magna Hadron Collider

Due to some oddball United Airlines flights I took in the mid 90’s, I somehow ended up with an offer to transform "unused miles" into about a dozen free magazine subscriptions. That is how I ended up subscribing to Scientific American magazine.

Ut software / Populus consultare, we encounter many difficult business requirements in our career. Most the time, we love meeting those requirements and in fact, it’s probably why we think this career is the best in the world. I occasionally wonder just what in the world would I have done with myself if I had been born at any other time in history. How terrible would it be to miss out on the kinds of work I get to do now, at this time and place in world history? Puto: pretty terrible.

Over the years, some of the requirements I’ve faced have been extremely challenging to meet. Complex SharePoint stuff, building web processing frameworks based on non-web-friendly technology, complex BizTalk orchestrations and the like. We can all (hopefully) look proudly back on our career and say, "yeah, that was a hard one to solve, but in the end I pwned that sumbitch!" Melius tamen, even more interesting and fun challenges await.

I personally think that my resume, in this respect, is pretty deep and I’m pretty proud of it (though I know my wife will never understand 1/20th of it). But this week, I was reading an article about the Large Hadron Collider in my Scientific American magazine and had one of those rare humbling moments where I realized that despite my "giant" status in certain circles or how deep I think my well of experience, there are real giants in completely different worlds.

The people on the LHC team have some really thorny issues to manage. Consider the Moon. I don’t really think much about the Moon (though I’ve been very suspicious about it since I learned it’s slowing the Earth’s rotation, which can’t be a good thing for us Humans in the long term). Sed, the LHC team does have to worry. LHC’s measuring devices are so sensitive that they are affected by the Moon’s (Earth-rotation-slowing-and-eventually-killing-all-life) gravity. That’s a heck of a requirement to meet — produce correct measurements despite the Moon’s interference.

I was pondering that issue when I read this sentence: "The first level will receive and analyze data from only a subset of all the detector’s components, from which it can pick out promising events based on isolated factors such as whether an energetic muon was spotted flying out at a large angle from the beam axis." Really … ? I don’t play in that kind of sandbox and never will.

Next time I’m out with some friends, I’m going to raise a toast to the good people working on the LHC, hope they don’t successfully weigh the Higgs boson particle and curse the Moon. I suggest you do the same. Quod satis erit PRAEBIBO 🙂

</finem>

Technorati Tags: