Sam's profileSamb Business Intelligen...PhotosBlogListsMore Tools Help

Blog


    February 28

    TED Talk: Eva Vertes: My dream about the future of medicine

    http://www.ted.com/talks/view/id/12

    What an amazing concept...

     

     
    February 25

    If you watch this clock long enough you start to feel your own life slipping away...

    http://www.chippynews.com/worldclock.htm

       

    February 22

    Info Mesa adds Molecular Modeling and Visualization

    The newest tool addition to InfoMesa is the molecular model.  It sources its 3-D coordinates from PDB files and allows ball-and-stick, backbone and cartoon visualizations.  The molecules can also be color-coded by Atom, Amino-Acid, or Chain. The basics for the tool came from the open-source molecular viewer from Interknowlogy (http://gdcportal.interknowlogy.com/lab/Pages/Network.aspx).

    im_molecule

    Here's an image with multiple molecules added, side-by-side with various other types of media.

    imfeb

    With all the additions we have made to InfoMesa we will now start to build out the underlying database to persist all the positions and angles for these element types.

    February 19

    Visio to XAML Conversion

    http://www.codeplex.com/VisioExportToXAML
    http://blogs.msdn.com/saveenr/default.aspx

    Found a really neat tool that describes taking Visio drawings to XAML.  I have a real desire to put this on InfoMesa - we've had a number of scientists ask for integration with Word/Excel/Powerpoint.  Adding Visio to this is a no brainer.

    visowpf

    February 15

    Capacitive Touch is Coming Soon

     

    Link to Video

    February 12

    VLOG - Video Annotation feature for InfoMesa

    I'm going to try something a little different here.  One of my colleagues is going to build a component for InfoMesa and we will publish the results of the work across both of our blogs.

    Allan Da Costa Pinto is a Developer Evangelist and he has a blog at http://blogs.msdn.com/allandcp/.  He's going to help me with a VLOG, or Video-Log control.  Many of the scientists we have shown the InfoMesa to have requested this feature.  While we do provide a text annotation tool that is similar to yellow sticky (but with spell check :) ), the VLOG is a fantastic addition.

    So, overall the VLOG will look like this...

    • Author/Date timestamp automatically added for you
    • Video image of the recording (video and audio)
    • Some sort of feedback to show where audio occurs or is absent
    • A slider to seek position rapidly through the stream
    • Play and Pause at a minimum
    • Ability to change play speed to 2X or reset to 1X
    • Oh, yeah, and a record button, with a visualization of volume.

    videoannotation

    Here's the napkin sketch view...

    vlog

    Of critical importance is to be able to acquire and re-hydrate the buffers that contain the audio and video of the recording so that we can store it.  Anyone can show a video or play audio - we need to create it, store it, retrieve it and navigate it.  These two items (or one, if possible) will be stored in the InfoMesa database.

    Here's where we are starting from ... this code lives on top of the Pinboard Canvas of the InfoMesa Whiteboard...

     

    Creating and instance....

    private void InsertVlog(object sender, MouseButtonEventArgs e)
            {
                videoAnnotation va = new videoAnnotation();
                va.newvlog("C:\\Users\\Public\\Videos\\Sample Videos\\bear.wmv", PinBoard );

            }

     

    ...and here's the class...

    using System;
    using System.Collections.Generic;

    using System.Text;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows;
    using System.Windows.Input;

    namespace InfoMesa2
    {
        public partial class videoAnnotation
        {
            Slider timescale = new Slider();
            MediaElement mp = new MediaElement();

            public void newvlog(string vURL, Canvas parentpart)
            {
                Canvas backgrnd = new Canvas();
                backgrnd.Width = 220;
                backgrnd.Height = 200;
                backgrnd.Tag = "NR";
                backgrnd.Background = new SolidColorBrush(Colors.DarkGray);
                Canvas.SetLeft(backgrnd, 100);
                Canvas.SetTop(backgrnd, 100);
                parentpart.Children.Add(backgrnd);

                Uri vidURL = new Uri(vURL);
                mp.MediaOpened += Element_MediaOpened;
                mp.Source = vidURL;
                mp.Tag = "NR";
                mp.Width = 175;
                mp.Height = 175;

                Canvas.SetLeft(mp, 20);
                Canvas.SetTop(mp, 5);
                backgrnd.Children.Add(mp);
                Canvas.SetZIndex(mp, 100);
               // mp.LoadedBehavior = MediaState.Manual;

                // Play
                Button cmdPlay = new Button();
                cmdPlay.Content = "Play";
                cmdPlay.MouseDown +=  OnMouseDownPlayMedia;
                Canvas.SetLeft(cmdPlay, 25);
                Canvas.SetTop(cmdPlay, 175);
                backgrnd.Children.Add(cmdPlay);

                // Stop
                Button cmdStop = new Button();
                cmdStop.Content = "Stop";
                cmdStop.MouseDown += OnMouseDownStopMedia;
                Canvas.SetLeft(cmdStop, 65);
                Canvas.SetTop(cmdStop, 175);
                backgrnd.Children.Add(cmdStop);

                // Record
                Button cmdRec = new Button();
                cmdRec.Content = "Record";
                cmdRec.MouseDown += OnMouseDownStopMedia;
                Canvas.SetLeft(cmdRec, 95);
                Canvas.SetTop(cmdRec, 175);
                backgrnd.Children.Add(cmdRec);

                timescale.Minimum = 0;
                timescale.Maximum = 100;
                timescale.Width = 170;
                timescale.ValueChanged += new RoutedPropertyChangedEventHandler<double>(SeekToMediaPosition);
                Canvas.SetLeft(timescale, 20);
                Canvas.SetTop(timescale, 150);
                backgrnd.Children.Add(timescale);
            }

            private void SeekToMediaPosition(object sender, RoutedPropertyChangedEventArgs<double> e)
            {           
                int SliderValue = (int)timescale.Value;

                // Overloaded constructor takes the arguments days, hours, minutes, seconds, miniseconds.
                // Create a TimeSpan with miliseconds equal to the slider value.
                TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue);
                mp.Position = ts;
            }

            private void Element_MediaOpened(object sender, EventArgs e)
            {
                timescale.Maximum = mp.NaturalDuration.TimeSpan.TotalMilliseconds;
            }

            void OnMouseDownPlayMedia(object sender, MouseButtonEventArgs args)
            {

                // The Play method will begin the media if it is not currently active or
                // resume media if it is paused. This has no effect if the media is
                // already running.
                TimeSpan ts = new TimeSpan(0,0,0,0,0);

                mp.Position = ts;
                mp.Play();

                // Initialize the MediaElement property values.
                InitializePropertyValues();

            }

            void OnMouseDownStopMedia(object sender, MouseButtonEventArgs args)
            {

                // The Stop method stops and resets the media to be played from
                // the beginning.
                mp.Stop();

            }

            void InitializePropertyValues()
            {
                // Set the media's starting Volume and SpeedRatio to the current value of the
                // their respective slider controls.
                mp.Volume = (double)10; // volumeSlider.Value;
                mp.SpeedRatio = (double)2; // speedRatioSlider.Value;
            }

        }
    }

     

    Some advice and places to help you get going...

    http://weblogs.asp.net/nleghari/articles/webcam.aspx

    http://channel9.msdn.com/ShowPost.aspx?PostID=95238

    http://blogs.msdn.com/markhsch/archive/2007/11/19/c-webcam-user-control-source.aspx

    http://thewpfblog.com/?p=65

     

    ...and away we go... oops, I mean Allan - Go, Allan, Go!

    There's a big difference between visualization and explanation

     
    Breaking News: Series Of Concentric Circles Emanating From Glowing Red Dot

    InfoMesa - adding support for Ideas, Hypothesis and Experiments with Judgment links

    We have added some rudimentary support for grouping ideas, hypothesizes and experiments inside of InfoMesa, again blurring lines between project management and Electronic Lab Notebooks.

    ideahypexp

    Here's an example of an Idea connected to two hypotheses and one experiment.  Notice the judgment buttons that allow you to set value of hypos and experiments.  Ideas currently don't have value - they just, well, exist (do you agree with that concept?)

    Each object in InfoMesa can be linked, in this case, the linkages are from idea to hypo to experiment, but it can be to individual data points and web results as well.

    Clicking on the midpoint indicator of the link allows you to cycle between "good", "bad" and "unknown" states.  As always, these items are stored behind the scenes in a database and can be search by Sharepoint using the BDC (Business Data Catalog).

    Tony Williams (chemspider) recently got to see some of this early work and added his comments.

    Meeting Antony Williams at ChemSpider (www.chemspider.com)

    A few weeks ago I had the opportunity to personally meet with Tony Williams of ChemSpider fame for a few hours.  He's one of those people that talks for 10 minutes and you think, 'I could learn a huge amount from this person'. 

    aw

    One of the huge impacts from that meeting on me was that the action of curetting scientific data published to the web is incredibly important.  There is a huge amount of junk chemistry data on the web and people are starting research from these basic building blocks of corrupt data sets. If that building block is wrong, much of the research that extends from that point will be wrong. 

    With all the search engines indexing and scraping this stuff, are we making this issue worse?

    Here are a few posting that I feel are profound...

    http://www.chemspider.com/blog/a-need-to-improve-chemical-structure-handling-on-wikipedia.html

    http://www.chemspider.com/blog/a-users-guide-to-the-process-of-curating-identifiers-on-chemspider.html

    http://www.chemspider.com/blog/we-need-an-inchikey-resolver-and-we-need-it-now.html

    http://www.chemspider.com/blog/will-the-correct-structure-of-taxol-please-stand-up-part-3.html

    This should force us all to think about how we can insure integrity of the data, not just the publish, index, and search of the data.

    InfoMesa and the ELN (Electronic Lab Notebook) Connection

    http://pipeline.corante.com/archives/2008/02/07/write_it_down_write_it_down.php

    Today I read an interesting post on ELNs at Rich Apodaca's site, Depth First.  There are a few connections between what we are doing with InfoMesa and ELNs, especially as we have added support for Ideas, Hypothesizes and Experiments.

    The blog is interesting to read, but the comments are even more telling - here are a few that I took away...

    It's difficult to flip from one experiment to another, if you want to quickly compare conditions or check data, for example. Changing from one "page" to the next is glacially slow, and it's very hard to quickly jump back and forth between experiments without tearing your hair out in frustration. (As at many companies, our software is "networked" which means "slow", especially at busy times of the day.) The other issue is that our system is currently desktop only - no computers in the labs. Which means you make notes on scraps of paper and then transfer them when you're at your desk. That will change (with more $$$ for laptops), but it's still an issue if your lab space is limited - where do you put the laptop (and it's attendant cables and power cords) and how do you protect an expensive laptop from spills and contamination. It was much easier to keep a paper notebook at your bench, and stash it away in a drawer when it wasn't needed.

    I just scan my TLC plates on a scanner, save it as a pdf and link it to my notebook page.

    I know this question is terribly dull but while [you are] at recommending electronic note books, can anyone recommend any time sheet software. I just wanted to save myself the trouble of knocking up an excel spreadsheet ... anyone?

    I do optical materials development at a US DoD lab, and everyone I've worked with here uses a paper notebook. Up until recently, my wife also worked as a chemist doing materials chemistry at a university-affiliated contract lab, and no one there used anything but paper, either.

    I've never even seen an electronic lab notebook, and that fact makes me, at 33 years old, feel like a dinosaur. I've thought seriously about buing an ASUS eee or some other subnotebook PC and using conventional software (Open Office or the like) to keep my notes, but I'm not sure that such a system would offer me enough advantages to make it worth my time.

    I'm curious about the hardware you used in both cases. A lab notebook needs to be tolerant of some very demanding conditions - solvent spills, chemical contamination on the keyboard, and dropping to name a few.

    Then there's the issue of ergonomics - a laptop computer has a screen that might not be visible at certain angles and a keyboard that needs to be used often while standing or in some other awkward position.

    Tablet PCs seem nice, but still pricey.

    These are all things a paper notebook handle in stride. What about ELN hardware?

    I'm in an academic genetics lab, it is all paper, and I have not seen nor heard of any other labs on campus using electronic notebooks. We do a lot of supplementary data repositories in Excel and other programs

    I've been dreaming about a good ELN package for some time, but haven't been able to justify the expense, nor have I been able to get the slightest whiff of interest from my somewhat Luddite lab group(They think Zip disks(remember those?) are high-tech, and a good way to distribute large files.)

    I'm leaning towards thinking that existing CMSes will branch into this area for small groups as soon as there's sufficient demand.

    What I do is keep everything in Outlook Journal. This makes it easy to cut and paste into Office apps like Powerpoint and Excel, to share over the Exchange system, and to publish on the web. Not great, but adequate as is and approaching fairly good with a little VB programming.

    Note that this is only me in the group doing it, but if your group uses Exchange, it should scale OK.

    One of the big problems with electronic notebooks (a few years back) was that they were inadmissible as evidence in court because the date and content could be easily changed at any time. Therefore, it was really not a good record of WHEN a particular compound was made. For those of you using informal applications (MS Office and the like), you should be aware that paper notebooks (when witnessed properly) have MUCH more weight in a court case than an electronic file does.

    Does anyone here use digital cameras to record color, etc. of reactions as they occur? I suppose it'd be much more use in reaction development than anything else.