HN user

qaexl

508 karma
Posts8
Comments246
View on HN
Rails is not MVC 15 years ago

Hmm. Maybe? Seems impoverished to me.

Someone on the comments for the original article said, the big idea in Rails wasn't so much MVC as much as separation of concerns. I'm on-board with that. Thinking in that way has brought a lot of advantages for me over the years I've been working with Rails.

By extension, if the big idea is "separation of concerns", then I should be applying it in my non-Rails code too, whether that's "MVC" or not "MVC". In fact, my small taste of functional programming allowed me to play with "separation of concerns" in a different coding style, one that I've imported back into the Ruby code I write. Write functions without side-effects. Treat data as immutable. Interesting times.

Rails is not MVC 15 years ago

Agreed. I can't find any insight or advantage in making this kind of a distinction.

The article attempts to address it by saying that people attempt to implement Model2 on a Javascript front-end. That is awkward. However, it isn't awkward because you should be using real MVC. It is awkward because Javascript is asynchronous and you want to make sure the user interaction stays responsive without devolving into spaghetti. The key insight is "asynchronous" rather than "let's do REAL MVC!"

I've seen this obsessive focus on taxonomy of solutions divorced from specific problems in domains outside computing. I suspect it's a cultural thing. Some cultures obsess over gadgets more than others. That works out until people start arguing about who has the shinier toy, instead of actually using said toys as tools.

I'm observing some people trying to break into technology. Yes, there are online tools available. Yes, many of them are free. One of the complaints I hear is that the target platform you choose moves so fast.

Generalized, it means software -- the technology and the economy -- runs at a higher tempo. In order to step into the stream, you have to first match the new tempo.

I suspect that the rest of the economy stays in a slump because they are out-of-phase tempo-wise with software technology ... or that the tools that drive up the tempo of innovation in software has not made it out to the mainstream yet. (And even if it did, it will leave people behind simply because there are people who will refuse to impedance match).

You ever played Weiqi? (Otherwise known as Go).

Unlike chess, stones don't move once played. They can only be captured. On a 19x19 board, you have to balance short-term gains with long-term gains. Since there are no left-right or top-bottom orientations, you often have to reimagine where you draw the lines of territory as you play. Sometimes, you can kill your shapes by playing too many stones. Better players can see where things will go, identify "dead shapes," and stop wasting time trying to rescue them. Sometimes you trade off bad moves for bigger gains. Sometimes you simply have to work with mistakes you made in the early game.

This is very much like writing code and getting it to market. You're trying to build something despite disruptive opposition even as the clock winds down.

(1) I have respect for people who can put a project together and get revenue flowing through it.

(2) This technology stack sucks.

(3) That your technology stack sucks does not mean you suck.

(4) Maslow's Four Stages of Competence starts with Unconscious Incompetence. You don't even know you are unskilled. (http://en.wikipedia.org/wiki/Four_stages_of_competence)

(5) This isn't a popularity contest. (http://www.ribbonfarm.com/2009/10/07/the-gervais-principle-o...) Being cool and being in the in-crowd has nothing to do with your technology stack. That goes for nerds too (http://www.paulgraham.com/nerds.html)

(6) The tone of this article is defensive. The issues relates to identity, not technology.

(7) Relax, people.

Want to see a non-incremental innovation for multi-touch calculators?

A friend of a friend wrote this: http://mathtouchapp.com/ (He doesn't know I'm linking it here).

The app throws away the calculator metaphor and starts from scratch. Instead, the author uses the back-of-a-napkin as the metaphor.

You start with a blank page and add systems of equations. You can visually link variables together. You can insert values along with its unit of measurement and numeric precision. You can feed results to graphs.

At $10, this is cheaper than getting the Nspire if you already have an iOS device. But of course, you can't use it when taking the SAT. And it would be cool if you can export it to Wolfram's computational data format and trade formula libraries.

You need to actually understand the math instead of just punching the buttons. Then again, isn't that what Sal Khan's videos are for?

Dear procrastinator 15 years ago

I've had similar, fleeting thoughts brewing for a while. Seeing this stated together like this crystallized it. Thanks for sharing.

Gentoo can be a pain in the ass, but the occasions when I need package masking and using precise, specific library versions, there's nothing else that does it.

Ultimately, I think Homebrew will win out because:

(1) It is on github (http://redmonk.com/sogrady/2010/04/01/github/)

(2) The Homebrew DSL is far, far easier to work with than Gentoo ebuilds

(3) From what I've seen, you don't need root privs to develop Homebrew formula, but setting up fakeroot to develop Gentoo ebuilds is a pain.

Homebrew or not, VM'd Linux hosted under OSX is a sweet spot for what I'm working on.

Some context. I started this current gig 18 months ago. I develop on Ruby on Rails (of course), and ultimately deploy it into the Rackspace Cloud. I also wanted to mess around with Opscode Chef. I had also watched friends and business partners struggle with MacPort for years, and watched them struggle with bundler and rvm more recently. I wanted to skip that.

I'm actually using VMWare Fusion. My employer had an extra copy. I run VirtualBox at home. The platforms are not exactly the same, but my beefier gaming box running (now older version) of VirtualBox seem slower. For the purpose of developing in a VM, I don't think it really matters between VirtualBox or VMWare technology-wise, as long as you have some sort of command-line tool to bring up new VMs.

I wrote some bash scripts to clone VMWare images, including filters to search name references and rename them to the image. You can use Vagrant to do the same with VirtualBox, and from the demos I've seen, it is a easy way to get into this setup on your MBP.

I built out a template with 256M + 10 GB slices, just like on Rackspace Cloud. On the i5 MBP, I allocated a single core to each slice. On my current i7/8GB setup, I'm allocating two cores. I've also had to beef up two of the slices from 256M to 512M and 1G so that I could run the full rspec against the apps. I have tried allocating all 8 hyperthreaded cores, but I guess VMWare Fusion isn't quite like Xen. I generally run no more than two slices at a time. VMWare Fusion makes it relatively easy to suspend VMs, and I don't jump around on a number of projects so I have not needed to hot-potato things much.

I had not had problems with VMWare with regards to idling. Both VMWare Fusion and VirtualBox are now using Xen-style paravirtualization, so when it is idle, it sits idle. When it does eat up computing cycles when idle, it has more to do with Rails (or Merb) polling inappropriately. With this setup, I've had problems on the i7 MBP kicking up the fan for no apparent reason and I suspect it is Chrome or Flash.

Wakeup/suspend by closing the lid works on the VMs. Linux doesn't even know the VMs have been suspended, so I don't mess with any kernel settings for that. On the downside, these VMs currently run on an independent wall clock which means resetting the clock if I want accurate timestamps on commit logs. There's probably a setting to fix that.

I'm using Gentoo for the distro, but that doesn't matter as much as using the distro you like or better yet, using the distro you are deploying against.

Editor-wise, I am shelling in with ssh and using vim + Rails.vim against screen. (I'm also using Terminal.app + Visor and iterm2 w/ visor mode). I have a customized /etc/hosts file with shortnames for the VMs so I can shell in fast on the occasions I do shell in. (I have flirted with shelling in and using Emacs -- it works wonderfully well, if I wanted to abandon VI modal editing).

Each slice is configured with two virtual ethernet devices, one going to physical ethernet device (bridged) and one going to the virtual LAN (no NAT). Since I sometimes go use free wifi and they require IP authentication, I don't see the point of exposing the internal slices to the world. Instead, I installed Nylon through MacPorts and have it turned on to accept SOCKS5 requests from anything inside the virtual LAN. On the VM side, I have proxychains set to talk to Nylon on the outside. This way, I only have to web-authenticate once on the free wifi and prepend my git pushes with proxychain. With the virtual LAN, the intent was so I can always shell into my vm on my laptop regardless of my external network connectivity.

One nice thing about this setup: at some point, when the Gems start accumulating and start bogging down load time for Ruby and Rails, I can drop it and clone a new VM.

Due to some circumstances, I'm going to be getting an i7 Air by the end of this month and I'll replicate the setup. I may use Homebrew or Gentoo Prefix on the host side, but I'll still continue to use some sort of virtualization of Linux. I'm skeptical about drinking the 'brew ...

I have a friend with a similar setup. The friend has to run Windows to do proper browser testing so he has different requirements. He also has FUSE running with a Samba shared folder so he can use TextMate on the host side and run things on the Linux side. I've only had a few occasions where I wished I could do that, virtual DropBox-style, but it hasn't reached the level of scratching-itch yet.

I run Linux ... virtualized in OSX. Because OSX and MacBooks has wireless that just works. It has networking that just works. And it has suspend/wakeup that just works. But its bundled UNIX toolchain sucks, and Macports, et. al. don't just work.

I run the VM headless, sized similarly to a typical Rackspace Cloud server. This setup lets me use the GNU toolchain while being highly mobile.

The general doctrine sounds great. The specific solution outlined sucks. My hypothesis: easier to get in touch with primal survival instincts and twiddling that directly. The author is still answering those self-reflection questions with abstract thoughts that has nothing to do with survival instincts.

Meaning: Interrupt yourself every time you feel procrastination -- that heavy, draining, depressing, oppressing feeling -- that sudden drop in energy when thinking about taking the next step -- or even planning and deciding the course of action to take you to your goal. Catch yourself feeling this. Then directly manipulate that.

ITerm2 1.0 Released 15 years ago

iTerm 2's visor mode was still a bit wonky so I keep Terminal.app around just for visor. But that was when I was using the alpha and beta versions.

I've been using iTerm as my main vim screen for over a year now. iTerm 2 alpha chugged right along for this.

@nl: I thought he was talking about user lists at first too, but he kept talking about groups, so I tried addressing both. You can see it in my reply.

But just to be sure, I had attempted to use user lists in the same way to restrict posting out and I was not able to.

Further, I reiterate: Google+ does not work like Unix groups. It works like Livejournal friend filters. The groups are relative to whatever you define and it is not global across the entire domain, unlike with Unix groups.

To implement circles/friends list as Unix groups, you would have to introduce the concept of namespaces in which the set of groups is scoped within a namespace. Then you attach individual namespaces for each person. In other words, named sets of named sets. The named sets themselves are not global, even though the members are.

So I just checked again. I see that after I click on -> lock button -> drop-down customize -> Specific People and then type in the list, I can restrict the update there.

I am testing this now: Once I select it, it says "Custom Setting saved" ?? Wait, does that mean I can only have ONE custom setting?

I just posted a test post. The resulting post has no indications that it is a special-restricted post. Along with the customized setting, does that mean that I can set a single default friend's list that I then blurt out to? What if I want to switch around?

If you know of an easier way, I will gladly say, I was wrong about Facebook lacking in the functionality I want.

I've mentioned in other comments here, Google+ defaults to "warren" and Facebook defaults to "plaza". Each can simulate the other with some contortions. That makes this more like a set of Evil Twins (http://www.ribbonfarm.com/2009/09/17/your-evil-twins-and-how...).

Meaning, if you don't get why Google+ is a killer app for me, then you don't really need the functionality it provides like I do. And that's reasonable by me. Whether or not this means that Google+ will "kill" Facebook (I doubt it) or not, I don't really care much about it.

There's a persistent myth that Facebook Group is the same as Google+ Circles. They are nowhere near each other. In fact, Google+ does not have the equivalent of Facebook Groups, unless you count in the older Google Groups.

Facebook Group is closer to Google Groups or Yahoo Groups or any one of the dozens of forum-type sites. You create a space in which people join. It creates a venue. Google+ Circles is much closer to Livejournal friend filters. You have overlapping contexts but no single, formal venue that you join. Psychologically and sociologically, it works differently. It takes a lot more engineering work to get circles implemented than it does Facebook Groups (as it is implemented today).

I've been revisiting sending messages to specific groups of people in Facebook, outside the Groups context:

- To send to specific people on Facebook, you specify them directly. There are no pre-defined lists of people. Further, you have to jump extra hoops to do this, by clicking on the tiny lock icon, and then clicking on custom, and then typing in the names of the people you want to send this to. You have to do this for every single post you want to send out on a limited scope. Clearly, the Facebook UX designers want you to send it out to everyone.

- You can do the equivalent of private message to a group of people for an ad-hoc group. The last time I tried that, I hit its biggest limitation. I wanted to add more people into the running thread and it would not allow me to do that. Fortunately, everyone involved are current Livejournal contacts and we moved the conversation over there. Google+ does not allow you to add more people or circles to a running thread, but it does allow you to add more people into the circles which are dynamically computed into existing threads. As it should work.

- Google+ Profiles lets you specify exactly which part of the profile is viewable by which circle + people. You may not want your business phone number available to your drinking buddies, and you may not want your home phone number available to your business contacts.

- Google+ has a tool that lets you view what your stream looks like to other people. Admittedly, this is somewhat buried in the site.

- saurih brings up a very good point, "it doesn't matter how good your security is if people refuse to lift a finger to use it." A large % of the people in my circles are using it as public posts -- either thinking it in terms of Twitter-public, or they don't really care to. One of the people on there twigged on an insight: public posts on Google+ are meant for things that are relavent to everyone. People tend to post publicly and ignore much of the circle functionality; and as such, the interface will feel clunkier because you're not making full use of it.

On the other hand, all my friends who are expats from Livejournal and had been itching to ditch Facebook for something that provides this granularity of social contexts have set up the different streams.

In any case. Google+ scratches an itch I had. I'm glad it is here. It is the right tool for me, whether or not it is the right tool for the vast majority of Facebook users.

Yes. I saw that. It doesn't work all that well.

One of the comments I saw on Google+ is making a distinction between a "plaza" and a "warren". Facebook defaults to plaza though it can do warren with some contortion. Likewise, Google+ defaults to warren and can do plaza with some contortion.

With my wide-ranging interests and extremely, sometimes mutually-exclusive perspectives, personal beliefs, pet philosophies and operating paradigm, I prefer a social network that defaults to a "warren".

In the end, it is probably a case of the "Evil Twin": http://www.ribbonfarm.com/2009/09/17/your-evil-twins-and-how...

Google+ solves most of the problems I have with Facebook. The circles more or less reimplement what I have been using with Livejournal for ten years now. I've been migrating as many of my contacts off of FB as I can, with the plan to cull my FB friends list and then ditching it as far as daily use is concerned.

If I am applying the Gervais Principle right, Google+ will never completely supplant Facebook. That's fine by me.