Monthly Archives: May 2014

All Aboard the Coding Train!

cue Ozzy Osbourne laughter…

This blog is coming to you direct from Amtrak Northeast Regional Train 95, where Stoney Jackson and I are on our way to POSSE 2014 at Drexel University in Philadelphia, PA. This is becoming an annual tradition for us.

So, why is it called the Coding Train? Because we are spending the 5 hour train ride writing code!

When we did this for the first time last year, we worked on the code for the grading scripts that I had started writing in bash (https://github.com/kwurst/grading-scripts/tree/bash-version). Stoney started adding error checking, and then a Python version – neither of which he finished, but we learned a lot about how GitHub works for collaborative development.

This year we discussed a number of options for what project we would sprint on (after we spent a lot of time on professor-talk about curricula, and courses, and learning outcomes, and assessment) but we ended up back on the same project. This time our starting point was the Python conversion of the original scripts that I had started in December, and which I had just begun to refactor this month (https://github.com/kwurst/grading-scripts/tree/master).

Stoney has been doing some serious refactoring on the code, adding one major new feature: a JSON configuration file so that I don’t need 15 different scripts – just different configuration files to pass to a single, more general script. He’s also undertaken a major cleanup of the code, and added the project’s first unit test!

I, on the other hand, have been installing tools that Stoney suggested – git flow and git bash prompt, and in the process having to debug my Mac’s installation of Homebrew and cleaning up my .bashrc file (being completely ignored by my shell) and my .bash_profile file (full of lots of cruft from previous installs.)

Stoney has just pushed his branch, so now it’s time for me to pull it, and test it on some data on my computer. And we’re almost to Philadelphia, so just in time…

From the blog On becoming an Eccentric Professor... » CS@Worcester by Karl R. Wurst and used with permission of the author. All other rights reserved by the author.

Week 13 (what did i learn from CS 401)

  • What did you learn about:
    • Teamwork? : our group was work very well. exchange the idea is the important thing to working with a group.
    • Communication?: the communication  between our group the the openMRS is not working well. Email is very good to communicate with each other in the group.
    • working on the large project ? : working on the large project on the openMRS  is not ready hard if we know what is a  direction to working on.
    • Working with a people you don’t know personally?: I did not know my group member until I join in CS 401 class, but we were working very good. Unfortunately ,  the communication between our group and  the OpenMRS developer was very hard, sometime, we couldn’t get what they want.
    • New (to you) technologies, and how did you learn about them? That is my first time to use Github and wiki page.  I also have a change to practice  working on J unit test
  • What was your biggest challenge? : ❖ Communication between our group and the OpenMRS
    leaders!
    ❖ Documentation was vague, but they didn’t seem to
    welcome any changes!
    ❖ Led to a lot of time spent troubleshooting how to
    install/build/run any of the software
  • What do you wish you had done or learned, but did not get to? I need to learn more how to work on OpenMRS , I wish I had  a well experience to working on the OpenMRS page, because our process to work on  the tickets of the openMRS was not success.

From the blog herangoc » cs@worcester by emtrieu and used with permission of the author. All other rights reserved by the author.

Android Fragments Part 1 XML

I was originally thinking I would talk about inheritance in this blog entry but I decided to step it up a notch and talk about something more interesting. I will be breaking the content up between two or three blogs as it will be fairly in depth.

Any one who has been programming in Android recently, probably knows fragments are a necessity if you want to have cool looking UI’s on multiple devices but If your new to Android and have not used fragments or simply don’t get them, this blog/tutorial might help you.  Fragments were introduced back in February of 2011 with the release of Android 3.0 so this is not a brand new topic but its a crucial one and so here it goes.

Fragments allow you the developer to have separate sub activities within your current activity and essentially host multiple independent UI’s on the same screen.  They are great for displaying multiple activities at once on larger tablets and you can even replace existing fragments with other fragments on the fly.  That means you no longer need to have an activity for every page.  Sort of any way.  A single activity lets say running on a phone for instance, so it is only displaying one fragment at a time, can switch fragments in and out as it needs them; but realize that “fragment” is just a clever name for a sub activity so every fragment still must be hosted by an activity.  If your developing in Android you will want to get comfortable with fragments so you can have a professional looking app, regardless of what device its being run on.

There are two ways android allows you to use fragment in your XML file.  You can hard code a fragments into a your page layout or you can create FrameLayout and then add fragments late using code.  The second option, using a FrameLayout, allows you to not only add but also replace fragments on the fly using code.  Taking this approach will provide you much more flexibility and so its the approach I will be showing using code from my most recent project.

Here is the rafter_output.xml file from my Rafter Maker project.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:baselineAligned="false"
 android:orientation="horizontal" >

 <FrameLayout
 android:id="@+id/fragmenta"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_weight="7" />

 <FrameLayout
 android:id="@+id/fragmentb"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_weight="3" />

</LinearLayout>

Notice at line 6 the orientation is set to horizontal and then on lines 12 and 18 I have applied a weight to each FrameLayout. This will divide the screen real-estate amongst each fragment accordingly when we load them in later.  Something worth mentioning here is how weights are calculated, only because in my opinion the process is a bit counter intuitive.  One would think that if fragmentA has a weight of 2 and fragmentB has a weight of 1 that we add them together to get 3 and then divide the weight of either fragment by that 3 to get the percentage it occupies on screen  Meaning fragmentA would get 66% and fragmentB gets 33% but that is not the case, its actually the reverse.  FragmentB will only occupy 66% while fragmentA will occupies the other 33%.  Why it works that way I could not say.

Now next I will show the xml page layouts that we will be displaying in the fragments, which will eventually get loaded into our FrameLayouts.  Below is a simplified version of my fragment_rafter_output.xml file.  They original has many more rows of data which is why I choses to use a TableLayout as the root of the xml page.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/tableLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_alignParentTop="true"
 android:layout_marginLeft="10dp"
 android:background="@color/theme_secondary_color" >

 <TableRow
 android:id="@+id/tableRow1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Angle A = "
 android:textAppearance="?android:attr/textAppearanceLarge"
 android:textSize="20sp" />

 <TextView
 android:id="@+id/tva"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="0"
 android:textAppearance="?android:attr/textAppearanceLarge"
 android:textColor="@color/text_color"
 android:textSize="20sp" />
 </TableRow>
</TableLayout>

Now here we have my fragment_image_output.xml. file.  I’ll show the whole file because most of it will become relevant as we move on.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/RootView">

 <View
 android:layout_width="10dp"
 android:layout_height="fill_parent"
 android:background="@drawable/shadow_left" />

 <LinearLayout
 android:id="@+id/llbuttons"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_marginLeft="10dp"
 android:layout_marginRight="5dp"
 android:layout_marginBottom="5dp"
 android:orientation="horizontal" >

 <Button
 android:id="@+id/bback"
 style="@style/ButtonText"
 android:layout_weight="2.5"
 android:background="@drawable/btn_blue"
 android:text="&lt;" />
 <Button
 android:id="@+id/bcreate"
 style="@style/ButtonText"
 android:layout_weight="1"
 android:background="@drawable/btn_blue"
 android:text="create" />

 <Button
 android:id="@+id/bnext"
 style="@style/ButtonText"
 android:layout_weight="2.5"
 android:background="@drawable/btn_blue"
 android:text="&gt;" />
 </LinearLayout>

 <TextView
 android:id="@+id/tvStep"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 android:text="data"
 android:textSize="20sp"
 android:textStyle="bold" />

 <FrameLayout
 android:id="@+id/flimage"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_below="@id/tvStep"
 android:layout_above="@id/llbuttons">

 <ImageView
 android:id="@+id/ivInstImage"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />
 </FrameLayout>

</RelativeLayout>

The first thing I want to point out is a small added bonus. If you look at lines 7-10 you will notice a View which sets a background gradient called shadow which is 10 dp wide and is the height of the page. This will make the page to its left appear closer to the user and add an element of depth to your app. The other thing to notice is the three buttons. We will be using those later to update our fragments. The last thing to notice is the FrameLayout containing our ImageView. When we click the next or back button a new rafter image will be loaded and the data fragment will be updated accordingly as well.

Well, that takes care of the XML layouts we will need, the next part to handle will be the the code that defines our fragments and our host activity in Java.

Till then,

Jason Hintlian

From the blog jasonhintlian » cs-wsu by jasonhintlian and used with permission of the author. All other rights reserved by the author.

Week 12 ( book presentation : Java Effective )

  • Sum up the book in one sentence.

This book will help you to make the most effective use of the java programming language, this book has 78 items, and each item is the great benefit for the best and the most experienced programmer.

  • Who do I think would benefit most from this book?

This book is very helpful for the people, who serious to know how and why the java programing but that is not mean for the beginner of java, it expect to who should be comfortable with programing in java.

  • Who is the intended audience for the book?

Audience: everyone can be the audience for this book, special for who interesting on java programing.

  • What does the book cover?

This second edition of the java effective book, it has been updated to discuss Java 6 language features, and in the very first pages of the book describes some of the new topics covered as:

  • New coverage of generics, enums, annotations, autoboxing, the for-each loop, varargs, concurrency utilities, and much more
  • Updated techniques and best practices on classic topics, including objects, classes, libraries, methods, and serialization
  • How to avoid the traps and pitfalls of commonly misunderstood subtleties of the language
  • Focus on the language and its most fundamental libraries: java. Lang, java.util , and, to a lesser extent, java.util.concurrent and java.io.
  • Was the material in the book useful to me?

In my opinion, all the 78 items in this book are very helpful and important to me, even some of them are very basic knowledge of java coding, but every basic step is very important to be a good final. As when u builds the house if the foundation is not hard and strong the beautiful house may collapse.

  • Would any of the material from this book be useful in earlier CS courses? Which ones?

This book should use for the second year student of the computer science major.

  • What was the most important thing I learned from this book?

I used to take the java class before, but now when I read this book that I very helpful for me. It improved my skill in java programing languages.

  • Did I enjoy reading this book?  yes I do.
  • Would I recommend it to other? Even I known a lot of you already took the java class . I think  when you have time  you should read this  book , it may help you to improve you skill to build the program.
  • Would I buy the own copy? yes, but that book also available on the online.

From the blog herangoc » cs@worcester by emtrieu and used with permission of the author. All other rights reserved by the author.

Week 11( what we did in the class)

At beginning of the class on ( April/ 7/2014)  , the same thing with every other class, the group leader presented the group status . Our group still get stuck on the ticket  TRUNK- 243, that is why , we need more time to working on  it.  Fortunately, I  found the file (PersonAttributeHelper.java ) of the project ( openMRS-core-master ) on the git-hub , that may have some information to solve the problem of the ticket TRUNK-243.

From the blog herangoc » cs@worcester by emtrieu and used with permission of the author. All other rights reserved by the author.

Final Push

The previous past couple of weeks I have been neglecting the Modify Dosage System ticket due to switching gears and reading (skimming through parts) the Head First Design Pattern book. I found the book to be enjoyable to read and full of useful information. It would be a great book to somehow integrate into the new software development track. Design patterns play such an essential role in developing software that is efficient and maintainable that I believe it would be a great benefit for freshmen to become familiar with them. I enjoyed listening to everyone’s presentations, it was a great way to find out the books material without having to read it yourself. I believe that for the most part everyone enjoyed this project learned a great deal from their own and other’s presentations.
With book presentations over my plans for the final week is to (with help from above) be able to figure out how to correctly connect our new modify dosage system to the existing database that the current drug dosage system is using. The last time I was working on it I was able to input information but when I attempted to save the new dose it would get replaced with the current dose instead. I get the feeling that some function is being triggered dynamically somewhere which leads to my input getting reverted to the original dose. The calendar input box will select the date and save correctly and the save button also functions the way we want it to, so it’s really just the dosage button that is being a nuisance. Hopefully this week we can put some significant time towards this issue, I prefer to leave this class with my head held high and a modify dosage system works! TR and I plan to meet for a full day to see if we can resolve this issue. We also plan to work on our presentation so it would be great if we could get the system to actually work before Wednesday’s class.
Till Next Time,
ML

From the blog mlopatka by matthewlopatka and used with permission of the author. All other rights reserved by the author.

Live Asset Reloading with guile-2d

Guile-2d provides a dynamic environment in which a developer can build
a game incrementally as it runs via the Guile REPL. It’s nice to be
able to hot-swap code and have the running game reflect the changes
made, but what about the game data files? If an image file or other
game asset is modified, it would be nice if the game engine took
notice and reloaded it automatically. This is what guile-2d’s live
asset reloading feature does.

The new (2d live-reload) module provides the live-reload
procedure. live-reload takes a procedure like load-texture
and returns a new procedure that adds the live reload magic. The new
procedure returns assets wrapped in a signal, a time-varying value. A
coroutine is started that periodically checks if the asset file has
been modified, and if so, reloads the asset and propagates it via the
signal. Game objects that depend on the asset will be regenerated
immediately.

Here’s some example code:

(define load-texture/live
  (live-reload load-texture))

(define-signal texture
  (load-texture/live "images/p1_front.png"))

(define-signal sprite
  (signal-map
   (lambda (texture)
     (make-sprite texture
                  #:position (vector2 320 240)))
   texture))

load-texture/live loads textures and reloads them when they change
on disk. Every time the texture is reloaded, the sprite is
regenerated using the new texture.

Here’s a screencast to see live reloading in action:

Guile-2d is ever-so-slowly approaching a 0.2 release. Stay tuned!

From the blog dthompson by David Thompson and used with permission of the author. All other rights reserved by the author.