I understand the underlying architecture is fundamentally different, but the end result seems kind of akin to some of the "complex event processing" (CEP) tools out there like Esper (ie. feeding incoming data into established queries instead of executing queries against at-rest data). Would this fit similar sorts of use cases / fit into the CEP market?
Yes KSQL is ideal for use cases similar to those that CEP was initially targeted for and more - from real-time anomaly detection, monitoring, analytics to application development and Streaming ETL. As you alluded to, the big difference is that KSQL is designed as a distributed Streaming SQL engine that can run at Kafka scale.
"This is fairly straightforward; professional software developers of all levels usually have some experience building and scaling stateless APIs."
I would question this, in fact suggest the complete opposite. Given that they say they're a team of Scala developers, I think there is definitely some selection bias going on -- in some subset of the wider population of developers that might be the case, but certainly not globally.
Counterpoint creates sustainable competitive advantage for our clients through business and workforce automation solutions. We create software which lets machines deal with administrivia while enabling people to focus on the parts of their work that matter most.
We are looking to hire new software developers and consultants who are passionate about technology, who relish the opportunity to work in a dynamic, small company culture and who have a strong entrepreneurial spirit.
-- Associate Consultant -- Experience Level: 0-3 yrs
JOB RESPONSIBILITIES: Work directly with our customers to translate business needs into technical solutions Analyze business problems Work independently or cooperatively within software development teams
REQUIREMENTS:
* Demonstrated record of excellence inside and outside of the classroom
* Software development experience or interest in pursuing a career in technology
-- (Senior) Consultant -- Experience Level: 3-6 yrs
NON-TECHNICAL JOB RESPONSIBILITIES:
* Work directly with our customers to translate business needs into technical solutions
* Analyze business problems
* Work independently or cooperatively within software development teams
TECHNICAL EXPERIENCE REQUIREMENTS:
* Java, Java Web Frameworks and / or .NET professional development experience
* Web Development Technologies and Libraries (HTML, JS, CSS, jQuery)
* Relational Databases & SQL
* BPM development experience (esp. Appian, Cordys, Metastorm, Activiti)
This does look cool, and definitely illustrates the awesomeness of using redux / immutable state store. What is the pricing of the service like, though? I'd prefer to see that without having to register...
Except for the landing and reusing part, no? (Yes, they recaptured and reused the Shuttle's SRBs, but it's a different scale and the economics are very different.)
In quoting the article you conveniently leave out that Personal View dates back to 1991 and, technically, had it's foundation in the years prior to that because of just how frustrating it was to use APL during that awkward time in computing.
I am not sure if you know APL, ever used it and for how long. I go way back. I was in the thick of it as the IBM PC came out and various APL packages tried to make the transition. I started using APL on time shared mainframes over Honeywell and DEC teletypes and Tektronix storage CRT terminals, that's how far I go.
It was down-right frustrating. On the PC, APL interpreters had to ship with a character ROM for the monitor card just so you could see the characters on the screen. In the process you'd lose about half of the ASCII table to APL. If you wanted to print APL characters you had to buy specific printers, like the IBM Selectric and install a special APL ball with APL characters. A few got clever and installed a physical toggle switch on the computer to switch between APL and ASCII character sets.
Yeah, you had to crack open your computer and change a chip just to be able to see APL chracters!
I wrote and presented a paper at an APL conference in the early 80's. Back then you had to submit the paper in print for reproduction. I had to write my own APL paper printer program to drive an IBM Selectric such that it would pause and allow me to change the printer's character ball to print code sections in the paper.
You really truly had to want to do APL in order to be willing to endure this kind of pain. The lucky ones had Tektronix storage CRT terminals or IBM terminals with built-in APL characters.
Eventually dot matrix technology made things easier. Yet, we were still crippled by the limitations of ASCII and having to live this dual life of needing APL characters to program and regular characters for the "user space" application.
That being the context, Ken Iverson buckled to the pressure and transliterated APL to ASCII characters, something that would result in J. This, of course, was extremely short-sighted and went exactly counter to the power he found on notation as a tool for thought.
A man who devoted no less than twenty years to developing the beautiful and powerful concept of a notation for describing digital systems and programming, simply made the wrong call just as technology was about to make the use of such notation simple and universally accessible to all.
J is not APL. Far from it. The power is in the notation. J throws that away. It's a shame.
In Emacs, what you nowadays call "cutting and pasting" is instead called "killing and yanking". It was called that way even before "cut" and "paste" got popularized, I think.
And the "Kill Ring" name makes sense, as it a) contains snippets of text you killed and b) when yanking (pasting) lets you cycle through all the killed snippets. You can view your kill ring in its entirety via a menu or with a plugin (kill-ring-browser or similar, I forget).
Emacs is old and brittle, but its basic editing model is very good. It does lack (without plugins) some features I learned in Vim (the most irritating thing at the beginning was a lack of "textobjects"; I still occasionally miss them, despite expand-region and other plugins), but is basically the only editor that I feel is worth learning.
>>In Emacs, what you nowadays call "cutting and pasting" is instead called "killing and yanking". It was called that way even before "cut" and "paste" got popularized, I think
Cut and paste refer to literal scissors/knives and glue/paste it predates the Gutenberg press.
One of the crazy aspects of Unix text editors is that "yank" means nearly the opposite in vi (where it stands for copying) as it means in emacs (where it stands for pasting).
Yes, I know that. It was a joke that used the specific example of Emacs to illustrate a point about how tone-deaf Unix developers can be about UI issues.
> In Emacs, what you nowadays call "cutting and pasting" is instead called "killing and yanking". It was called that way even before "cut" and "paste" got popularized, I think.
Sure, but it's been pretty much universally referred to as "cutting and pasting" everywhere for what, two decades now? The Emacs terminology is a wart, a relic of a bygone age. There's no reason to continue using it, except inertia.
> And the "Kill Ring" name makes sense, as it a) contains snippets of text you killed
This only makes sense if you accept that there is a reason to continue referring to that interaction as "killing" rather than "cutting", which (as is probably clear from the above) I do not. The world has settled on a set of terms to describe these interactions, persisting in using ancient ones just because they're what have always been used just makes Emacs harder to learn that it should be.
(Which may of course be the whole point; surrounding common interactions with unusual terminology is a good way for people who already know Emacs to state to outsiders that they are keepers of arcane knowledge beyond the common ken of man. But social signaling is a shabby motivation for user interface decisions.)
Inertia has a way of preserving value in a way that's easily overlooked. Consider the "save" icon - still commonly represented as a floppy disk even though there's an entire generation in the workforce that grew up without ever touching one.
It would almost cost more to change it (just in lost productivity) to be "correct" than it would be to just keep the association. I think the same is true for the editors.. changing the terminology would also mean changing a lot of mnemonics. Vim uses D and Y for kill (delete) and yank. C is already bound to another function, and there's an ambiguity there between "C"ut and "C"opy. (P is "P"aste, as you'd expect)
Just because you're unaware of the reasons for the design is not good enough reason to dismiss the UI design as "social signaling" and tar the whole of the userbase with that kind of accusation. It seems you have an axe to grind against those SmugEmacs(Lisp)Weenies[1] :)
> changing the terminology would also mean changing a lot of mnemonics. Vim uses D and Y for kill (delete) and yank. C is already bound to another function, and there's an ambiguity there between "C"ut and "C"opy. (P is "P"aste, as you'd expect)
You corrected the Vim key (D instead of K), but now it doesn’t support the conclusion. Cut, copy, and paste are already typically bound to Ctrl+X, Ctrl+C, and Ctrl+V, which people seem to use fine without mnemonics. Does anyone actually think “hmm, which key is it to yank text in Vim? Ah, right, y for yank”? (Well, probably, but I imagine they’re the minority.)
> Cut, copy, and paste are already typically bound to Ctrl+X, Ctrl+C, and Ctrl+V, which people seem to use fine without mnemonics.
I think it's like this: for the most often used functions it's more important to make keybindings convenient to press (your keyboard and the shape and size of your hands matter here!) than memorable/backed with mnemonics. The idea here is that you're going to be using them all the time, so you'll remember them anyway, no matter how "unintuitive" they seem. Functions used less often, on the other hand, should be bound to something that is guessable and/or easy to remember.
A side effect of this is that, once you set everything that way, you're going to be bound to a particular (physical) keyboard model. I accept this lock-in, because I spend half my life typing on a keyboard and I'm picky when buying keyboards anyway.
A couple examples: screen uses C-a while tmux uses C-b as a prefix key. The first thing I did after switching to tmux was to remap the prefix key back to C-a (with C-a C-a standing for normal (readline) C-a), not because I was that used to C-a, but because (again, on my keyboard) pressing C-a is easier done with one hand.
In StumpWM C-t is used as a prefix by default. I immediately remapped it to C-z (with C-z C-z representing normal C-z) for the same reason.
In Emacs, one of the first customizations I did was to pack all window-related commands under C-w prefix ('w' like in 'w'indows...). C-w C-s now means 'w'indow 's'plit, C-w C-v 'w'indow split 'v'ertically and so on. Here the chords are both easier to type than the original bindings and easier to remember.
As programmers we spend 1/3 of our lives (at least, I think) working on a computer, and significant chunk of that time working inside an editor. It makes no sense not to customize the tools we use to the point where they are optimal for our particular "setup" (in quotes, because again, I also mean size and shape of your hands, your habits from earlier work, your keyboard and your desk).
I also use the Colemak keyboard layout, so i made two versions of the mapping, one for QWERTY, one for Colemak. Which highlights the importance of text editors (and IDEs) needing to have completely configurable keybindings.
Vim uses y and p to yank (cut) and put (paste), not K and Y. Of course, there are other ways to yank (Y, d, D, …). Ultimately, at least the y goes pack to the ex command y.
..Now why the heck did I think cutting was on K. D'oh!
Still, I think it's a conscious design decision, something along the lines of "why not just store deleted text, rather than having a separate clipboard-like feature".
Yep, and vi even gives you multiple registers in which to store yanked or deleted text. In vim, you get [a-zA-Z0-9\-"] all as registers! Just type "x where x comes from that character class, to use a non-default register (the default register is ", so if you want to explicitly use the default register when deleting a line, you could do: ""dd ).
I know ocaml has a lot of proponents in industry (jane street probably the most vocal, but I've seen it many other places, as well). Most of the SML/MLTon references I come across seem to be in an academic and research context. Is anyone out there using it for "real world" application development? What sorts of niches would it serve well?
I once prototyped an acoustic ray-tracer in MLTon, and it was a pleasure to work in.
I have no idea how close I could have gotten to C/C++ -level performance, but I found debugging the prototype to go way faster in MLTon than it likely would have gone in C/C++.