Wikipedia defines computer science as the systematic study of algorithmic processes that describe and transform information. But for me, it is simply as F-U-N!
CSI: Computer Science & I
Bytes and Pieces of Me
Yet another blog of mine - this time it logs not just errors but also learnings as I master the world of computer science. And yes, this is getting so serious.
Updating OpenMRS Schema
Attached is the initial “argument” for updating the OpenMRS Schema.
Added the following tables:
- referral
- referral_post
- referral_attachment
- referral_recipient
- doctor
- user_contact_detail
- contact_type
- specialization
I also take care of uuid which is present to almost every OpenMRS tables.
Possibly Related Posts:
Dev Update 001
I successfully checked out the source code of OpenMRS plus installed its Development Studio for Eclipse. Although I haven’t figured the advantages of using the suite over the bare Eclipse.
I also restored the demo data of OpenMRS to localhost.
Immediate item to do: Update the Database Schema for Referral Module.
Possibly Related Posts:
iPath Review
I’ve successfully installed iPath in the localhost. Documentation, as the usual case, is not always complete on it really took time before iPath was rolled out in my own PC.
iPath, at the first glance, is bare at the first stare. Perhaps, OpenMRS has just overwhelmed me with the features presented at its administration. Comparing the features present on both platform, OpenMRS is a winner over iPath. However, there are notable features that exist only iPath (or I haven’t recognized yet in OpenMRS) that are important functionalities of my thesis project.
- Discussion Group – This is the core of my thesis project. Given a referral, a discussion thread is opened for this. However, in iPath, the list is very simple that the patient information and observations are not (obviously) linked to each other. Unlike in OpenMRS, everything seems connected.
- Users of iPath can use the system to upload presentations and published slideshows.
- Alerts are like tickets of Triage – Very essential to my thesis project
- News and blog-like pages publish
- Duty plan
Possibly Related Posts:
- Updating OpenMRS Schema
- Dev Update 001
- CS 296 Slides
- OpenMRS Review
- Alert! Fourier Transforms Ahead!
CS 296 Slides
Here are the slides I have presented during our CS 296 class. These summarize the concepts, reviews of related literature and to-do lists of my thesis project.
CS296 Part 1 – Open Office Document
CS296 Part 2 – Open Office Document
Possibly Related Posts:
OpenMRS Review
OpenMRS (Wiki here) is an open-source and community-developed electronic medical record system platform. According to the website it is responding for the need of the developing world where AIDS, tuberculosis and malaria afflict the lives of millions. It is very important to note here that since my thesis project is focusing on tuberculosis, OpenMRS might be the tool or at least the foundation of my work.
OpenMRS enables design of a customizable system for users with no programming knowledge but with medical and systems analysis knowhow. Although, I have no formal trainings for medical terms, one can easily grasps the terms like encounters, observations, etc.
Since it is customizable, the database structure is not dependent on the data types. Although it is customizable, in order to minimize the use of free text and to maximize the use of coded information, the main feature of the system is the concept dictionary. I cannot neglect this factor because it stores all diagnosis, tests, procedures, drugs and other general questions and potential answers.
Enhancement and Tasks (My Part)
- Algorithm or concept of OpenMRS Identification Number
- An Alias field for Patient. This should be visible to the normal users and not the plain patient information like actual names, etc.
- The entire diagnosis module
- Securing DICOM images
- Secured transmission of DICOM images
Possibly Related Posts:
Look Up! It’s a Chord!
The introduction of the paper, Looking Up Data in P2P Systems [1], presents several features why P2P systems as decentralized facilities become attractive. These reasons include minimal efforts to start the system, utilizations of the tremendous computation and storage resources on computers across the Internet, and fault-tolerant. Thus, without any centralized servers or hierarchy, how can these be achieved and solved the lookup problem.
The research to address the lookup problem leads to the implementation of distributed hash tables where in each node that contains the IP address of its neighbors where it can be retrieved by single hash function.
Before DHT, there were several implementations to address the critical common problem in P2P systems. Napster uses a central database to map the file location. Scalable Domain Name System uses hierarchy wherein traversal of path down to the node containing the desired data is happening. However, these schemes post resilience problems. Thus, asymmetric is favorable since it allow nodes to self-organize and since no node is more important than any other node as far as the lookup process if concerned. These asymmetric methods were discussed in the previous blog post.
The next section of the paper discusses the DHT in detail. Naming process of the published file includes conversion of the name to a numeric key using hash functions such as SHA-1. This file shall be stored at the responsible node(s) for that key. Thus, in order for the reader to retrieve the published file, he needs to obtain its name, convert it to a key and call lookup(key).
Issues should be addressed in implementing DHTs. These are load-balancing, where IDs should be close to the key in the ID space, forwarding, distance or closeness function and adaptive rebuilding of routing tables. More challenges are presented in designing the lookup algorithms at the latter part of the paper – operation costs, fault tolerance and concurrent changes, proximity, malicious nodes and efficient use of indexing and keyword search.
The following routing algorithm are then suggested to support DHTs. These are skiplist-like routing such as Chord, tree-like data structure traversal such as Tapestry and Kademlia, and routing in multiple d-dimensional cartesian coordinate space such as CAN.
To conclude, designing the lookup algorithm considers lots of factors. However, in my opinion, the algorithm should prioritize scalability or the adaptability of the system to stabilize dynamic network structures. Computational and operational costs will be negligible as computers become more capable of solving complex functions.
[1] Looking Up Data in P2P Systems, Hari Balakrishnan, M. Frans Kaashoek, David Karger, Robert Morris, and Ion Stoica.
Possibly Related Posts:
- Chord-ially Inviting
- Relationship Between ASes: It’s Complicated
- Internalizing Interdomain Internet Routing
- Fly, DARPA, Fly!
- Does The End Justify The Means?
Chord-ially Inviting
Due to the popularity of peer-to-peer applications, such softwares are challenged, or challenged each other, in terms of the features it can bring. These features may include the redundant storage, persistence, selection of neighbor servers, anonymity, search capabilities and authentication. However, the efficiency in locating the data items is considered as the core operation of peer-to-peer applications. Chord [1] attempts to address the issue of locating the node that stores a particular data item by providing the key onto a node given a key.
Chord can be described as simple due to non-complexity of algorithm by routing a key through a sequence of O(log N) other nodes toward the destination. The maintenance of the dynamic network topology of Chord, although slow, only needs one information per node to guarantee correctness of rearranging the routing of queries.
The second section of the paper discusses the drawbacks of the other implementations that address the same issue of locating the data file or a node. These are DNS, Freenet peer-to-peer storage system, Ohaha system, Globe system, Plaxton and Ocean Store, Pastry and CAN. Chord traded anonymity features for efficiency and scalability in terms of concurrent node joins and failures.
The next section of the paper presents some algorithms of Chord to solve the issues while reconstructing or stabilizing the dynamic topology where nodes join and depart with only slow but acceptable overheads. Based on their own results from their experiments and simulations, Chord proves that it scales with the number of nodes, stabilizes from large numbers of simultaneous node joins and departures. The main issue of providing the correct lookups is address as well. With these results, it shows how robust the algorithm is inspite of outdated routing information cached in some nodes.
The qualities of Chord was taken as an advantage, as well as other known P2P schemes, for the use of Distributed Hash tables as the later is utilizing a single function.
The simplicity of the Chord does not mean it solves the lookup problem for P2P application since it is also like other algorithms that post some drawbacks. But rather Chord provides the building blocks for more complicated network topologies.
[1] Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications, Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrishnan
Possibly Related Posts:
- Look Up! It’s a Chord!
- Relationship Between ASes: It’s Complicated
- Internalizing Interdomain Internet Routing
- Fly, DARPA, Fly!
- Does The End Justify The Means?
You Compute Me
Are you a double? Because as long as you are there, thoughts of you always float inside my head.
Fuckyeah, after 3 months, that’s the only thing that I’ve blogged here. Wahaha.
You NP-complete me.
Possibly Related Posts:
Struts Strategy
Some of my notes before we present Struts to the Triage team as the framework to use in the development. The list is so, uhm, unorganized and kinda random.
Easy to Learn
According to [1], Struts can be learned in 4 days!
Model View Controller
Struts framework is based on Model View Controller (MVC) architecture. Model is represented as a set of JavaBeans. For the View , the framework works well with JavaServer Pages , including JSTL and JSF , as well as Velocity Templates , XSLT , and other presentation systems. [2] The framework provides its own web Controller component.
Best Practices
Here are some tips or solutions to some problems in web applications [3]:
- Screen with dynamic fields
- Secure JSP Pages
- Validation of service requester: Login-check
- Stack maintenance (for bread crumbs)
- Action chaining
Tutorials
[4], [7], [8]
Struts and JSF
Existing Struts apps should ideally be able to migrate one page at a time to using JavaServer Faces component tags. Either the standard ones shipped with JavaServer Faces, or from any third-party component library. [5] The integration library makes it possible to change one JavaServer page at a time. Keep your back-end application logic, and everything works.
The first thing to remember is that JavaServer Faces, even though it has a front controller architecture, is all about the view tier—of a Model View Controller(MVC) architecture. That’s where having a controller like Struts behind JavaServer Faces occasionally still makes sense.
Struts vs JSF
If you have an aggressive schedule with not much time to deal with evaluating different vendors or dealing with support for new JSF implementations, Struts may be the way to go. But from a strategic direction and programming model, JSF should be the target of new applications. [6]
Struts Against JSF, GWT and the Whole World
[9]
[1] http://www.activelearning.ph/courses/pdf/341_activeLearningStruts.pdf
[2] http://en.wikibooks.org/wiki/Java_Programming/Struts
[3] http://www.javaworld.com/javaworld/jw-09-2004/jw-0913-struts.html
[4] http://www.vaannila.com/struts-2/struts-2-tutorial/struts-2-tutorial.html
[5] http://java.sun.com/developer/technicalArticles/Interviews/jsf_mcClanahan.html
[6] http://java.sys-con.com/node/46516
[7] http://javaboutique.internet.com/tutorials/Struts/
[8] http://www.roseindia.net/struts/
[9] http://www.theserverside.com/news/thread.tss?thread_id=47344
Possibly Related Posts:
The Curious Case Of David Garcia Jr.
Last Monday, during the Triage meeting with a larger group, we had sort of debated how to consider an entry as a duplicate from the previous given some information. In database design point of view, what are the primary keys (so duplication of rows is not allowed)?
To some, they point out that if two persons have the same first and last names, having the same birthday leads to duplicate entries.
But, how about the case of the famous David Garcia Jr. twins?
Possibly Related Posts:
Programming is the only job I can think of where I get to be both an engineer and an artist. There's an incredible, rigorous, technical element to it, which I like because you have to do very precise thinking. On the other hand, it has a wildly creative side where the boundaries of imagination are the only real limitation.
- A. Hertzfeld