Speaking and Attending Scala eXchange 2014

Last week I was fortunate enough to present at Scala eXchange in London, alongside the likes of Martin Odersky, Peter Hilton, and many other people who are famous in the Scala community and have shaped my Scala path from afar. It was a great conference, put on by the Skills Matter company who for some reason do not yet operate in the US, which is a shame. They are a treasure for any programming community to have, organizing conferences on many different languages, videoing most of the presentations and making these videos available for free to all. In fact, I am not entirely sure how they make money. The conference had four tracks of talks so there was always something I was highly interested in.

I presented as part of Underscore Consulting‘s Diversity Program. Which refreshingly was not targeted at women, but at anyone who had not spoken at a Scala conference before. They offered financial assistance to attend the conference, which I was going to need because no company in their right mind would pay for an employee to go to a conference on another continent when there are perfectly good ones much closer. But more importantly they offered “speaker training” which was just that extra bit of support I needed to craft a proposal and the eventual presentation.

Without Underscore and my old boss Eric Smith’s encouragement I would have assumed a beginner talk on Slick would not be interesting to the Scala community, who from afar seem like a group of all super high-level people who only are interested in high-level things. And there are a few members of the community who are like that, but for the most part this has not been my experience. Both Jan Christopher Vogt, the creator of Slick, and Stefan Zeiger, who is the lead developer on the project now, attended my talk and spoke with me about it afterward. I am sure you can imagine what a delight that was. Stefan had taken notes of my problem areas with the library and went down the list explaining how most of them would be fixed in the next release. Peter Hilton, an author whose book ‘Play for Scala’ I had purchased and read a few years ago also attended my talk and spoke to me about it and other Scala opportunities afterward. These are all examples of high-level Scala users who were interested in me and my experience.

And there has also been some feedback from lower-level users of Scala who appreciated a talk that was aimed more at “Joe Everyman” (or Jane Everywoman) programmer who is just trying to write small-to-medium size web applications. There was a panel discussion at the conference on the topic of what Scala needs to grow, which I think the consensus was to appeal more to the masses of programmers, and perhaps my talk helped with that.

Some of the things I did to prepare for this talk that really helped were
* Give the same talk to a local user group one or two weeks before the conference
* Give the same talk to some technical friends one or two weeks before that (maybe do this twice)

What didn’t really help:
* Writing out everything I planned to say word-for-word, because nobody else was using paper notes so I did not feel comfortable doing so as much as I had planned on doing

Here is a link to my presentation https://skillsmatter.com/skillscasts/5851-slick-bringing-scala-s-powerfu…
And just the slides are here http://www.slideshare.net/rebeccagrenier509/slick-learn2

Resources for From Syrup to Software: Landing a Tech Job in Vermont

For the presentation From Syrup to Software: Landing a Tech Job in Vermont

http://www.meetup.com/Girl-Develop-It-Burlington/events/178597572/

Slideshow
https://docs.google.com/presentation/d/1xNhv7J7KP2AC9RyDq9o7_boLIbf6Krdg…

Vermont Tech Job Resources:
https://docs.google.com/document/d/1t2uIIegSJsM0I5fVhpsv_uMXisuXyc_SstZp… (content below)

Craigslist Jobs categories Internet Engineering, Software/QA/DBA/Etc, Web/HTML Info Design, less useful is “Gigs” section under Computer
Seven Days has an IT jobs category http://classifieds.sevendaysvt.com/listAds.htm?listAction=searchedAds&FO…
Indeed.com is a jobs-conglomerate and does a very good job. Search for the technology you know, etc HTML, CSS in Vermont http://www.indeed.com/jobs?q=HTML+CSS&l=vermont Once you find a relevant search you can set up an email alert to keep getting any new jobs added to this category.
www.careerbuilder.com (this is what the Burlington Free Press uses)
www.uvmjobs.com UVM is not known for paying well but they have excellent benefits including free classes/tuition and a 37 hour work week.

Vermont Technical Community Resources
This meetup group has most of the events: http://www.meetup.com/VTCode/
Although for some reason it does not have the Word Press group: http://www.meetup.com/Burlington-WordPress-Meetup/
Nor the newer more “harware/maker” events such as at the Generator http://generatorvermont.com/
And Labratory B http://www.laboratoryb.org/

Online Technical News and Information
Hacker News: http://www.hackernews.com
Reddit has a lot of “subreddits” on all kinds of different technologies, or a useful one is cscareerquestions: http://www.reddit.com/r/cscareerquestions/

Other
It can never hurt to look up a company you are interested in on http://www.glassdoor.com , but take the reviews with a grain of salt

How I Wrote my First Technical Presentation

After working in development for 13 years I finally gave my first technical presentation last week, and I wanted to share my experience in the hopes that it might help someone else.

“Just write a great description for your talk, send it in, and then you’ll have no choice but to pull it together sometime before the conference.” As I gave this advice to a friend, I saw that this could be the answer to my own public speaking aversion as well.  If I waited until after I had put together a great presentation it was just never going to happen.

So, a few weeks later I sent an email to a local user group suggesting a topic I had recently learned quite a bit about and implemented for work, the Apache Solr Search Server. He was very receptive and we set a date about one month away, on which I would give the presentation.

The panic set in two weeks from the presentation date. I thought I should learn more about Apache Solr and desperately tried to study the book I had, but kept finding myself too anxious to do anything but re-scan the same paragraph over and over (which I fruitlessly forced myself to do for way too long).  Then, when I saw the date of my talk was a little over a week away I began on the slides.  It was the first time I had used PowerPoint in over a decade.  I had no idea how to start so I just forced myself to keep making slides until I had about 15, which I thought was a good start for a 30-minute presentation.  This took quite a few hours and quite a few beers.  They were terrible slides and I knew it, basically just lists of bullet-points.  And my self-doubt kept interrupting after each one saying, “this sucks, your topic sucks and so do you.”  Which is hard to get past when the work you are doing does actually suck.  And so it was with great difficulty that I finished my first draft.

A couple saintly friends of mine were willing to sit through my first practice. Not only were they terrible slides, but it was a boring topic as well and I was not a good presenter. They stopped me shortly after I had begun and said they were having trouble following. I hadn’t defined several terms. I hadn’t really said what Apache Solr was. I hadn’t explained why someone might want to use it. It was hard for them to pay attention when they didn’t know the relevance. It was just me talking about configuration files. Instead, they said, I should tell a story. ( I thought, “Once upon a time there was this software program…”) But they were right, and I had to write the whole thing over again, which I did that very night, with a few less beers this time.

Thus began my endless rounds of practicing, and then tearing apart my slides. I practiced in front of both technical and non-technical people. I ended up defining every technical term I used, even things I was pretty sure my audience would know, such as API.  As my sister advised, it takes 10 seconds to offer a quick definition and it is a kindness to anyone who might not know. Slowly my presentation took on a shape with an introduction, middle, and conclusion, and with all necessary pieces such as About Me and Questions?

I allowed the rising panic I felt as the date approached to drive me to keep practicing. I got pretty good at explaining my slides. I had even put in a few that made people laugh. I practiced 6 times in all.

On the day of my presentation, I was nervous still (maybe the panic had just become habit by then) but felt more confident due to all the time I had put in.  If I didn’t do well, at least I had given it my best shot, but I was pretty sure I had beat that presentation into something decent. Finally it was time to speak, and it went pretty good. The audience laughed at the appropriate spots. A few times I felt like my knees were trembling but the feedback I got was that I didn’t seem nervous. (Evidence that nobody can tell) At the last minute I had decided to demo an app made with that technology so they could see it in action, and that ended up not working, but I was able to skip over that pretty quickly. It was just extra anyway, not fundamental to understanding my topic. I told my audience I was a new public speaker and asked for any feedback they might have (something I read in “Lean In”), and everyone said I did great and there was nothing negative.

Then I was so relieved to be done and have this monkey of a presentation off my back. I was proud of myself for doing something that scared me so much, and I had created a pretty good talk that I could give again. It was surprising, not only to me but to those friends who had watched my initial efforts, how much improved my final presentation was–almost unbelievable. And I have volunteered to give it again already, to a different group in a few weeks, and I’m not that nervous about it anymore.

So the moral to this story is that all you have to do to speak in public is find somewhere to start and keep going.

Installing and Running Apache Solr

From this presentation “Introduction to Apache Solr” https://speakerdeck.com/fringedgentian/introduction-to-apache-solr
How to Install & Run Apache Solr

  1. Download the latest code archive from http://lucene.apache.org/solr/.  Note: on Windows I found the latest would not extract and had to go back one release http://mirror.olnevhost.net/pub/apache/lucene/solr/4.2.1/
  2. Extract this archive with zip or tar
  3. Navigate to example/ folder and type “java –jar start.jar”
  4. Voila, your own completely empty Solr server will be up and running at http://127.0.0.1:8983, you can get to the administrative interface at http://127.0.0.1/solr/admin
  5. To index the example documents so you have something to practice searching, navigate to /example/exampledocs/ and type “java –jar post.jar *.xml”

How to add documents to Solr from a MySql database
Just in case anyone comes especially looking for this, I took it out of my talk

  1. You will need to find and download into the /lib/ directory of your Solr home the MySQL jdbc driver .jar file.
  2. Solr’s Data Import Handler jar file is also not included by default, so you hav to add this to the top of your solrconfig.xml:

<lib dir=”../../../../dist/” regex=”solr-dataimporthandler-.*\.jar” />

  1. Add your update handler to solrconfig.xml and define the configuration file for it:

<requestHandler name=”/dataimport” class=”org.apache.solr.handler.dataimport.DataImportHandler”>
<lst name=”defaults”>
<str name=”config”>db-data-config.xml</str>
</lst>
</requestHandler>

  1. Now you need to create your db-data-config.xml in the same directory as solrconfig.xml and schema.xml, here is an example: http://www.beingjavaguys.com/2013/01/how-to-use-solr-data-import-handler-to.html

Resources:
•Solr in Action www.manning.com/grainger

Hackathon

hackathonIn the last few years I’ve been reading a lot about a new (to me) type of endurance programming event called a Hackathon.  As a career programmer, I felt like I had to try this at least once.  So I decided to do www.hackvt.com which was Oct 19& 20th.

You have to find a programming team ahead of time, and after asking around a bit a guy I met through programming user groups, Micah Mutux, said his team from Branthropology had room for 1 more, and so I joined their team!  Brandthropology works with the same exact technology as we do at EatingWell so it was a good fit.  Here is a rundown of my teammates, in no particular order:

* Micah Mutrux:  He did a lot of our front-end web programming, fancy JavaScript stuff
* Cooper Fellows: I think he was the youngest on our team, a very quick backend programmer who knew how to work with the Google Maps plugin we ended up using
* Nicholas Szumowski: He has a strange mix of server admin skills and the programming behind making the web site look good
* Jason Greeno: He actually had no programming skills but was an excellent graphic designer, as you can see from the style of our final product.  Also he has experience from working on a ‘Gameathon’ before and served as our project manager, keeping us all on track, and did one of the hardest jobs of all which was to give the final presentation.  So he very much pulled his weight on our team or even more even without any programming skills.
* And myself, Rebecca Grenier, an all-around programmer with more experience in the back end, worked on everything else, spot entry (that complicated tagging/categorization system!) and both the list of daylists and the single daylist view.

Here is our final product: http://www.vermonttripplanner.com

On that Friday at work I was really tired, I had slept poorly the night before and pretty much the last thing I wanted to do after work was go program for another 24 hours straight.  All day I racked my brain trying to think of an excuse, but there just was nothing that would not leave my team down a programmer so I made myself go, and I ended up being very glad I had done that.  Because 10 minutes into it, the excitement got into me that we were in a contest and I lost myself in the work and the time FLEW by.  There is a picture someone took of 3am (at the top of this post), and I remember kind of looking at the clock and seeing that it was really late, but then there was this feature I was trying to finish so I got back to work.  And then I saw it start to get light again outside!  I can’t remember the last time I pulled an all-nighter, maybe it was a decade ago, that long.

The location was spread over the downstairs of the Champlain Mill building in Winooski, I think there were about 120 teams inside a few different areas and the central hallway.  Each team had a folding table and folding chairs, not the most ergonomic setup and so a few of the more experienced fellows had brought their own chairs.  Which I definitely will do next time as well, as that was my only complaint.

One of the small storefronts had been converted into a napping area with darkened windows and blow-up mattresses inside, which I did not make use of.  I wasn’t there for a slumber party!

We had chosen our topic ahead of time and my team had made up wireframes already of the parts of the website that needed programming, so we got right to work.

Twice throughout the night we were all called out into the central hallway and there were Quick Fire puzzles that took maybe 5 minutes each one to finish.  The first one was a math problem that was done with bits of trivia you look up online, and the second one was a complicated bit of psuedo-code to work your way through.  For each of these two small things the winner recieved a 10″ tablet computer!  Seriously, the prizes were great.  There were random drawings throughout that only people who were still there could win, of which I won one that included a 2-night stay for 2 at Stowe Mountain Lodge!  And my teammate Jason won an iPad with a nice set of headphones!

The rule was that we had to STOP programming at 3pm, and that was when the presentations started.  Each team had to give a 3-minute presentation on their project, and that was what we were judged on.

As we progressed into the afternoon we were all in somewhat altered states of mind, which is a little like being drunk I think.  Now, our idea is a great idea, actually, and we were all pretty convinced that we would win.  It was looking like we would finish our minimum viable features and have a basically working thing to present.  And it even looked great due to Jason and Nick’s work.

Jason had done that Gameathon previously, where his team had experienced something unfortunate: in trying to add one more thing to the game they broke it so close to the cut-off time that they did not have time to fix it, and so they had nothing to present at the end after all their hard work.  So at around 1:30 – 2pm while the rest of us were madly trying to get working our current feature he was starting to say “ok, let’s start thinking about freezing this codebase while it still works” which none of us programmers wanted to hear and we hissed at him that we wanted to finish our features.  But he kept at it and after a few gentle repeats got us to mostly stop at around 2:15, Cooper still had to fix one big issue which wasn’t really done until 2:45-ish.

Then, the judging which we were SUPER excited for.  There was some real prize money at stake and not a ton of teams left to compete with.  I’d say we had maybe 60 presentations, of which around 10 were student teams.  First place was $4,000, second place $3,000, and third $2,000 and the best student team also got $2,000.  And three honorable mentions.

The presentations were long but kind of entertaining, seeing a lot of tired teams and students make presentations.  One kid had planned on gathering data by having a bus driver take along his iPhone on the route that morning, which apparently the bus driver had refused to do so he said “Yeah, so that didn’t happen.” and sadly all he had to show us was a blank map.   There was a few technical difficulties where the projector malfunctioned so the audience did not get to see the app, but in that case the team showed the judges directly on the device.

Then the winners were announced!  Unfortunately, our project was not selected.  Now I’m not even sure we were playing to win, but if we had been there were 2 things I would focus on in the future:

1. You can’t show a ton of features AND introduce a whole concept in a 3-minute presentation, it is just impossible, so really you needed a very simple one-page thing to present, that you could talk about and show completely in the small amount of time.  We spent so much time on these small features that had no hope of making it into a 3-minute presentation and so did not help us in one bit towards winning.  (But will help greatly in having a website people can actually use).

2. We didn’t pay that much attention to the theme/instructions of the whole event, which was to find a new way to use open data in a way which would benefit Vermont.  Our app didn’t use any open data, except the Google Maps which is not Vermont-centric except for we based our app here, but it could be based anywhere.

So the winners were all things that specifically had to do with Vermont open data and benefited Vermonters.  First place went to a elegantly done app where they had used google maps and Vermont socioeconomic data to show on that map where different types of businesses had existed over the last 50 years.  Hard to explain, but it was all on one page and easy to use and demonstrate. (Here is a blog post about that: http://beerlington.github.com/blog/2012/10/21/how-we-won-hackvt/  It just was very well done and they definitely deserved it.

Anyway I had a great time and am so glad I did this, and I want to do it every year from now on!

New Project! An app written in Backbone.js on a Rails 3.1 framework

This little app was created using the Backbone.js JavaScript framework, just like Gmail!  You will see it is a little simpler than Gmail, but a person has to start somewhere.  I have uploaded it to Heroku for hosting currently:

http://stormy-moon-9006.herokuapp.com/
And the code is in a  GitHub repository, here:
https://github.com/fringedgentian/App-in-Backbone.js-running-on-Rails-3….

Setting Up Virtual Hosts with XAMPP and Windows 7

Even though I’ve been a web developer for a long time now, it has always been as a full-time employee of one mega-site (such as http://www.geteducated.com).  I’ve never had to set up my development environment to accomodate many sites until now.  I’ve been doing some contract work and it only made sense to set each site up as a virtual host, and today I figured out how to do that with XAMPP on Windows 7.
First let me clairify what I mean by virtual hosts.  Let’s say you have a client called Soup for Cats, Inc.  And you store that client’s website code in C:\Development\SoupForCats\.  A virtual host would make it so when you type http://soupforcats.local into your web browser, it does not go out into the Internet but instead loads the files stored in the directory you specify.  There are two main steps to this.
1. Edit C:Windows\system32\drivers\etc\hosts as an Administrator. To do this, go in the Start menu and right-click on Notepad.exe or any other text editor and “Run as Administrator” then navigate to the file and open.  It should be empty except for comments.  To the bottom of this add one line for each virtual host you would like:
127.0.0.1      soupforcats.local
127.0.0.1      soupfordogs.local
This tells your computer that requests to these addresses need to be routed back to your localhost server instead of sent out into the Internet.
2. To get a little more specific about what your localhost should do with these requests, we need to configure your XAMPP server’s virtual hosts file, found in C:\xampp\apache\conf\extra\httpd-vhosts.conf.  This should also be pretty empty except for comments.  Here is what you should put after the comments to set up soupforcats.local:

NameVirtualHost *
<VirtualHost *>
DocumentRoot "C:\xampp\htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *>
DocumentRoot "C:\Development\soupforcats"
ServerName soupforcats.local
ServerAlias www.soupforcats.local
ErrorLog "logs/soupforcats-host2.localhost-error.log"
CustomLog "logs/soupforcats-host2.localhost-access.log" combined
<Directory "C:\Development\soupforcats">
Order allow,deny
Allow from all
AllowOverride All
Options Indexes FollowSymLinks
</Directory>
</VirtualHost>

That first line and first VirtualHost is so your standard localhost will continue working and routing you to XAMPP settings in case you need that.  After that, you are telling your XAMPP server to use the directory C:\Development\soupforcats for any requests to soupforcats.local.  The alias is just in case any of your links end up looking like www.soupforcats.local, those will work fine also now.  Logs are always good in case you need to troubleshoot something.  The last bit sets up the permissions for what the code in that directory is allowed to do.  The site I was working on was a mess until I figured out that i needed ‘AllowOverride All’ which allows the .htaccess file in your client’s directory to actually work, which is essential in most content management systems that route everything through index.php.