Category: Uncategorized

  • Substance Abuse Data Exchanges with FHIR: the ASU SHARES Program

    As part of my work at Arizona State University, I’ve been developing the technology stack for the Substance Use Health Records Sharing (SHARES) program. This initiative aims to transform how sensitive health data for substance use disorders (SUD) are managed and shared across healthcare systems. At a personal technical level, my goal is to provide a set of flexible developer libraries, pre-canned API services, and exemplar web UI applications for all U.S. entities to comply with 42 CFR part 2 using FHIR.

    While management of patient consent directives has its own set of challenges, such as those being addressed by the FAST Consent Management Implementation Guide, I’m more interested in the runtime enforcement of patient data sharing elections between organizations. Consent enforcement is an incredibly challenging area of healthcare interoperability wrought with legal and clinicotechnical quandaries.

    SHARES has been on a publishing spree, and I’m proud to.. share.. that FHIR Granular Sensitive Data Segmentation has been published in Applied Clinical Informatics (ACI). The referenced data labeling approach to information sensitivity classification is done in compliance with the FHIR DS4P implementation guide and heavily influenced by the ONC LEAP Computable Consent program. While we didn’t reuse LEAP’s Java and JavaScript code as we wanted SHARES to be entirely done in native TypeScript, we still retain some compatibility with LEAP’s CDS Hooks-based FHIR data labeling service using a modified version of their schema. SHARES has since moved on, however, to supporting numerous other means of integration for security label-based data segmentation.

    Since this manuscript was drafted, we’ve been hard at working rearchitecting the technology platform for scale, plugability of classification engines, and integration methodology. We also recently released v1 of a visual Consent Simulator that will be a focal point of upcoming technical iterations.

    I’m particularly excited for the next few technical phases that will use the new pluggable architecture to provide alternative means of data segmentation. More on that in future publications. 🙂

    For more information on the SHARES program, visit https://www.asushares.com .

  • GovCIO Quotes

    I was pleasantly surprised to hear that GovCIO quoted one of my recent presentations in a short article on H7 FHIR Foundry: https://govciomedia.com/hl7s-fhir-foundry-speeds-up-health-data-standards-adoption/

    With the Centers for Medicare and Medicaid Services (CMS) pushing for the adoption of FHIR APIs to streamline healthcare data exchange and support value-based care, HL7 and the FHIR Foundry initiative are the best positioned vehicles for providing the tools, resources, and community support to simplify implementations in practice. I’m grateful to be able to contribute!

  • KNARTwork 2022 Rerelease

    The HL7 Knowledge Artifact specification has been an experiment in portable clinical decision support (CDS). While unlikely to see production adoption due to equivalent concepts now in FHIR, it is nevertheless useful to see a standards-based representation of clinical knowledge in a working UI. I am updating the 2017 release of the KNARTwork Community Knowledge Artifact editor — part of the Clinical Quality Framework — to 2022 standards. The live copy is now available at:

    https://knartwork.prestonlee.com

    KNARTwork runs entirely in browser as a single-page app (SPA): there is no server side persistence. All XML document loading, manipulation, validation, and export is done entirely in browser. It implements Clinical Decision Support Knowledge Artifact Specification, Release 1.3, of which I was also heavily involved in. There are some remaining bugs due to being upgraded from Angular 5 to Angular 14. 🙂

    KNARTwork’s code is open source and free to copy, remix, and reuse at the KNARTwork GitHub repository.

  • space_elevator ActionCable Client for Ruby

    I have an interactive command-line daemon (in Ruby) that I needed to receive push events via WebSockets from an ActionCable-enabled Rails application. I eventually succeeded, but doing so required diving into the weeds of ActionCable’s wire protocol since I didn’t want to rewrite my application in JavaScript solely to leverage the official client code.

    Because I’m such a nice guy, I’ve extracted the code and released an easy-to-use client as the space_elevator gem. When combined with gems like thor, it makes writing bi-directional command line API clients a breeze. You can publish/subscribe to multiple channels simultaneously, and all in an event-driven manner. Check out the channel-y goodness and don’t forget to file any issues!

  • BitTorious Trials

    New in BitTorious v4!

    BitTorious v4 has been released, and has received a comprehensive internal upgrade to Rails 5 and PostgreSQL 9.5. Also, all official releases from v4 forward will be built as portable Docker containers and distributed via Docker Hub.

    Due to attempted abuses of the evaluation environment, we’ve unfortunately had to discontinue the publicly-accessible BitTorious trial portal, but would be happy to give you a live demo of the current system if you’ve read one of the papers and are interested in deployment. There are several private instances of the portal in active use, though for security reasons not publicly published.

    Get it yourself!

    Builds via Docker Hub

    GitHub Source Code, Screenshots and Setup Instructions

     

  • How To Custom Brand The OpenStack “Horizon” Dashboard

    I’m deploying OpenStack “Essex” on Ubuntu Server 12.04, and have the openstack-dashboard package installed to provide the web-based “Horizon” GUI component newly added for the Essex release. Canonical also provides an openstack-dashboard-ubuntu-theme package that brands the Python-based Django GUI. Despite that the last major Canonical-maintained packages based on the OpenStack “Diablo” release in Ubuntu 11.10 did not include an administrative GUI, Horizon — as a standalone component — has been very stable for a mainstream debut. In the future, though, I’d like to see a quick and easy way to change the default branding to use your own logo, colors, and titles using only the GUI’s administrative screens.

    The horizon documents briefly mention branding customization to give you a head start, but you probably want more specific steps. Here’s my custom-branded Horizon dashboard with custom colors, logo, and site title:

    Once you know where to make the appropriate changes, it’s super simple. Step-by-step:

    1. Create a graphical logo with a transparent background. The text “TGen Cloud” in this example is actually rendered via .png files of multiple sizes I created with a graphics program. I used a 200×27 for the logged-in banner graphic, and 365×50 for the login screen graphic.
    2. Set the HTML title (shown at the top of the browser window) by adding the following line to /etc/openstack-dashboard/local_settings.py
      SITE_BRANDING = "Example, Inc. Cloud"
    3. Upload your new graphic files to:
      /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/img/
    4. Create a new CSS stylesheet — we’ll call ours custom.css — in the directory:
      /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/css/
    5. Edit your CSS file using the following as a starting point for customization, which simply overrides the Ubuntu customizations made in the ubuntu.css file. Change the colors and image file names as appropriate, though the relative directory paths should be the same.
      /*
      * New theme colors for dashboard that override the defaults:
      *  dark blue: #355796 / rgb(53, 87, 150)
      *  light blue: #BAD3E1 / rgb(186, 211, 225)
      *
      * By Preston Lee <plee@tgen.org>
      */
      h1.brand {
      background: #355796 repeat-x top left;
      border-bottom: 2px solid #BAD3E1;
      }
      
      h1.brand a {
      background: url(../img/my_cloud_logo_small.png) top left no-repeat;
      }
      
      #splash .login {
      background: #355796 url(../img/my_cloud_logo_medium.png) no-repeat center 35px;
      }
      
      #splash .login .modal-header {
      border-top: 1px solid #BAD3E1;
      }
      
      .btn-primary {
      background-image: none !important;
      background-color: #355796 !important;
      border: none !important;
      box-shadow: none;
      }
      
      .btn-primary:hover,
      .btn-primary:active {
      border: none;
      box-shadow: none;
      background-color: #BAD3E1 !important;
      text-decoration: none;
      }
    6. Open the following HTML template in an editor:
      /usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html
    7. Add a line to include your new stylesheet: (I’ve highlighted the new line in bold.)
      ...
       <link href='{{ STATIC_URL }}bootstrap/css/bootstrap.min.css' media='screen' rel='stylesheet' />
       <link href='{{ STATIC_URL }}dashboard/css/{% choose_css %}' media='screen' rel='stylesheet' />
       <link href='{{ STATIC_URL }}dashboard/css/custom.css' media='screen' rel='stylesheet' />
      ...
    8. Restart apache just for good measure:
       sudo service apache2 restart
    9. Reload the dashboard in your browser and fine tune your CSS appropriate.

    You’re done!

    [ezcc]

  • OpenStack Nova Essex MySQL Database Schema Diagram and SQL

    I’m in the process of setting up an OpenStack Essex installation on a small cluster of Ubuntu 12.04 servers using the Canonical-supplied and supported packages. I innocently and unfortunately ended up with a state corruption issue causing nova-compute to crash on startup, and found it necessary to dive into the schema as a troubleshooting aid. I used MySQL workbench to reverse-engineer the schema into an EER diagram as well as raw SQL. I’m sure others will find this useful as the OpenStack community slowly upgrades to Essex. Hope it helps!

    [Download diagram, SQL, and MySQL workbench file]

  • Hacking Your Own Genome

    Many thanks to everyone that participated in my Hacking Your Own Genome session at today’s Desert Code Camp 2011.2 event in Chandler, Arizona! I’m very passionate about the topic area, and hope the session was both entertaining and useful. Here are the presentation materials, source code for the “youandme” application, and a few other links you might find useful. Thanks again for the opportunity and don’t hesitate to reach out and stay connected!

    Presentation:

    Additional Links:

    Have fun!

     

  • Amazon Finally Adds Lending Library

    Late is better than never! (From the press release. Customer details here.)

    With an Amazon Prime membership, Kindle owners can now choose from thousands of books to borrow for free - including over 100 current and former New York Times Bestsellers - as frequently as a book a month, with no due dates
    Books can be borrowed and read on all Kindle E Ink devices and Kindle Fire

    Not exactly the most giving of terms, but it’s a start. Thanks to the Kindle team!

  • 10 Universal Weight Loss Tips For Men

    I’ve spent the majority of my adult life in the “obese” clinical strata, and have only in recent years taken to caring about maintaining a reasonable weight. I am an American male, 5’10”, with Koren-Caucation ancestry and have ranged between 149 and 172 pounds in the past year. My bodies individual natural comfort zone seems to be in the 150-155 range. At my heaviest I capped out in the 200-210 range. In other words, my physical stature and default dietary habits are spectacularly unspectacular for an American, and I consider myself fairly representative of the “average American male”. I lost most of those excess pounds (180+) in a fairly short amount of time. Everyone is unique in many ways, but from my own research and personal experimentation I believe these points to be largely universal for adult men.

    Weight And Health

    Weight loss does not necessarily correlate to health gain. It’s possible to lose weight on a diet of Twinkies, but you would be seriously lacking in dietary components despite being lighter, and most likely put yourself at higher risk of heart disease and diabetes. Assuming that part of your motivation for weight loss comes from a desire for better health and longevity, remember to see the forest through the trees. It’s great to look healthy, and better to be healthy.

    As a general guidelines, stick to eating actual foods. (Edible substances like high fructose corn syrup should not be considered “food”.) If you couldn’t produce the ingredient if you really wanted to, you probably don’t want to eat it. You have tons of zero-calorie sugar replacements–Splenda, Nutrasweet etc.–but these are not magic bullets and generally should be avoided as “crutch” substances. See Michael Pollan’s excellent Food Rules for guidelines.

    10 Tips

    1. Weight yourself daily at a consistent time with no excuses. It’s especially important to continue weighting yourself when you’re struggling to hold yourself accountable and to prevent prolonged lapses of judgement.
    2. Treat weight management as a lifestyle, not a program. Programs are things you do for a short period of time before going back to the status quo. Lifestyle changes are long-term investments made for the benefit of yourself and those you love.
    3. Drink water and tea when you are thirsty. Have other tasty beverages for enjoyment, not to quench thirst. Beer and other alcoholic drinks are unfortunately high in calories, as are many sodas and even fruit juices. Water first.
    4. Shop when you’re full. Plowing through the aisles on an omg-I-have-nothing-to-eat rampage is going to result in a cabinet full of snacks. You body evolved to crave certain foods to compensate for natural rarity. When you’re hungry, reason goes out the door, and satisfying cravings for those foods that are now readily available becomes the easiest fix.
    5. Visit only upper-tier merchants such as Whole Foods and Trader Joe’s when at all possible. In addition to higher quality foods, they do a much better job than conventional grocery stores of not barraging you with excess junk. Fruits and vegetables are also of notably higher quality and tastiness.
    6. Maintain the lifestyle because “nothing tastes as good as fit feels”, not to punish or deprive yourself.
    7. Talk about solutions with others doing the same. Being around others taking action is extremely encouraging and motivating. Keep in mind the exact opposite also applies.
    8. Focus more on diet than exercise. Both are necessary, but you’d be better served with a good diet and only 30 minutes of exercise per week than horrible diet and 4 hours of exercise per week. Many weight loss systems prescribe disciplined physical regiments, but remember that diet matters more.
    9. Weight train for weight loss. Additional muscle mass allows you to burn calories faster, even when you’re not exercising. Cardiovascular exercise is great for your heart and blood pressure, but doesn’t build the calorie burning, protein-consuming muscle like weight training does. Also remember that you cannot control where you lose weight: only where you build muscle. No one is going to see your rock hard abdominal muscles if your mouth can’t trade in the cheese sandwiches.
    10. Know when to break the rules. If you use a formal system such as Paleo or Atkins you may have strict guidelines. At some point, however, most foods are going to be ok in moderation so long as you can control yourself. It’s ok to not be perfect!

     

     

     

     

     

     

     

    Good living and good luck. 🙂