- Balachandiran Ajanthan created an add-on module to deploy reusable “SMART” health care apps inside OpenMRS.
- Christopher Zakian reimagined a “universal” search within OpenMRS that allows users to search for any system data from anywhere within the system
- Gaurav Paliwal created an add-on module to allow OpenMRS users to provide application feedback to their system administrators and the larger open source community.
- Gauthami Pingili improved both the UI of the OpenMRS Patient Matching module and improved its accuracy of finding duplicate patients.
- Goutham Vasireddi helped make it faster and easier for developers to write add-on modules for OpenMRS by creating a “wizard” for Maven.
- Jelena Skorucak reworked the attributes a person has within OpenMRS, giving clinics the flexibility to record more information about the persons.
- João Portela made significant improvements to our HTML Form Entry editor, allowing non-programmers to create more detailed, useful data collection forms for health care.
- Piotr Bryk enhanced our Metadata Sharing module to make it easier to manage the export and import of OpenMRS system configurations.
- Rahul Akula’s work helped make it possible for OpenMRS to interoperate with external laboratory information systems.
- Sai Manohar Nethi worked to create a framework for a comprehensive Human Resource add-on module for OpenMRS, allowing the system to help manage clinic personnel.
- Sreya Janaswamy created a way for OpenMRS users to translate phrases used by the application into other languages, inside the application itself.
- Sriskandarajah Suhothayan created a way for the OpenMRS Notifiable Condition Detector module to watch for certain large-scale patterns and send notifications to clinicians via SMS or e-mail.
- Suranga Kasthurirathne created a new way for OpenMRS to store clinical observations that reference other people or locations.
- Taras Chorny built a system to allow OpenMRS to be installed and upgraded using a variety of languages.
- Victor Chircu built an “Atlas” add-on module that allows OpenMRS users to opt-in to report their location, type of clinic, and number of patients on a shared map to represent the active OpenMRS community.
Examples for Exporting Access table or query to EXCEL Workbook Files Part 6
Write Data From a Recordset into an EXCEL Worksheet using EXCEL’s CopyFromRecordset (VBA)
Code to open a recordset for the data that are to be written into a worksheet in an EXCEL file (for this example, the EXCEL file does not already exist), and then to use EXCEL’s CopyFromRecordset method to copy the data from the recordset into the first worksheet in that EXCEL file, with each record being written into a separate row in the worksheet. The code allows for a header row to be created in the worksheet if this is desired. This code example uses “late binding” for the EXCEL automation.
Dim lngColumn As Long
Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strPathFileName As String, strWorksheetName As String
Dim strRecordsetDataSource As String
Dim blnEXCEL As Boolean, blnHeaderRow As Boolean
blnEXCEL = False
' Replace C:\Filename.xls with the actual path and filename
' that will be used to save the new EXCEL file into which you
' will write the data
strPathFileName = "C:\Filename.xls"
' Replace QueryOrTableName with the real name of the table or query
' whose data are to be written into the worksheet
strRecordsetDataSource = "QueryOrTableName"
' Replace True with False if you do not want the first row of
' the worksheet to be a header row (the names of the fields
' from the recordset)
blnHeaderRow = True
' Establish an EXCEL application object
On Error Resume Next
Set xlx = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Set xlx = CreateObject("Excel.Application")
blnEXCEL = True
End If
Err.Clear
On Error GoTo 0
' Change True to False if you do not want the workbook to be
' visible when the code is running
xlx.Visible = True
' Create a new EXCEL workbook
Set xlw = xlx.Workbooks.Add
' Rename the first worksheet in the EXCEL file to be the first 31
' characters of the string in the strRecordsetDataSource variable
Set xls = xlw.Worksheets(1)
xls.Name = Trim(Left(strRecordsetDataSource, 31))
' Replace A1 with the cell reference of the first cell into which the
' headers will be written (blnHeaderRow = True), or into which the data
' values will be written (blnHeaderRow = False)
Set xlc = xls.Range("A1")
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strRecordsetDataSource, dbOpenDynaset, dbReadOnly)
If rst.EOF = False And rst.BOF = False Then
' Write the header row to worksheet
If blnHeaderRow = True Then
For lngColumn = 0 To rst.Fields.Count - 1
xlc.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Name
Next lngColumn
Set xlc = xlc.Offset(1,0)
End If
' copy the recordset's data to worksheet
xlc.CopyFromRecordset rst
End If
rst.Close
Set rst = Nothing
dbs.Close
Set dbs = Nothing
' Save and close the EXCEL file, and clean up the EXCEL objects
Set xlc = Nothing
Set xls = Nothing
xlw.SaveAs strPathFileName
xlw.Close False
Set xlw = Nothing
If blnEXCEL = True Then xlx.Quit
Set xlx = Nothing
2010 SF1 U.S. Census Data Now Available Free
The Bureau of the Census reports that the 2010 Census represented “the most massive participation movement ever witnessed in our country” with some 74 percent of the households returning their census forms; the remaining were counted by census workers. Now you can have free access to this valuable national resource with Tetrad’s Sitewise App, PCensus Online or PCensus Desktop.
In any of these platforms you can retrieve information on sex, age, race Hispanic or Latino, household relationship and group quarters. Housing items include occupancy status, vacancy status and tenure (owner occupied or renter occupied).
With the Sitewise App on your iPhone/iPad, Android device, you can retrieve 2010 census data for a circle or drive-time area where you are located (or for a street address or a place name). Then review and email a 20 page report and map to understand the demographics of that location. PCensus Online gives the user the added capability to trace out a polygon or neighborhood area and compare the demographics for many areas. This lets you select the best location for a new outlet or sale territory. Use PCensus Online free with the 2010 Census.
PCensus Desktop users have increased functionality for site location and market analysis. Full mapping functionality for PCensus is provided with MapInfo Professional, Microsoft MapPoint and ArcGIS.
This PCensus trio of products with the 2010 census offers you an edge for location analysis and finding new markets.
For more information:
Sitewise App http://www.sitewiseapp.com
PCensus Online http://pco.tetrad.com/
PCensus Desktop http://www.tetrad.com/demographics/usa/census/2010-sf1.html
Google Summer of Code & OpenIntents
This year was the first year OpenIntents participated in the Google Summer of Code. We are an open source organization which creates software for Android mobile phones and tablets, with special emphasis on interoperability with other software components.
As an organization we’ve found involvement in the Google Summer of Code extremely rewarding. The students have been able to improve their skills and gain practical experience in the stages of a software project, our organization has benefited from the interest generated from the students’ work, and the wider community will continue to benefit from the code the students have delivered.
We particularly enjoyed the international aspect of the program. All students, mentors, and co-mentors lived in different countries which did not prevent us from having a great time discussing the projects through Skype and live chat sessions. We received a great number of excellent proposals, from which two very different projects were chosen for the program.
Elena Burceanu’s project aimed to enhance the Sensor Simulator. During the first weeks, the GUI was polished, both in appearance and through clever code restructuring. After enhancing the GUI the number of supported sensors was increased and now includes Android sensors for gyroscope and general rotation vector. Finally, a scenario simulator was added, which creates sensor output from a set of initial states and the ability to change the time intervals between them. The sensor’s values are smoothly interpolated between the key frames. The final product was released as version 2.0. The source code and documentation for Elena’s project are now available to view.
Google Plus: Monetizing games
Kabam was part of the initial launch of Google+ Games with two game titles, Dragons of Atlantis and Edgeworld, and we recently added Global Warfare. For these games, we integrated Google In-App Payments and we’re pleased with our games’ monetization to date. There are a couple things we learned along the way that we’re happy to share with the community.
Integrating In-App Payments
Integrating In-App Payments in our games was very simple, especially when compared to other payment platforms. There is excellent documentation available, complete with examples for each step of the purchase flow. We also used open-source libraries such as ruby-jwt to generate the tokens required for each purchase option.
We designed our games and purchase pages around the expectation of instant feedback, making sure to incorporate page loads or refreshes wherever possible. For example, in Edgeworld, a player attacking an enemy base can load the list of Platinum options instantly, without waiting for the list of payment options to load. After their Platinum purchase, the player is immediately brought back to the game, with their new currency and items waiting for them.
Pro tip: strive to reduce purchaser friction
One of the keys to maximizing revenue is to remove as much friction as possible from the purchase flow, making sure as many people as possible get from one step of the flow to the next. Many payment platforms send players to their own website and multi-page checkout flow. The Google In-App Payments approach allows us to keep players on our game page for the entire flow, making sure we can manage more of the process and reduce abandonment.
Additionally, the player’s credit card information is stored securely, so once a player has made a purchase anywhere using In-App Payments, their information is available for future purchases without additional data entry. Finally, JavaScript callbacks provided by In-App Payments allow us to show the effects of the purchase immediately, improving customer satisfaction.



