If anything, it really highlights the additional burdens of his approach and suggests that computer security as a service to consumers is about more than just security.
608 karma · joined April 13, 2011
If anything, it really highlights the additional burdens of his approach and suggests that computer security as a service to consumers is about more than just security.
However, if you lack experience with certain kinds of problems, the initial investment of designing good code requires quite a bit of thought and care to do right, otherwise there's the risk of introducing lots of unnecessary complexity by adding lots of unnecessary classes and relationships.
And that's exactly the problem Alex is addressing in his blog post, because his fellow programmers don't share those same principles of good code. As a result, they get caught up in making large, cluttered interfaces with lots of interwoven objects that have shared responsibilities, and then they call that good Object Oriented code (because there's lots of objects, right?). They might even apply as many acronym riddled patterns as they can, because that's the way some really smart guys who wrote some books suggested, and they want to do things the right way.
In other words, there's a cargo cult of OOP, and it loves complexity.
In contrast to that, it sounds like what Alex does when he come across something where the architecture necessary isn't very clear is essentially what I do: carefully write code from the bottom up and refactor it as I go, if at all. That way, the relationships inherent in the code become clear, and you can create the minimal number of classes and relationships necessary to decouple those relationships.
And so what he's suggesting is that other programmers do the same. Don't waste time trying to develop a solid architecture from the top down when it isn't immediately obvious and start working from the bottom up instead.
Of course, in ten years, he'll probably be writing most of his software from the top down, finally capitalizing off all those years of hard earned experience writing code from the bottom up, but that'll be then, not now.
The power of VIM as an effective and consistent text editor is far more important to me than the power of VIM as a highly configurable editor.
The LPK25 is limited, but it's definitely more convenient for getting down ideas than using a computer keyboard, since once you have it set as the MIDI input device in an application, you can hit keys and play notes without having to worry about what application is in focus and what its keyboard shortcuts are. Computer keyboards also only recognize up to a certain number of keys being held down simultaneously (since they're designed with the assumption that you won't be pressing five keys in the same row at the same time) and don't provide velocity or intensity information, but you always get note intensity and velocity MIDI information out of a MIDI keyboard. As for the limited number of keys, you can shift the keyboard down or up entire octaves with the buttons on the left and then record the left and right hand parts separately in two passes. You can also look at it and see what notes you're pressing instead of having to translate between a computer keyboard and a musical keyboard.
So I'd say it's quite useful compared to having just a computer keyboard, and the small size means you're that much more likely to have it with your computer, even if your computer is a laptop and you travel a lot. Your argument that it only does what you could still do with a computer keyboard is like saying the virtual keyboard on an iPad is just as good as using a bluetooth keyboard, since they offer the same keys and basic functionality... so a bluetooth keyboard for the iPad is useless. But you'll probably still want to use that bluetooth keyboard with the iPad if you're doing any amount of writing, because it just makes it easier to type (and it frees up the screen space for what you're writing).
If you have the desk space though, Behringer makes some cheap gear that usually works fine, so go with a larger keyboard and check out the Behringer UMX610, which should work perfectly with Linux:
http://www.bhphotovideo.com/c/product/672870-REG/Behringer_U...
You could even use such a keyboard for actual performances if you absolutely had to, but it probably doesn't play as nicely as your Casio, and you should probably figure out your latency problems in Linux. (To be honest, if I were doing anything music related on an everyday basis, I'd much rather use Cubase on a Mac. Linux software is a disheveled mess of parts that can fit together quite nicely, but can also cause a lot of hairpulling too.)
Finally, you probably don't want to hear this, but if you have time and energy for ear training practice, relative pitch recognition would make your life a lot easier and solve most of your problems. Then if you can work out what the first few notes of your song are and you figure out the key, you can figure out how to write down the rest pretty easily from there. Then you could use some of the score editing software, trackers, or anything else that people mentioned in the other replies.
As it is now, it sounds like most of your musical fluency is trapped away in the muscle memory of your hands, and that's the real source of your current problem, since it's the same as being able to speak and listen, maybe even read a bit, but not write anything.
Anyway, just something to consider. Good luck, and I hope you find something that works for you.
I also bought a license for Renoise, which I use occasionally, but trackers are too involved for my tastes and I prefer a piano roll layout for editing notes. It does allow you to use your computer keyboard as a music keyboard though, and the layout isn't bad, but you're still better off using a small MIDI keyboard.
I used to use Cubase (got the full version in a box somewhere), but it's overkill for an amateur like me, and I don't even have a Windows PC or a Mac to run it on anymore. Maybe someday I'll buy a Macbook Pro or something.
http://www.filter24.org/seq24/
For right now though, huge 1920x1080 resolution screens are cheap enough now that having just one screen isn't so bad anymore, but it's only a matter of time before you'll pretty much need two or three screens like that. Fortunately, it sounds like these guys will have a real solution worked out within a matter of years.
As I would define it, hinting is the modification of the appearance of the font at smaller sizes, usually away from the actual outline design of the font and the original spacing, in order to make it fit into pixel boundaries for the purpose of clarity and readability. Used with subpixel rendering, you can get sharp, punchy text that is even more readable, but I wouldn't consider subpixel rendering by itself to be hinting.
If anything, unhinted subpixel rendering (where any auto-hinting has been disabled and all font hints are ignored) allows the font to look more like the intended outline design in spite of being rendered at a small size on a low resolution screen by boosting the horizontal resolution and interpolating the values between points where the outline crosses partial pixel boundaries. That is, it allows all the glyph metrics to remain intact at smaller sizes while improving readability, whereas the very notion of hinting implies that those properties have been intentionally modified for the purpose of readability.
To me, the spacing and kerning of the fonts matter much more than the clarity of the individual glyphs. Seeing letters smashed together or with wide gaps between letters drives me insane...
The fundamental language feature that makes true functional programming possible is first class functions, since that allows higher order functions and anonymous functions. The lack of that feature in most mainstream languages is why functional programming feels so foreign to most programmers. Sure, you can write functions without side effects, but making good use of them without polluting your namespace, explicitly passing around function pointers, or having lots of extra boilerplate code lying around is difficult in a lot of languages.
That's constantly changing though. I think as more languages start adding support for higher order functions, even established languages like C++ and Java, we'll see more and more people using a functional style and less nonsense discussion about how "hard" it is, because it really isn't hard at all. Already, you see bits and pieces of functional Javascript code littered all over the Internet on a regular basis.
In fact, I'm willing to bet that at some point in the future, functional programming techniques be considered easier and more natural than a purely imperative approach, simply because more programmers will have encountered it sooner in their programming careers and made effective use of it. It'll be an everyday occurrence to meet a programmer who uses anonymous functions for callbacks and commonly makes use of fold, reduce, and map instead of explicit loops and state variables.
Meanwhile, meeting someone who knows what a pointer is or even how to manage heap memory will be a one in twenty event, and chances are that person will be an embedded developer who also knows how to write interrupt handlers and even a custom, deterministic memory allocator for real time applications.
$ echo 'escape ^uU' > ~/.screenrc
Or I quickly start tearing my hair out and screaming profanities every time I try to do something.
$ kate &> /dev/null &
I was only able to give up on Mac OS X when I decided to give up on Adobe software thanks to Adobe's abysmal customer service. Now that I don't need to be able to run Photoshop, I just use Linux.
I remember learning VGA programming in C and assembly language how it was instrumental in helping me finally grasp just how low-level C really was. That's when I finally realized what pointers really were and just how useful and dangerous they could be.
You could also charge a small recurring service fee for accounts and then give the app away for free.
This would be great for cloud computing with family videos or games that you rent online which stream all the content directly from the servers.
With the rise of IPv6, it could also lead to the development of a more distributed web content model where people host a lot of their own content for others to access and browse using personal web servers instead of P2P clients, since pretty much everyone will have the extra processing power and bandwidth.
There's a lot of uses, and many of them could easily become the new "needs" of the future.
So it's not just "more fair" to set reasonable prices -- like your gut suggests -- but they also discourage competitors from appearing.
I guess the real question is whether or not you're willing to risk future competition for the short term benefits of increased profits.
For some users like my dad, the tiled interface with a touch screen should make it easier to use the computer. He doesn't use them enough to learn the whole stacks of windows metaphor and all the operations involved with it, but he can pick up an iPad and use it just fine.
The real significance I see here is that Windows mobile developers with just the skills of a web developer can now target desktop and tablet users fairly easily with the same exact code and a similar UI. If Microsoft releases their own App store for Windows 8, then that provides a unified platform for developers to sell the same product to every kind of Windows user from kids with smartphones to grandparents with a desktop PC.
And if the tiled interface takes off with the not so computer-literate, there'll be a great new demand for applications that fit into it's metaphors to prevent the jarring experience of being thrust back into a classic Windows-like environment, kind of like the demand for GUI applications after Windows supplanted MS-DOS.
If anything, it's more convenient to be able to do Ctrl-A, Ctrl-f, Ctrl-f, Ctrl-d, Ctrl-d than reach all the way over to Home, hit right arrow twice, then hit Del twice, especially when you use caps lock as Ctrl.
You can kind of do the same in Linux (GTK+ has emacs keybindings you can enable inside text fields as well), but it'll always work better in Mac OS X because they have the Command key and forced everyone to make good, consistent use of it, so using Ctrl for emacs shortcuts usually doesn't clobber anything.
Honestly, globally available emacs keys and the ability to run Photoshop/Premiere Pro/Cubase/etc. without giving up my UNIX-like commandline are the two major reasons I like using a Mac. Quirks with Finder don't bother me since I only use it to browse files -- almost everything else, like moving or copying files, I usually do using the commandline anyway. Things are also more consistent and more stable with a Mac, since they tailor the hardware and software to specifically match each other and Apple is very big on getting developers to follow their UI conventions. I also enjoy using multi-touch gestures on the generously sized touchpads they have on the newer Macbooks and Macbook Pros.
But other than that, there isn't anything Mac OS X has to offer that Linux doesn't provide, assuming you're using it on well-supported hardware (which can be hit or miss when shopping sometimes).
Everything really is slower on a Mac too. All the file operations are hooked into Spotlight so it can keep track of all your files for a search feature people like me never use, and I don't think HFS+ performs that well to begin with. Not to mention the hardware is a weak compared to equivalently priced PCs.
Even so, I still find that everything's more than fast and responsive enough for me, and you'll always be able to find someone who'll pay a good price for your 1-year old Macbook Pro, making upgrading to the latest model that much cheaper.
You'll probably never experience military life, and probably neither will she. Does that make your life any less of an experience? No.
Finishing a degree online may not have given her the college experience you had, but that doesn't make the experiences that she did have any less meaningful or fulfilling, especially for a young teenage girl.