Guile-2D is now named "Sly"

Guile-2D the a working title for my game engine written in Guile
Scheme. The name has become very limiting since I realized that it
wouldn’t be much extra work to support 3D graphics. After much
indecision, I’ve finally decided on an official name: Sly. I think
it’s a great name. It’s short, easy to type, and slyness is one of
the definitions of “guile”.

In other news:

  • Sly has a new contributor!
    Jordan Russel has written a
    new module
    that provides joystick input support.

  • I have written a
    module for describing animations.

  • I have been slowly working on a scene graph implementation that
    plays well with the functional reactive programming API.

  • As mentioned above, 3D graphics support is on the way! So far, I
    have implemented a perspective projection matrix, a “look at”
    matrix, and a cube primitive.

3D Scene Graph

Check out the Sly source code repository on
Gitorious!

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

Posted in FOSS, gamedev, gnu, guile, scheme, WSU | Comments Off

De-lurking…

I have been lurking in the OpenMRS project for the last 6 months or so. I have read wiki pages, installed the development environment, cloned the repository and built the code, and listened in on a number of OpenMRS weekly developer meetings.

As I begin my sabbatical, I realized that it was time to finally introduce myself to the project members. So here’s what I posted to the OpenMRS Developers mailing list, and to OpenMRS Talk:

My name is Karl Wurst and I am a Professor of Computer Science at Worcester State University in Worcester, MA, USA (about 80 km west of Boston.)

Our university has recently created a concentration in Software Development for our Computer Science majors, and I am one of the primary instructors for the courses in this concentration. I am currently on sabbatical (no teaching responsibilities) from June through December 2014 and my plan is to participate in OpenMRS to improve my somewhat outdated Software Engineering skills.

I have installed the development environment, built the openmrs-core code, and now I will begin looking for tickets that I can work on. I am excited that the 1.10 beta release is imminent, and hope that I can be of some help in that sprint. I am also very interested in the development, testing, integration, and release processes as a way of seeing “real-life” examples of many of the tools and technologies that I have been reading about, but not had any hands-on experience with.

I am also part of the Foss2Serve/POSSE (foss2serve.org) group that is encouraging faculty to have students participate in Humanitarian FOSS projects as part of their coursework, and have been doing that primarily with our senior project course with varying amounts of success. I would like to have my students participate in OpenMRS beginning with the Spring 2015 semester (January through May 2015.) I want to get familiar with the project myself, first, so that I can direct them.

I also want to use OpenMRS for examples in our courses on software process and management, and testing and QA. We also have an installed server instance that we hope to use for the Health Informatics course that we teach for our Nursing students so that they can get some hands-on time with an EMR system.

I’ve already learned a lot just by exploring and listening. I’m looking
forward to learning even more by contributing.

A note to my students: Introducing yourself to a new group of people is hard, even for faculty members! I have put this introduction off for a while. I may be a Professor, but these people are real experts – they do this stuff all the time, and many of them do it for a living! But, as I’ve often found, once I forced myself to write my introduction and pressed the send button, I’ve gotten back only helpful, welcoming responses. Open Source communities really are welcoming groups that are genuinely happy to have you join, want your help, and will help you succeed. You’ll see…

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.

Posted in Computer Science Education, CS 401, CS@Worcester, FOSS, Foss2Serve, My Year of Open Source v2, openMRS, Pedagogy, POSSE, Sabbatical 2014, Software Development Concentration, Teaching Open Source | Comments Off

Sabbatical Reading List

I have begun my reading list for my sabbatical. It includes general software development/software engineering books, as well as books specifically aimed at the next two courses I will be teaching in our Software Development Concentration:

  • CS-348 Software Process Management (Spring 2015)
  • CS-443 Software Quality Assurance and Testing (Fall 2015)

Here is my sabbatical reading list on my LibraryThing account. I will update it as I find other books, or have other books suggested to me.

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.

Posted in Computer Science Education, CS@Worcester, My Year of Open Source v2, POSSE, Sabbatical 2014, Teaching Open Source | Comments Off

Fall 2014 Sabbatical

I am spending the Fall 2014 semester on sabbatical1. This is the proposal I submitted to request my sabbatical leave:

I will use my sabbatical to become more expert in the area of Software Development/Software Engineering. The Computer Science Department recently created a Concentration in Software Development, which has expanded our course offerings in this area from two courses to four courses. This expansion does not simply expand the number of hours we spend on Software Development topics, but adds many topics that we have not been covering at all. Many of these topics are outside the expertise of any of the faculty in the department.

I am the only member of the Computer Science Department who has worked as a professional software developer, but have not worked professionally in that field for over 20 years. Many of the current processes, techniques, and tools were not in use at that time. The members of the department have worked to learn these new skills so that we can teach them to our students, but have only an academic/theoretical knowledge of many of them – we lack the practical experience of using these skills in a professional environment.

During my sabbatical, I will learn the processes, techniques, and tools of modern software development, and apply them in a professional context by working as a full-time (but unpaid) developer within an open source software project. I will work with Dr. Heidi Ellis at Western New England University and Dr. Gregory Hislop at Drexel University to get the academic perspective on how to teach these skills to undergraduate students, and to take advantage of their experience working with, and their contacts within, open source projects.

Drs. Ellis and Hislop are both well-known software engineering researchers and software engineering education researchers. They have been on the forefront of work to help students develop professional software engineering skills by working with open source software projects. They have a particular interest in having students work within projects with a humanitarian aspect. I have done some work with them in this area over the last 4 years, but have not had the time to work exclusively and intensively on developing these skills myself. In addition, Dr. Hislop served on the committee that developed the SE 2004 software engineering curriculum for the ACM and IEEE, and is currently serving on the committee that is updating those standards. I have already tapped his expertise in developing our new curriculum, and plan to do so again as we develop the new courses in the curriculum.

Proposal
  1. Develop a list of processes, techniques, skills, and tools that are necessary for modern software development. Thislistwill bedevelopedin consultationwithDrs. EllisandHislop, by reviewingtheSLOs of our newly approved Software Development Concentration courses, and by reviewing the SE 2004 Curriculum and any publicly released drafts of the new ACM/IEEE Software Engineering curriculum. This list will include,atminimum:
    • Agile development processes
    • Automated build environments
    • Automated test environments
    • Version control systems
    • Software architectures
    • Design patterns
    • Requirements elicitation
    • Software licensing and intellectual property
    • Project planning and estimation
    • Risk management
    • Analysis techniques
    • Test planning, strategies and techniques
    • Test coverage
    • Code reviews
    • Quality assurance
    • Project and team management
  2. Select an appropriate humanitarian open source project to participate in. The project will be one which
    • Allows me to experience the full range of processes, techniques, skills and tools from the list above. (Or as many as possible.)
    • Allows me to use tool and language skills I already possess to minimize the number of new tools and languages I need to learn.
    • I can continue to use with students in the Software Development Capstone course, and with other courses in the concentration.
    • At this point, the two projects that seem most likely for my participation are:
      OpenMRS (http://openmrs.org/)
      “The global OpenMRS community works together to build the world’s leading open source enterprise electronic medical record system platform.
      We’ve come together to specifically respond to those actively building and managing health systems in the developing world, where AIDS, tuberculosis, and malaria afflict the lives of millions of people.
      Our mission is to improve health care delivery in resource-constrained environments by coordinating a global community to create and support this software.”
      Ushahidi (http://www.ushahidi.com/)
      “We are a non-profit tech company that specializes in developing free and open source software for information collection, visualization and interactive mapping. We build tools for democratizing information, increasing transparency and lowering the barriers for individuals to share their stories.
      “Ushahidi”, which means “testimony” in Swahili, was a website that was initially developed to map reports of violence in Kenya after the post-election fallout at the beginning of 2008. Since then, the name “Ushahidi” has come to represent the people behind the “Ushahidi Platform”. Our roots are in the collaboration of Kenyan citizen journalists during a time of crisis. The original website was used to map incidents of violence and peace efforts throughout the country based on reports submitted via the web and mobile phones. This website had 45,000 users in Kenya, and was the catalyst for us realizing there was a need for a platform based on it, which could be used by others around the world.”
  3. Participate in the selected project. Iwillparticipate in the selected project on a full-time (unpaid) basis, contributing to the project in whatever ways I can including:
    • Participation in planning and design meetings
    • Writing code
    • Testing
    • Writing documentation
    • Helping with support
  4. Participate in Western New England University course. I would like to observe or help teach a software engineering course at WNEU so that I can see what pedagogy is used in the course, and adapt it to our own courses.
  5. Blog about my experiences. I will write about my sabbatical experiences on my blog (http://blog.karl.w-sts.com/). This will allow me to document and reflect on what I am learning and how I can use it in our own courses.
Preparation for this Sabbatical
  • Participant in POSSE (Professors’ Open Source Summer Experience) in 2010, 2011, and 2013 – A workshop designed to prepare faculty to support students working within open source software projects. The summer 2013 workshop group is continuing to work together over the 2013-2014 academic year.
  • Participant in SoftHum (Software for Humanity) workshop in 2011 – A workshop with faculty working to design materials for use in their courses.
  • One of the organizers of Teaching Open Source Symposium in 2012
  • Participant in OpenFE Materials Sprint in 2013 – A workshop to develop materials for teaching POSSE workshops
Relevant Courses
  • Introduction to Programming
  • Software Construction, Design and Architecture
  • Software Process Management
  • Software Quality Assurance and Testing
  • Software Development Capstone
  • Software Development Process
Benefits to the Computer Science Department and to the University

The department will benefit by having a faculty member who has relevant professional experience in software development, with contacts within at least one open source software project, and with the academic experience of applying that experience to courses. I will be able to use that experience and those contacts in order to give students the opportunity to gain valuable practical experience working within a large software project on the same types of tasks and using the same kinds of skills that they will be expected to use in their professional careers.

The University will benefit through a strengthened Computer Science program, by having a higher profile in the software development world, and being recognized as an organization that has donated a semester’s-worth of work of a full-time faculty member to further the mission of a humanitarian project.

There have been some changes since I wrote the proposal and it was approved:

  1. IchoseOpenMRS as the project that I will be working within.WhileUshahidi seems like a very interesting project,OpenMRS seemed to fit better with my goals for the following reasons:
    • It is written primarily in Java, which is the language that we use most in our Computer Science courses. (Ushahidi is written primarily in PHP, which we do not teach at all.)
    • OpenMRS seems to have a more “formal” software development process and tooling, which I think covers more of the topics on the list of what I want to learn.
    • We can use OpenMRS as a tool in the Health Informatics course that we teach for the Nursing majors, to provide an Electronic Medical Record system for the Nursing students to try out.
  2. I participated in the Teaching Open Source Symposium at SIGCSE 2014 and in POSSE 2014.
  3. I increased my use of Open Source tools both in my own work, and introduced them in our first-year courses.
  4. Students in my Spring 2014 capstone course did some work within the OpenMRS project.
  5. I started attending OpenMRS online meetings to familiarize myself with the project.

I will be writing more about sabbatical as the summer and the semester move along.

  1. For those not familiar with the ways of academia, a sabbatical is a paid leave awarded every 7 years to allow a faculty member time for research or updating skills.

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.

Posted in Computer Science Education, CS 401, CS@Worcester, FOSS, Foss2Serve, My Year of Open Source v2, openMRS, POSSE, Sabbatical 2014, Software Development Concentration, Teaching Open Source | Comments Off

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.

Posted in #git, Computer Science Education, CS@Worcester, FOSS, My Year of Open Source v2, POSSE, Python, Teaching Open Source | Comments Off

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.

Posted in CS@Worcester | Comments Off

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.

Posted in cs-wsu | Comments Off