I have converted the site from WordPress to a static site since I don't intend to post new content here. This should take care of some issues with constant hacking attempts and resource usage. Some stuff wont work any more. Comments, site search, etc. That stuff is busted. The twitter feed wont update in the sidebar (though I don't really use twitter any more anyway). Just a heads up for anyone who stumbles across this. The downloadabe file stuff can be found here: https://blog.geeksinaction.org/downloads-and-stuff


I’m going to stop posting to this domain. I mean I kind of have already, right? :) My last post was over 3 years ago.

I used to maintain separate web sites for all my different activities. One as a blog, one as a place for book reviews, another where I posted about code and projects I was working on. I think that’s it. I do have one more for our ministry but that needs to be its own thing.

Anyway now what I’m working on is taking all that and moving that activity to one place. It’s combined with an idea that I’ll also be more active in posting and doing things – but we’ll see how that part goes.

So what I’m doing with the existing wordpress sites that are being merged into the new places, is that at least for now I’m leaving them up as static sites. I’ll keep them going until the domains expire. So for example this blog will be here until October 2019. When geeksinaction.org expires I’ll let it go.

geekbook.org will go until December of 2025. pyrrhic.org will go until June 2020 (unless I can find something good to do with it – I love that domain name.)

So all posting about anything will take place at something connected to jrpeck.com For example my blog will be jr.peck.com/scribbles which I guess I should fix to work at scribble.jrpeck.com – that’s something to get to.

I’ll adjust as I go but that’s my plan moving forward. So if there is something here you found useful you may want to grab the info. now. This October it will no longer be at this address – and I may just drop it all. I’m not sure. If I keep it up somehow it will be at all new urls.

Thanks – JR

License Plates

A few weeks ago for spring break we drove up to Germany and visited relatives. It was a lot of fun. While we drove, I kept track of the different license plates we saw. I enjoy doing that with states when we do long drives in the U.S. So – I thought it might be fun for my non-Europe living friends to go over the list and see how many they know. To make it a little easier for my U.S. friends (we are geography challenged) I put an asterisk by the ones where the name used is different than the English name for the country. Here they are in no particular order:
If you want to check how many you got right, wikipedia has a nice list.

Writing code at the creation of a fragment

All the examples I’ve seen so far for dealing with programmatically handling things from a view have involved an activity and the layout associated with it. But when I am working with Android Studio, whenever I create a new activity things are a little different and I get two layouts and things are happening in a fragment rather than the first layout. I don’t totally get the whole thing yet, I’m working on wrapping my mind around it. But today I did figure out something that was really giving me fits and I want to document it for later.

I wanted to start a new activity and in the view for that activity display a chart using the Android GraphView. Jonas provides nice documentation with example code on how to do this. But the fragment thing was really messing me up. I couldn’t figure out where to put the code and how to get it to work. The example I was interested in looks like this:

// init example series data
GraphViewSeries exampleSeries = new GraphViewSeries(new GraphViewData[] {
      new GraphViewData(1, 2.0d)
      , new GraphViewData(2, 1.5d)
      , new GraphViewData(3, 2.5d)
      , new GraphViewData(4, 1.0d)
GraphView graphView = new LineGraphView(
      this // context
      , "GraphViewDemo" // heading
graphView.addSeries(exampleSeries); // data
LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);

But I would put it in different places and crash the app or get compiler errors before I even started. I did a lot of searching and reading before I got it to work and I guess I don’t need to rehash all that. It was the accepted answer on this stackoverflow question that finally put the last piece in place for me though.

When I create a new activity the class for it has a class inside that creates the fragment:

public static class PlaceholderFragment extends Fragment {
        public PlaceholderFragment() {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;

This made sense as the place to do my work but I couldn’t figure out how. I had trouble trying to reference the view. But it was right in front of me the whole time. Here is what finally worked.

public static class PlaceholderFragment extends Fragment {
        public PlaceholderFragment() {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_show_graph, container, false);
            //I cannot believe I finally figured this out.
            GraphViewSeries avSeries = new GraphViewSeries(new GraphView.GraphViewData[] {
                    new GraphView.GraphViewData(1, 223)
                    , new GraphView.GraphViewData(2, 221)
                    , new GraphView.GraphViewData(3, 220)
                    , new GraphView.GraphViewData(4, 221)
            GraphView monthAverage = new LineGraphView(this.getActivity(), "Jan Data");
            LinearLayout layout = (LinearLayout)  rootView.findViewById(R.id.graphM);
            //this is the end of my part
            return rootView;

Oh – here’s the xml for the layout. I don’t think it matters a whole lot – but this is where the graphM id is located.


I was so happy when I ran this and I saw my graph pop up rather than the error message from the app crashing. It was a banner moment in my day.

Setting Up My AndroidStudio Project on GitHub

I started a project to do my homework for the week in the Android class I’m taking. I’ve been doing the bulk of my work on a desktop machine in my office. This week-end I also set up a dev environment on my Fedora laptop at home. I don’t want to have to monkey with copying files and carrying them back and forth so today I set up a GitHub repo so that I could use it to keep things in sync.

I’m no git expert. In the past what I’ve done is create a project in github with a couple pieces in place. Then I pull that down to a directory on my machine, add the files I need and then push all that back up.

Today I took a little bit of a different approach. I created the project. Then in bash I went to the root directory of the project and set things up. It took me a minute to get it all figured out. The git reference on remotes was a huge help. There is also the JetBrains documentation on git with IntelliJ which is what Android studio is built on.

For my own reference – once I got the project built I needed to add everything. First I went to github and made a repo – but I made it empty, not like I usually do. Then I went to the root of my project in bash.

git add .

and then make an initial commit

git commit -m 'initial commit'

I set up the remote

git remote add origin https://github.com/bittercode/learnandplay.git (bittercode is my github user name and learnandplay is the name of the repo I set up.)

Then I pushed the code to the remote

git push -u origin master

And that put it all up at github. Now I should be able to go home and pull it all down there. I also set up AndroidStudio so that it now handles all the git stuff. When I created a new activity it asked me about adding them to git – so I just said that it should default to yes and now I’m on the fast track to happy days.

It’s like rai-eeeeee-aiiin on a sunny day

Signed up for the webcast of an OSCON talk today. When I registered I noticed a littel link in the corner that said, “Test Your System”. So I did. The results are below.

Results of test on my Fedora 19 box.
Results of test on my Fedora 19 box.
It struck me as a tad ironic that Fedora 19 is viewed as an OS that fails the test to view content from a conference about open source software.

Fedora 18, Nouveau Drivers and Firefox

I’ve got a desktop that I use as my primary work machine. It runs Fedora 18 and drives 2 monitors via an old but serviceable GeForce card.

Unfortunately what that means is I’ve got to live in a world of crappy compromises. It took me quite a while just to get things working. I started with the Nouveau drivers. The problem is that even with all desktop effects turned off – the display starts developing little “artifacts” over time. Or if I want to make the entire desktop completely unusable I just need to start Firefox and visit a page or two. In fact, oddly enough, the Google Sites that Sophie Schmidt made about her trip to North Korea, opened in Firefox will completely trash my whole desktop.

Everything that pops up from here on out is a mess and closing stuff wont help.
Everything that pops up from here on out is a mess and closing stuff wont help.

It took a while but I got the nVidia drivers to work. Well, that’s not honest. I found JR’s Fedora 18 nVidia Drivers Install / Uninstall Guide and he had figured how to get it to work. I followed the instructions and I was in hog heaven. Firefox worked and I could enable desktop effects for some nice eye candy. I’ve been happily cranking along since.

Then last week a co-worker in the US sent me a google hangout invite and when I went to answer it KDE crashed. This made me sad. I immediately thought of the drivers but tried many other avenues of curing the issue, in the hopes that it was something else. But no. I uninstalled all the nVidia stuff and went back to Nouveau. Hangouts works again and I can’t use Firefox any more.

I really need Hangouts. I wish I didn’t. Well, what I really wished is that all my sofware worked well with the Nouveau drivers or that it all worked with the nVidia drivers. Either one would be acceptable.

The up side I guess is that I don’t have a ‘tainted’ kernel any more.