HNHacker News
TopNewBestAskShowJobs

joshuafcole

96 karma · joined January 31, 2011

submissionscomments
joshuafcole··on Against Essential and Accidental Complexity
I think the lines between "available library of existing code", language, and IDE are much murkier than they might appear. If one programmer is given raw assembly and the other Python, you're probably going to see at _least_ a 10x productivity bump to the python user _even if they use no additional libraries_. Language and IDE choices impact the vocabulary available to express solutions in the same way.
joshuafcole··on Against the Current: What We Learned from Eve
I won't speak for the rest of the team, but walking away from Eve is unquestionably the hardest thing I have ever had to do. We were given a once in a lifetime chance to reinvent the way we build software, with the only constraints being our imagination and the clock imposed by our runway. I think by the end we were tantalizingly close to success too. Many of the tools we made were significantly more productive for certain domains of work. Unfortunately, close doesn't cut it in a startup, and despite many, many sleepless nights pushing we weren't able to tie a single cohesive product together that was both better enough and general enough.

You might argue that we should have settled on one of our iterations that was close rather than continuing the search for something better. I can't really disagree with that except to say that each of the latest prototypes was such a large improvement over the last that it felt irresponsible to stop short.

Unfortunately, we've had to find work that would keep a roof over our heads, but that doesn't mean we've buried the work we've done. We've open sourced Light Table and every iteration of Eve that was remotely useful, and we've worked hard to share the most important things we learned on the journey with those who might continue it through essays, speaking, and thorough commenting in the most interesting sections of our code. Nothing would make me happier than having someone take inspiration from our attempt and build the future of programming before I have the financial freedom to return to working on it.

Like everyone at Kodowa, I just want to live in the world where those tools exist. I am sad that we weren't able to complete them in the short time that we had, but I am not sad that we tried.

joshuafcole··on The problem with programming and how to fix it
https://en.wikipedia.org/wiki/List_of_countries_by_literacy_...

Literature is accessible and as a society we value the importance of ensuring that everybody has access to the power it provides. You can either believe that programming is for the elite /or/ that it is like literature.

joshuafcole··on Show HN: A SIMD-accelerated noise library in Rust
Another interesting usecase is generating seamlessly tiling noise [1]. Admittedly this is usually done in advance where slower performance is fine, but fully or mostly procedural games could really benefit from it. Combining this with prime number-sized layered textures [2] gets you a very organic looking texture with only an upfront rendering cost, making it plausible to generate high resolution unique textures for everything in a game on the fly.

[1] https://gamedev.stackexchange.com/a/23639 [2] https://news.ycombinator.com/item?id=2419347

joshuafcole··on A Visual History of Eve: 2014 - 2018
Ah, thanks for the tip. Fixed now.
joshuafcole··on A Visual History of Eve: 2014 - 2018
I noticed I had a video of the "calculator" interface we designed to try and make mouse/touch-only interaction possible. I've made it public for anyone interested.

https://www.youtube.com/watch?v=BT8shMtBZsY

EDIT: Fixed the link

joshuafcole··on A Visual History of Eve: 2014 - 2018
Actually, several of those editors were explorations of what programming would look like using just the mouse. The mouse isn't really the issue with programming performance, per se -- instead the problem is the constant context switching back and forth.

Several version focused on just the keyboard, but we found that most of the things we built using Eve were inherently visual, and as such needed to be tested and interacted with using the mouse. Since we can't eliminate that context shift, we tried doubling down on it.

As a die hard Emacs user, I was shocked by just how competitive the mouse could be in the smalltalk-esque environment we built.

joshuafcole··on Eve: Programming designed for humans
Solid questions!

1. We could be more clear about this, but expanding to suit the needs of non-programmers is still very much in the cards. It falls under the umbrella of milestone 3 [1].

2. We're very interested in improving the process of generating UI. To start with, that will mean expanding our library of views (essentially Eve's version of web components) to cover a wider range of common use cases. Beyond that though, HTML is pretty crufty with layers upon layers of of additions and legacy support, it would be very interesting to explore alternative markup models.

3. It certainly is very important. Our model for interacting with the external world is pretty simple. For the most part You can use our first party modules (like `@http` for web requests) to pull the requisite data into Eve where you can transform it into whatever shape is appropriate. For cases where you need entirely new transport systems (like connecting Eve to USB devices), you can create a new module just like the first party ones and side load it in. Since the runtime is currently written in Typescript, that's the language of choice for these extensions. We may support others in the future.

4. For users unfamiliar with HTML and CSS, the best we can do is insulate them from it, as in #2. If it's a subject that personally interests you, I'd love to strike up a conversation on the mailing list about how we can improve the markup process [2].

[1] http://programming.witheve.com/#justataste [2] https://groups.google.com/forum/#!forum/eve-talk

joshuafcole··on Eve: Programming designed for humans
The application renderer and editor are wholly separate, though for this release we don't yet provide an end-user way to access the former separately. With respect to distribution (in the rolling out to users sense), we plan to start working on that story over the next few months. To get there, we need to finalize our policy system (which lets you secure your program against malicious users), improve performance, and get the basis of our horizontal scaling story in place. If you're interested, keep an eye out for posts about the world scale computer milestone on our blog!
joshuafcole··on Eve: Programming designed for humans
Heh, as another commenter said below, "i see the first problem is that you're generating HTML". The nice thing is, that is in no way intrinsic to Eve. The @browser DB is a regular DB like any other that we happen to sync to the client, and the client has a bit of code (which users will be able to extend in the future with other functionality) that takes HTML-shaped records and turns them into actual DOM on the screen.

Since we are targeting programmers first right now, it seemed better to focus on other aspects of the editing experience than to try and re-invent document markup to start with. That said, we're not opposed to exploring that possibility down the road. If you have any thoughts on the subject I'd love to strike up a conversation on the mailing list [1].

[1] https://groups.google.com/forum/#!forum/eve-talk

joshuafcole··on Eve: Programming designed for humans
It certainly isn't off-topic. There's a lot of UX work to do now that we've gotten a solid foundation out of the way. Finding a good way to pack a solid Eve editing experience into smaller screens is high on that list.
joshuafcole··on Eve: Programming designed for humans
Hey Taneq, The fear of over-simplification is totally reasonable. Programs like Game Maker certainly gain their shallow learning curves at the expense of overall power, precision, and depth. We don’t think that tradeoff is acceptable either. Luckily, there is a difference between architectural simplicity and “kid-friendliness”. That’s a big part of why we had to start from scratch and build a new language -- we needed something that was simple from its core if we wanted to make it simple to use without losing expressibility. Rather than rehash the specifics of our architectural decisions (though I encourage you to check out the blog and the upcoming deep dives if you’re interested!) let me describe briefly some problems I don’t have to deal with anymore when I use Eve.

- Asynchrony is pain-free (no imposed cost, no alternative syntaxes, no callback hell).

- Programs are live by default -- there’s no need manually listen for changes all over the place, and no falling out of sync.

- Programs are easily extensible -- because of the above, anything that conforms to the pattern for a block will get picked up by that block.

- Mocks, shims, and other injection patterns are free -- making testing and experimenting very easy.

- Refactoring is trivial -- If a block changes, I only ever need to change its immediate downstream users to get back to a working state. Eve can find those for me.

- Everything is data, so state sharing is trivial. When a coworker finds a bug in my code they can save their exact state and send it to me with a single command.

- The number of classes of bug are drastically reduced. This doesn’t mean they aren’t occasionally perplexing, but because there are so few ways for a program to fail, I can literally run through a checklist of possibilities while debugging. This is the premise that powers the inspector.

This certainly isn’t a complete list, but it’s a few of my favorite quality of life improvements that I think sets this project apart. If you do get the chance to use it, I’d love to hear your thoughts on what works and what doesn’t for you.

joshuafcole··on Eve: My Concerns
Graphics and game programming is a big interest of mine at a hobbyist level, so I definitely feel your pain. It's difficult to excel at all things, and in general each design decision brings with it a set of trade-offs. There are really two aspects to this question that merit addressing separately.

The first is whether a bloom-like language such as Eve is semantically well-suited for game design [1]. Unfortunately, there's not a lot of precedent here yet (it feels like there hasn't been a lot of overlap in interest in game design, datalog, and free time yet). Having used various datalog implementations over the past year though, and I'm convinced that it lends itself very naturally to building a Component Entity System style game engine. datalog's twin benefits of provenance-based debuggability [2] and strong decoupling [3] really help in building and maintaining advanced logic systems. I'm concerned it will have a bit of a learning curve, since we are as a rule not very used to thinking about systems programming this way, but it's certainly felt more intuitive than any other technique I've used in the past once I picked up the mindset for it.

The second is whether a language that lives in a persistent (potentially remote) relational DB is fast enough to run a game in. This is the bigger question for me. We've been doing a lot of research in this field and I'm convinced that for Eve's specific needs we can architect a much faster DB than the general purpose alternatives [4]. That said, even with all of the clever tricks in the book, there's still going to be some amount of overhead compared to working in purpose-built data structures with raw assembly. In cases where we're just not fast enough (either because the optimizations and query planning aren't all there yet or because we've come up against a fundamental design bottleneck) we do have an escape hatch. Through a system called watchers (which enable Eve to I/O with the outside world), it's possible to wire in compute programs written in other languages to do the heavy lifting with a very low latency. The watcher system is probably best conceptualized as a very simple FFI. I think we can get Eve to the point where it handles typical 2D games with aplomb, and for the rest I plan to put a lot of love into the watcher interface with the hopes that it will be fast enough to keep the game logic in Eve and just delegate physics and potentially rendering work to external components.

Anyway, this is still a fair ways off, we're beginning with an MVP and iterating from there. Game development is certainly on my radar though, and I look forward to publishing news about it when Eve is ready to do so. :)

[1] In the current experimental version of Eve, the only exposed query language is our high level search language, which makes very expressive searches like `dishes with eggs and sugar that are savory` trivial, but someone limits the power and scope of a single query. This is built on (and indeed compiles to) a Turing complete sub-language that will look much more familiar to datalog users. We tentatively intend to expose this in the near future.

[2] Given that the underlying graph structure of the program is stored relationally as data (exactly like user data) in Eve, it's very simple to see which sources a view depends on or feeds into, and even to ask complex questions like "when did this value become 10?".

[3] One of my favorite benefits of Eve is that it strongly encourages data composition over functional composition. In effect, If I have a view `active users` over the list of all users `users` and a set of other views dependent on that, they depend only on the data `active users` produces, and not it's implementation whatsoever. `active users` could be replaced in any way that still provides data isomorphically without any of its dependents being aware of the change. Further, even if the data changes non-isomorphically, only it's direct dependents will need to change, rather than having to propagate these changes all the way to the leaves of the system.

[4] To be clear, I don't claim that ours would hold a candle against the 20+ years of experience that GP DBs bring to the table across their whole domain of use cases, just over the small handful that we require.

joshuafcole··on Eve: My Concerns
Eve is served as remotely as a webapp, and it'll run in all modern browsers. Presently it's supporting Chrome first; but support for FF, IE Edge and others is on the map. Along the way, we're looking forward to gathering feedback on how we can improve user experience across the board, so please drop us a few issues on how we can make things better if you get the chance to try it out.
joshuafcole··on Eve Version 0
Yep, I've had some good experiences with the old StarCraft editor. It had a surprisingly good first user experience because it was immediately useful (terrain editing was very intuitive, and stock games could be played on custom maps) and had a gentle learning curve (new game features could be added in progressively to the base game).

One of our past examples worked on a similar principle to the SC trigger system [1] but we unfortunately found that it didn't scale as well to larger systems. While it was very easy to write in, it was hard for a stranger to read and intuit the implied data flow. We've had a lot of fun experimenting with different query editors, and I hope to find the time soon to do a more in depth write up on our research.

[1] https://camo.githubusercontent.com/f24714bf6429fa21ca91e4987...

joshuafcole··on Arcadia: Unity 3D Development in Clojure
Yep, though it's not as easy as it could be yet. The best way currently is to write your own command leveraging our spawning APIs (a thin wrapper around node's child_process module with some extra cljs sugar).
joshuafcole··on Nexus 6
To give a counterpoint, I have been unhappy with each successive size increase of my phone for the reasons listed. I'm sure there are people who are happier with a larger device, but I don't think the issue is so cut and dried.
joshuafcole··on Light Table is now open source
You could certainly set up a bridge over sockets or ajax, but I think the true beauty of LT is that you can actually embed an extant web-based terminal directly into LT's dom and interact with its native events. LT runs in node-webkit, which is essentially chromium. The only barrier to entry I can think of is that it might be difficult to set up the terminal emulator to interact with the local FS, but its definitely a solvable problem. My current plugins both interact directly with the DOM and the local FS for various purposes using node and jQuery. The jQuery is honestly unnecessary thanks to only needing to support webkit, but it was a simple expedient and its luxurious not worrying about byte count since everything is running off the local machine.
joshuafcole··on Light Table is now open source
Not at the moment, but it sounds like an excellent project. At the moment my plate is a bit full with:

1. A SASS-based theme framework for LT that modularizes all of the widgets and plugins into partials. It's pretty difficult to just dive into the existing CSS and figure out what to change to achieve a particular effect. You're basically required to poke around in the dev inspector.

2. A proper C++ language mode via clang.

Once those are up in several weeks if nobody else has tackled an org-mode implementation I'll probably investigate it. If you have any free time and a desire to learn or use clojure I'd definitely recommend giving it a shot though. The community would definitely appreciate it.

joshuafcole··on Light Table is now open source
I've been working with LT for a bit over a month now by picking at it through the dev inspector and grepping over the compiled cljs source. I've used that to build two plugins in JS [1][2] to help LT meet my needs as a day to day editor. The biggest takeaway I had is that an editor built on the DOM is a _very_ natural experience to work with. I come from a heavily emacs background and was always fond of its extensibility, but I found it fairly imposing to try and create or update nontrivial UI functionality. The usage of HTML and CSS greatly streamlines that process and makes it feel much more accessible.

Perhaps more importantly, not trying to restrict plugins to using a particular API has opened LT to integration with the tons of projects already built for the web -- from terminal emulators to emmet.io, integration is very nearly as simple as including the project's source and embedding it's root element into a tab. There's a lot of low hanging fruit at this stage in the game, so I look forward to seeing rapid plugin development in the coming weeks.

[1] Claire - Fuzzy File Finder inspired by ido-mode in emacs (https://github.com/joshuafcole/claire).

[2] Recall - Workspace Persistence Plugin to keep your tabs and tabsets loaded between sessions (https://github.com/joshuafcole/recall).

joshuafcole··on Light Table is now open source
If you'd prefer not to deal with workspaces, you can try the claire plugin [1], which is inspired by emacs ido-mode. It performs iterative fuzzy search over the entire FS.

(Disclaimer: I'm the author of claire)

[1] https://github.com/joshuafcole/claire

joshuafcole··on Light Table is now open source
Definitely a possibility -- LT is very flexible. Even if you choose to more or less ignore the plugin interface, you can interact directly with the DOM. I imagine the path of least resistance for a terminal plugin is just to open a new named tab via the API and then inject an existing HTML terminal emulator into it with access to the local machine.
joshuafcole··on Unicorns at GitHub
This does sound very useful. I'd strongly consider open sourcing it. The failure has caught me right in the middle of switching gears from one project to another, and I'm basically twiddling my thumbs in the company IRC waiting for it to come back up so I can pull down the requirements.
joshuafcole··on Stellar - PyGame/Python Game Engine
Just saw your comment, turns out just the setup.py is. Try installying pyscintilla2 and then running it directly with python Stellar.pyw.
joshuafcole··on Stellar - PyGame/Python Game Engine
Just to clarify a few points about it from poking around:

1. It is _not_ windows only, but the setup.py _is_. Ensure you have the requirements listed along with pyscintilla2 and then execute Stellar.pyw directly (python Stellar.pyw).

2. Very little is currently functional. This appears to mostly be a QT GUI inspired by Gamemaker. Certain aspects of the UI are also currently nonfunctional (e.g. right click menus on folders).

2a. There appear to be some small issues with windowing (e.g. opening a sub-window fullscreen (in this case a sprite) and then opening a new window (in this case an object) leads to the new subwindow being minimized by default.

So, I didn't spend a lot of time reading the code (just enough to get it running actually), but this is definitely more of a call for assistance than a call for beta testers. When finals have wound down I'd like to spend more time with the code and see if this would be a good project for my Christmas pull requests.

As some of the other commenters have mentioned, Game Maker was a great product, but it certainly showing its age. I'd love to see something that improves on what we've learned from Game Maker to help train the next generation.

joshuafcole··on Offer HN: Tell me what you need, and I'll program it (for free)
This seems pretty interesting. There are options that provide this functionality as a bonus (e.g. LucidChart), but its definitely secondary and to use it meaningfully often costs some sort of membership fee. A nice simple free solution for this might be popular with designers.
joshuafcole··on Parallella: A Supercomputer For Everyone is Dying
I did my part. I'm very much the archetypal broke college student at the moment, but I won't always be. I have big plans in the Artificial Intelligence and Machine Learning sectors, and I can't imagine a better, cheaper solution to get started on working with multi-agent systems.

I desperately want to see this sort of pricing for cluster computing available in the future, when I have the scratch and knowledge necessary to make these ideas into products.

I think that future is worth skipping the occasional movie or meal to pay into, and I'm looking forward to my somewhat unexpected end of year gift.

joshuafcole··on Re XKCD 936: test the safety of your passphrase entirely in your browser
Can we all please read at least a reasonable portion of the comments before repeating some form of "its insecure because its in the browser!"? Upvote one of the existing comments if you think that's important to talk about here. Yes, there are potential issues with that, and yes it would be wise to instead download the code, peruse it, and then run it locally if satisfied with its security. Now that that's over with, can we talk about some of the interesting aspects of the post?

Have others tried programming a project in one language and transcribing it to another? I work with a fair number of languages, and I find myself falling into a distinctive mindset with each one. Several of the nice idioms I use in one language don't seem like they'd translate well to another. Beyond being an interesting exercise in the mindset behind both languages, are there any benefits to this? It seems like you'd have to cut features you might normally use in the source language until you've reached a union with features from the destination language. It seems like that'd be a pretty tough transition going from a typed and functional language like Haskell to JS.

joshuafcole··on SassMe: Visualize SASS color functions in real-time without compiling
I use them pretty frequently. In combination with variables for colors, they can be pretty useful, since you can make sweeping changes to the appearance of a site by changing a single line of code.

I usually use three color variables ($background, $foreground, $highlight) every time I start a website and expand sparingly from there. If I wanted my headers to have an indented appearance, I can use a text shadow 1px above the text with `darken($background, 10%)` to choose an appropriate color for the imprint without having to manually keep them in sync. Similarly, if I'm ever working with gradients, say on an alert bar that spans the top of the screen, I can simply use `linear-gradient(top, lighten($highlight, 5%), darken($highlight, 5%))`.

If you'd like an example of a website built this way, we completed enyojs.com in about two weeks thanks entirely to SASS and in part to color variables and functions.

As ever, your mileage may vary and what works wonders for me may not fit your style of design.

joshuafcole··on Video: Open WebOS on Ubuntu 12.04
I do not speak officially from within H/Palm, but during my time as an intern there this summer, we rebuilt the Enyo website and used Lato as our typeface. This is subject to change, but I feel its a great fit if we cannot move forward with Prelude.

http://enyojs.com/ - Check out index.css, line 671. I apologize for the lengthy CSS, we used SASS (which I strongly recommend) and the original plan was to minify the CSS and keep the sass files available publicly, but it seems this has changed since my internship ended.

Page 1 of 2Next →