This will be my last post on blog.subvertallmedia.com. If you’d like to follow me from here on out, go to http://clg666.tumblr.com. The long and short of why: WordPress is annoying to manage and I’d rather go to a smarter platform than rework this one. Easy enough. I’m not going to migrate any content and have no plans to take this down any time soon since it is hosted on my server. Later!
Rails Competency and Tips for the Open Source Student
It’s been just over a month since my last post, a small rant expression frustration with the “type this, you’ll figure it out later” style of most introductions to Ruby on Rails. I eventually found this and used it to gain basic competency in Rails. It’s not without its shortcomings and its lack of comments within the code is a major flaw, particularly as things get more complex in later chapters, but author Michael Hartl does a great job of explaining WHAT is happening and WHY. This breakdown of the mechanics of Rails and emphasis on many best practices was key to me understanding the framework.
I’d say that I reached basic competency last week and was able to convert the static Woe page into a dynamic page with a database-driven shows section and interactive login. I was not able to figure out how to get the damn thing running on my own server — I’ll save that for another post — so I’ve been using it locally to generate HTML that I copy and paste into the page. Sort of pathetic and something I shouldn’t be admitting online? Possibly. Worth the time figuring out now when I want to get working on a larger project? Absolutely not, I have bigger fish to fry.
One of this bigger fish was gaining a basic competency over Neo4j, which also meant learning about Jruby, which meant learning more about RVM, which led to learning more about Bundler. Trying to get this online through a production server meant I learned a great deal about hosting Java apps in general but mostly Tomcat, plus I got some more experience with AWS. I’ve wiped and reconfigured a spare cloud server and gone up a few levels in Linux admin, so it’s all been very worthwhile. Of course, I still can’t get a database working on a production server, but there’s still a lot of reading to do and frankly, I don’t care right now. It’ll be there when I need it.
In the meantime, I want to offer some tips and get some things down on a page before I forget them. This experience has reminded me of how great and how frustrating the open source *nix world can be. When it works, it works. Awesome software, great resources, friendly people who want to help — killer! What it doesn’t work, it’s awful. Old tutorials, incomplete or wrong documentation, buggy software, vague explanations. It gets bad. To those currently struggling with Rails or Tomcat or Apache or PHP or really anything that involves a lot of self-guided learning, I offer the following general tips:
- Always read the official documentation first. It’s very easy to type in “Deploy Rails with Capistrano to Ubuntu” and find a blog post that will tell you how to do it. It’s also very easy to blindly type commands that you don’t understand, that may not apply to the specific versions of everything you’re working with, and when things break you will a lot of trouble fixing them. I wish I had started by reading the official docs for Bundler, RVM, Tomcat, Capistrano, and plenty of others. On the other hand…
- Don’t be surprised when the official documentation is incomplete or vague. Neo4j.rb is mostly maintained by one guy. He is extremely responsive and when I had a problem, he replied right away, posted it to the Google Group, and updated the Github wiki. Of course, before I emailed him, I spent hours and hours and hours and hours trying to figure out the syntax for a search that had not been fully described anywhere. I was using syntax that wasn’t intended for me, I didn’t know enough about the components to realize that, and the documentation did not give me reason to believe that there were sections missing. I don’t fault him for this, it seems like he really makes an effort to give attention to docs for things people are using, so I must have been trying to do something nobody had asked about. Point is that if you can’t find what you’re looking for, don’t be afraid to ask.
- Always do your best to understand the basic vocabulary and mechanics of what you are doing. When you start working in Rails, you will probably read about RVM. If you start with Ruby MRI and you need Jruby, you’ll need to figure out how to install it, switch to it, maybe set it as default, manage it, modify your Gemset to install Gems specifically for it. It will be very easy to Google these things, find commands to type, and not think about it. Don’t do that. Find the commands, see how people are doing it, but first Google the commands, understand the switches, get a handle on why you are doing those things before you do them. It’s not always possible, it may feel like a waste when you are frustrated and tired and in a hurry, but you will save yourself time later.
- Find tutorials for your exact versions of everything. Beware of old blogs and documentation. The internet has a serious problem with leaving old technical documentation up forever. If you start searching for things about Ruby on Rails, you are going to find a whole fucking lot of stuff about RoR 2 instead of 3. Very little of it will apply to you. I found A FUCKING TON of stuff about old versions of Tomcat, old versions of Neo4j. All of the documentation for Neo4j.rb 1.0 is still on Neo4j’s official website — it should not be used. Blog after blog detailed installing things on Ubuntu 10.04, 11.04, 12.10 — I needed 11.10. Just because a version is close, it does not mean the commands will work. Go ahead, read through it, make some notes, see if you see the same commands popping up on lots of posts for lots of different versions, because maybe the changes made to whatever you’re working with will not have an impact on what you’re trying to do. But in the *nix world, those version changes make all the difference and running commands for another version is probably an exercise in frustration.
- Many people giving technical advice on blogs and forums are not pros. Many of them are functional novices on topics they write about, kind of like me writing about Rails. You will find some wacky stuff out there written by very well-intentioned people. When you are frustrated with a problem and desperate to move onto the next step, it is easy to copy/paste and go, but try to look at people’s suggestions carefully and make sure you aren’t digging the whole deeper.
- Do not lose hope if the documentation does not make sense to you. If I had given up after my post about shitty tutorials last month, I would not have learned anything. It took a little time to find the right material for me but it was worth it. We all have different learning styles. The official documentation for something may not work for you but there’s probably a current and well-documented blog post or forum somewhere. There are books. There’s StackOverflow. There are endless resources out there, just don’t give up and assume that you’re bad at something just because some of the stuff that’s out there doesn’t make sense.
That’s all I’ve got for the moment, I need to get some sleep. Oh yeah, Woe has a new album out in 14 (!!!!!!!) days and we are going on tour in the Northeast from May 10-20. Reviews for the album are phenomenal so you should probably give me your money. Preorder the CD for a mere $10 here and the LP for $16 here. LP is limited to 500 on split black and red, pressed from a 24/48 master. Full tourdates on the beautiful-but-unsophisticated band site, http://withdrawal.woeunholy.com/.
Beyond PHP — The Frustration of Learning a Framework
I’ve been working off and on in PHP for about 4 years ago. It’s been a lot of fun, I learned a lot, I made a lot of new friends and like to think that I helped a lot of people out with phillymetal.com. Still, it has its limitations and working in it can be somewhat slow and repetitive, so in preparation to begin a rather ambitious new project, I decided to begin learning Django. When that didn’t work out, I moved onto Ruby on Rails.
Django was where I wanted to start. I had a little experience with it after a failed attempt to learn it years and years ago, so I at least had an idea of how it arranged files. I ran through Google’s Python Class and loved it. The syntax was simple and direct and sensible, the use of whitespace mirrored how I was already organizing things in PHP. The attitude of “there is one right way to do this” sat very well with me. I ran through the Django tutorial, quickly converted Woe’s new static website to run in Django and use a database-driven Shows area. Then… I realized it wouldn’t work out.
My partner and I are spending a lot of time planning before we write a line of code because we want to make sure that we are prepared for growth and adaptable. As part of this, I began looking into databases and started questioning with MySQL or PostgreSQL would be the right fit. The answer was a definite No. The project I am about to start has a heavy social focus. Everything relates back to everything else. We were looking at disgusting SQL queries, join upon join upon join. A graph database was the answer, Neo4j specifically. While it has what appears to be at least one mature Python library, I didn’t want a Python library, I wanted a Django library; after all, what’s the point of using a framework if I immediately have to start pulling out pieces and replacing them? Neo4django is not updated very frequently and didn’t look ready for what we were hoping to do. Sadly, we were forced to give up on Django.
And this brought us to Rails, which has a library for Neo4j that is very far along in development. I began with the Ruby tutorials I could find. Right away, I was impressed with the thought that went into so much of the Ruby tutorials out there. Tryruby.org was very pretty, the Ruby Koans were clever, Rails for Zombies was a cool concept that helped me get a good handle on some of it. But after the initial excitement passed, I came to a crappy realization: compared to Python, Ruby is ugly. The community, while very positive and interested in helping, feels like a cult that can’t wait to get me to drink the Kool-Aid. A lot of the comparisons of Rails and Django describe how Rails is very into “magic” to make things work and this was clear from the get-go. Rails for Zombies introduced me to the strange habit of capitalizing and pluralizing (or not) model names. Tryruby crashed if you gave it a command it didn’t like. The Koans were pretty easy to get through but I felt like they didn’t really teach me to do much other than fill in blanks.
I learn best by doing so I installed Rails and began the first app tutorial on the official site. It wasn’t much better than Django’s, which felt more like a technical preview intended to show you what it’s capable of and just how simple everything is instead of giving you a good understanding of each piece and how things work together. Django’s was useful because it gave me a sense of how to get a project going. Ruby’s… not so much. Each piece is reasonably simple but ideas are introduced without what I feel is sufficient explanation of what they really are. I’m trying to convert the static Woe site to a Rails app now and I’m already a little confused.
What is the Rake command? Why is it called Rake? Why am I not running “rails db:create”? A new project creates an index.html in the public directory, but what is the significance of Public? I see that static I can put static content there, but the Getting Started tutorial only touches on this briefly. There’s an “assets” folder inside of “app” that contains folders called “images,” “javascripts,” and “stylesheets,” so… huh? Why the hell is it necessary for Rails to create so many files and folders? It feels messy and unnecessary.
It is possible that I am just diving in a little over my head and need to slow down. I think that coming from PHP, I’m spoiled by being able to make test.php, throwing in some code, loading a page, and seeing a result. I’m telling myself that the complexity of the setup and time required to learn the various components will pay off when I am able to build more interesting things in a fraction of the time.
On the other hand, I really do not like this approach to learning. When you learn to drive a car, you don’t just get into the driver’s seat and go onto the highway. You start by watching someone, you learn the basic rules of the road. You learn street signs, right of way, the core mechanics of operating the vehicle. You turn it on in a parking lot, you drive slowly, stop slowly, then you move up to quiet streets. The Django and Rails tutorials are like jumping into a car, being directed immediately to a road, and then instructed on the specifics of driving with only basic background of why you’re supposed to do these things.
Them: “Turn on your left signal right now, get in the left lane, take this exit right here, press your brake slowly as you turn the wheel.”
What I’d like: “The turn signal lets other drivers know that you are about to change direction. You can push it down to signal left, up to signal right. We are going to take a left exit in a few moments, so start by looking in your mirror for oncoming traffic. If you don’t see someone, push the signal down, watch for the blinker, move slowly to the left lane. You’ll see the exit on your left, so go onto that but be careful that as you do, you touch the brake to slow down. With too much momentum, you won’t be able to handle the sharp curve of the exit and will fly off the road, killing us. Keep this in mind as you turn in the future.”
Of course, what I want is longer and more complicated. I guess that most people don’t want this level of detail or they just piece it together with different resources? I just like understanding fundamentals. Not just what commands I should use but why those commands, why these files, why these commands and not others, how things fit together. I’m sure guides like this exist for beginners, I just need to look harder. Maybe I’m being impatient. Still, it’s very frustrating that when I want detailed information on the basics of using a tool so I can use it myself, I am instead led through an experience of setting up someone else’s application.
</whine>
Woe – “Carried by Waves to Remorseless Shores of the Truth” Premier and Lyrics
Check it out here.
Preorder it from Candlelight Records on vinyl and CD.
Song lyrics are below.
“Carried by Waves to Remorseless Shores of the Truth”
Spit from the river, we floated, adrift in yearning waves. An unending torrent of desperation. Emptiness, a raft. We clung with feeble hope, sweat into the air, screamed into the night. In pursuit forever, just drifting ever onward, no words to make this right.
Warm in our hands were the tools of our destruction. Desire dripping from all pores. Waiting inside were the keys to raise the gates from every dam. Desire dripping from all pores.
A yawning void with a furious pull. A secret demanding you learn. Heart pumping fast with the nearing of the kill. Desire dripped from all pores.
Unrestrained violence propelled us through the night. The vicious degradation that robbed us of our pride. The fear, the power, hysterical hatred was thrusting ever forward. A pulsing presence that would be not be denied. A vulgar acquiescence to the horrors of the mind. For then, for always, a potent reminder that life is exploitation. I feel the terror both awake and in my dreams. The world has become smaller and I can’t escape your screams. The need, the horror, the compounding judgment of…
Eyes are wide with fear and clothes are soaked from terror. Knowing death is near, their eyes are filled with horror. Every cell inside is calling me a liar. Nothing dulls the pain. Your eyes were filled with fire.
(Solo: CG)
Eyes are wide with fear and clothes are soaked from terror. Knowing death is near, their eyes are filled with horror. Every cell inside is calling me a liar. Nothing dulls the pain. Your eyes were filled with fire. Carnal pounding in my chest, a new desire. Everything was wrong. My words have become daggers. Fear replaces hope that drives you as a child. There is no turning back until this world is on fire.
Carried by waves to remorseless shores of the truth.
A predator lives inside of every man. It victimizes everything it can. It justifies its needs at your expense. We all fuck each other, there is no defense. We’re all fucked. There is no defense.
Office 2011 SP3′s Major Undocumented Change
Microsoft released Office 14.3.0 yesterday. Its release notes indicate the following changes:
- Meeting invitation times are displayed inaccurately in Outlook for Mac
- Fixes an issue that causes meeting invitation times from non-Exchange calendar servers to be off by one hour during certain times of the year.
- Slides in collapsed sections cover other slides in Slide Sorter view in PowerPoint for Mac
- Fixes a display issue that involves collapsed sections in Slide Sorter view.
- Hash tags (#) in hyperlinks aren’t saved correctly in PowerPoint for Mac
- Fixes an issue in which hyperlinks that contain hash tags (#) aren’t saved correctly.
- Crash occurs when you use Paste Special with a partial table in PowerPoint for Mac
- Fixes an issue that causes PowerPoint to crash when you use the Paste Special option to copy and paste part of a table.
- RTF text that’s saved in PowerPoint for Windows can’t be pasted into PowerPoint for Mac
- Fixes an issue in which RTF text that’s saved in PowerPoint for Windows can’t be copied and pasted into PowerPoint for Mac.
There is another undocumented, very important change: a different opening welcome screen that removes the 30-day trial and ties it to Office 365. Here’s the original screen:
Here’s the new screen:
If you click “Try Office 365,” you have to create a Live account, then sign up for a trial that requires a credit card number and will start billing you at the end of the cycle. It’s like Video Professor: Microsoft Edition. “Free trial… wink wink.” The link at the bottom also means what it says: you can view files but don’t think about Saving them.
In my case, a corporate user needed to use the trial until a license could be purchased. Even when we tried to sign up for Office 365′s trial, creating the Live/Outlook.com account required us replying to an email verification that was blocked by the user’s corporate firewall. I was forced to uninstall, reinstall, repatch manually. Wasted time and I felt dumb because I was caught off guard, though the user was very nice and patient.
In other words, if you need to use a trial of Office, do not update past 14.2.5. Install 14.1.0 through Autoupdate, then manually install 14.2.5. This is odd because it’s things like this that discourage users from immediately installing updates that, more often than not, are in their best interest.
Be careful!
Can’t open Exchange Shell or Console because of Kerberos authentication error
If you get this:
The following error occurred while attempting to connect to the specified Exchange server ‘yourdumbservername.nerd.local’:
The attempt to connect to http://yourdumbservername.nerd.local/PowerShell using “Kerberos” authentication failed: Connecting to remote server failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
Check the time on your Exchange server(s) relative to the DCs. In my case, they were very out of sync because a Virtual DC updated its clock to match the host. Make sure everything is in sync, give it a moment, give it a try. I reset IIS on my servers for good measure. Found a lot of messages about this, no good solutions.
Woe – Album 3
Just finished what may be the final mix after a very full weekend of work. I took tomorrow off work to make sure it’s completely done. Mastering in two weeks. More info to come…
Who Actually Clicks Google Ads?
Because my page gets a respectable amount of traffic for something that has almost no direct links and no promotion whatsoever, I decided to slap Google AdSense on it. The majority of my visitors are hitting a few key tech posts that deal with somewhat specific nerd concepts that haven’t seen much love elsewhere. I want their money. All their money. You, reading this: give me your money. No? OK.
In the past few days, I’ve had a couple hundred visitors and nobody has clicked the dumb add on the right. Frankly, I’d be shocked if anyone had clicked it; I mean, who actually clicks Google ads in 2012 unless they’re on Google.com and accidentally hit a promoted search result? A few years ago, I used to click the ads of a competing tech services company so they’d have to pay for the hits cause I’m a jerk.
Do you click them? Do you know people who click them? Have you used AdWords with success? Tell me your stories.
Repairing a Failover Cluster in Windows Server 2012 – Live Migration Fails, DNS Cluster Name Errors
I’ve been dealing with a Failover Cluster in Server 2012 that was reporting DNS errors.
Cluster network name resource ‘Cluster Name’ failed registration of one or more associated DNS name(s) for the following reason:
The handle is invalid.
.Ensure that the network adapters associated with dependent IP address resources are configured with at least one accessible DNS server.
Live migration of Hyper-V machines failed with an error that gave no real information. I dug around a little bit and found that it was related to DNS. The solution: login to the DNS console, grant your cluster machine’s name full control over the record, stop the cluster resource, hit the Repair button, restart the cluster resource. This is all well and good, but WHERE THE HELL IS THE “REPAIR” BUTTON?
Every site I looked at said to stop the named resource and then hit “Repair” from the Actions menu at the right. I looked and couldn’t find it. I felt like an idiot… Am I an idiot? Possible, but there must be others out there who are or were frustrated by this.
Fear not, fellow idiots. The solution is simple. You do not right-click your cluster name from the main navigation column on the left. Select your cluster name while it is running. In the center panel, go down to “Cluster Core Resources,” right-click your cluster name there, hit stop, and then you can select “Repair” from the actions menu on the right or just right-click the resource itself and hit that option. This may be a simple semantic nuance, something that people who learned this from classes or reading MS documentation would know, but those of us who learned by abandoning joy and the warmth of others may be confused.



