The Joys Of Programming

I just rewrote my entire shader/VBO object model for Anaeax (I was an idiot at first, built it only for single shaders and no arbitrary uniforms--very inflexible, good for exactly what I needed at the time but I grew out of it fast) and while it almost works I think I have a small problem.

IMAGE(https://pbs.twimg.com/media/Be-ka2bIMAAvqLt.png:large)

(The colors are supposed to match up only with the words. Now here's the fun part: my part of the code isn't multithreaded. I think I'm thrashing things in the GL layer. And I have no idea how.)

Well, maybe it's just coincidence, but an interesting thing about that screenshot: all the letters of a given type seem to be rendering in the same color. All the Rs are red, all the Ds are red, and the blue and green letters seem to be unique.

If that's not just happenstance, perhaps you're misunderstanding the API?

Yup, you're right. My refactoring enabled a copy constructor that should have been erroring out. Oops.

(And I surely don't understand the API, this thing is like two giant middle fingers just for me. Inconsistencies everywhere, documentation that makes a ton sense once your already don't need the documentation, etc. It's awesome.)

documentation that makes a ton sense once your already don't need the documentation, etc.

That's so common in open source.... documentation that's written for people who are already expert in the problem domain. I know they're not being inscrutable on purpose, and I'm thankful there's any code or documentation at all, but I wish more open source programmers would take the time to explain how they model the problem they're solving, to talk about the actual goals they have in their project. Trying to figure out both their mental model and the API and/or configuration syntax simultaneously can be pretty frustrating.

Ed Ropple wrote:

I'd call it a little snark rather than a lot, but, more importantly.........

It's funny that you say all that. I have spent countless hours trying to help people get their maven projects working on Eclipse and IDEA IDEs because they rarely work on the first try. The configurations are confusing and hard to find to tweak the IDE to get things to work. And when they finally get it working, they are always having re-occuring problems. For those I get to use Netbeans, they rarely come to me with problems. Maybe for power users your points are accurate, but for the average software developer, Eclipse and IDEA yields more problems then it is worth.

Malor wrote:
documentation that makes a ton sense once your already don't need the documentation, etc.

That's so common in open source.... documentation that's written for people who are already expert in the problem domain. I know they're not being inscrutable on purpose, and I'm thankful there's any code or documentation at all, but I wish more open source programmers would take the time to explain how they model the problem they're solving, to talk about the actual goals they have in their project. Trying to figure out both their mental model and the API and/or configuration syntax simultaneously can be pretty frustrating.

Hell, I have the same problem with Windows API documentation and 3rd party docs for stuff we actually pay for.

*Legion* wrote:
Ed Ropple wrote:

It isn't "use a text editor instead" bad

Every IDE is.

Sorry, my invitation to the snark party just arrived.

I'd like to point out again that Visual Studio is hands down the best IDE in existence.

bandit0013 wrote:
*Legion* wrote:
Ed Ropple wrote:

It isn't "use a text editor instead" bad

Every IDE is.

Sorry, my invitation to the snark party just arrived.

I'd like to point out again that Visual Studio is hands down the best IDE in existence.

You people are all f*cking nuts.
Back to browsing tpope on github to enhance the already amazing vim.

So you're telling me there's not one solution that's best for everyone?!

bandit0013 wrote:
*Legion* wrote:
Ed Ropple wrote:

It isn't "use a text editor instead" bad

Every IDE is.

Sorry, my invitation to the snark party just arrived.

I'd like to point out again that Visual Studio is hands down the best IDE in existence.

That's like saying someone is the best Cleveland Browns QB in existence.

*yawn*

.

Anyone have a chance to look into Koding? (my referral link - you get a 5gb VM instead of 4gb if you signup, and I get an extra gb added to mine)

McIrishJihad wrote:

Anyone have a chance to look into Koding? (my referral link - you get a 5gb VM instead of 4gb if you signup, and I get an extra gb added to mine)

Have another GB, thanks for the link!

Might as well have another. Can't have too many GBs.

McIrishJihad wrote:

Anyone have a chance to look into Koding? (my referral link - you get a 5gb VM instead of 4gb if you signup, and I get an extra gb added to mine)

Enjoy your extra jiggabytes!

I know how to setup a LAMP stack real quick for my own dev purposes but for a live/staging web servers with multiple developers logging, I could use some help in regards to the Linux and Apache setup. I'd love a book to just dive in that's all about LAMP. But if anyone knows of an in-depth site that's more than just an Here's How To Install LAMP, that'd work too. Or since it's mainly the L and the A I need the most help with setting up, separate books on each topic might be best.

McIrishJihad wrote:

Anyone have a chance to look into Koding? (my referral link - you get a 5gb VM instead of 4gb if you signup, and I get an extra gb added to mine)

And *YOU* get another gigabyte!

Giggity giggity.

koding.com doesn't seem to want to load, what is it?

Lots of jigglebytes.

RolandofGilead wrote:

koding.com doesn't seem to want to load, what is it?

Supposedly, it's an in-the-browser virtualization platform that lets you plug and play with various stacks and frameworks. And then it has connections to GitHub for storing your code, and support for collaborative work with other developers.

But then they had a big marketing push yesterday and got crushed by the response, but should be running smoother in a day or two.

Too much McIrishJihad GB-ing in other words. ;P

McIrishJihad wrote:

Anyone have a chance to look into Koding? (my referral link - you get a 5gb VM instead of 4gb if you signup, and I get an extra gb added to mine)

Moar gigglebytes++

McChuck wrote:

...But if anyone knows of an in-depth site that's more than just an Here's How To Install LAMP, that'd work too...

For apache, the official documentation is very good and really the only thing that I've constantly consulted over the years: http://httpd.apache.org/docs/2.4/

For the L part... if you just want a more pragmatic approach, Linux Phrasebook has seen me through times when system man pages (built in linux documentation) has not been installed/no network access/don't have a clue where to begin. It's structured so that entries are set in a "I want to do X" format. That may not work for all peeps, but it's bailed me out several times over the years. I still have a copy on my desk even if I don't think I need it anymore.

McChuck wrote:

I know how to setup a LAMP stack real quick for my own dev purposes but for a live/staging web servers with multiple developers logging, I could use some help in regards to the Linux and Apache setup. I'd love a book to just dive in that's all about LAMP. But if anyone knows of an in-depth site that's more than just an Here's How To Install LAMP, that'd work too. Or since it's mainly the L and the A I need the most help with setting up, separate books on each topic might be best.

Unless you have a particular burning need for Apache, I would suggest investigating nginx. It's simpler to configure (in part because it does less stuff, in part because it isn't Fake XML, Bro) and generally better-performing in most use cases unless you really know how to work Apache; if your P is PHP, php-fpm is a fastcgi engine that offers out-of-httpd persistence of stuff like APC/XCache/whatever-you-use and basically every PHP project has a decent nginx config floating around. WSGI is easy too, if you're a Python sort. For scaling, etc., I usually use another nginx instance configured as a reverse proxy (also easy) if I can't rationalize a load balancer.

My dev boxes and staging/prod boxes use the same basic Vagrant/Puppet setup, pointed at different sources (vbox for local dev, kvm for staging/prod) so I only have to do it once. There are a number of good ones bouncing around the net depending on your exact needs. Puppet in particular abstracts away much of the basic underlying *nix knowledge to the point where it seems pretty easy for fairly inexperienced folks to make changes once they have something that works.

Apache's fundamental design comes from an era where multiple people shared each machine, so it had to be quite configurable, on the fly, to suit a bunch of different users. Much of its system-level configuration can be overridden by files in the filesystem, on a per-directory basis, and all that extra loading and parsing slows it down. Plus, it spawns separate workers for each connection, so on a heavily loaded website, it could be spinning off hundreds or even thousands of threads, requiring the processors to spend a bunch of work in kernel space, allocating time fairly between them. They do their damndest to make schedulers run fast, and I imagine the Linux scheduler is a marvel of code efficiency, but that's fundamentally a hard problem, and you're going to be burning a lot of CPU jumping back and forth between kernel space and all those userspace processes.

nginx is different: it's basically designed to have one system-level configuration per site, and it's not overridable by anything in the filesystem. All the settings for a site are pretty much in one flat file. It looks fairly similar to Apache syntax, and you won't have trouble picking it up, but is fundamentally a much simpler and more straightforward approach. It's not designed around shared access, it's meant to work for the system administrator only.

By default, it will spin off a number of worker threads equal to the number of processors you have, so a typical quadproc server will have four nginx server processes. They live until nginx shuts down again, and they steadily chew through whatever outstanding work is available. The same process could potentially serve millions of requests without dying or exiting. The kernel doesn't have to spend much time trying to fairly compute and allocate run times for thousands of clients, it just has like four, so there's very little system overhead with this approach.

This means that nginx is really, really fast. Like, really fast. Even on my own internal webservers, I saw a substantial performance difference when I switched over. If you've got a simple site, it is just amazingly efficient.

However, there are many things it doesn't do, so it has nice syntax for handing off requests for, say, dynamic content to some other server on the system. So you can run both nginx and Apache, with nginx doing all the grunt work with the static content, shoveling it out at blinding speed, while Apache uses its much more complex environment to handle dynamic runtimes like PHP or mod_perl or whatever.

Apache tries to be all things to all people, and it's kinda slow and clunky in many ways. nginx tries to be just one thing: a maximally efficient basic server for static content. And, wow, did they ever deliver.

Is there a lightweight tool for checking in progress on an arbitrary file? Something that doesn't require a fully hosted ticketing/SVN system, with any luck, but pushes updates to, say, an internally hosted web page or somesuch.

Background: I sometimes find it hard to stay on-task at work. The distractions are at least tangentially related, e.g., I'm looking up ways to identify to which statistical distribution I should attempt to fit my data (or vice versa), which becomes a rabbit hole and I'm an oh-so-willing rabbit. I thought that if I had a simple means of surfacing my progress on various projects, I'd focus a bit more on them, but without it requiring someone standing over my shoulder. The projects aren't yet related to programming as such, but revolve around Excel and some SQL data diving and such. I hope to eventually introduce a programmatic layer to our data analysis, using the common suite of Python data analysis tools, and I know we have a git repo tool (not GitHub nor bitbucket and can't recall which it is) so at that point git may make sense. Maybe it makes sense even now.

I looked into Basecamp, and there are similar tools, but they're more leaning against full team project documentation. I've tried StayFocusd and may yet again resort to it, but it's slightly more punative. Then I thought that having a stream of low-friction commit/update data about what I'm doing would just keep things transparent and have actual tangible benefits.

A DVCS like git or Mercurial doesn't require any sort of hosted service to work, just a filesystem. It will work with more than one file. (Honestly, Subversion will generally work on a filesystem, too, but it's a lot harder to share the history when you eventually discover that you want to.)

If you want single-file VC, the canonical answer is RCS. I do not advise using it--there's a reason almost nobody does anymore.

I'm talking about something that will show my status updates similar to commits. Maybe I'll look into our git-based repo as a means to this end.