Based in Boston.
About me: https://www.linkedin.com/in/amitbansil/
YC W'12 Founder.
Email: amit+yc@bansil.org
- 155 points
- SEEKING FREELANCER | Remote | Boston | Javascript Programmer
I'm a web developer looking for some help with a CRUD project.
Nice to Have: Typescript, Postgres, GraphQL, React
Need to be available for 3-5 hrs of meetings/week some time inside 9-5 US ET.
Email amit@thinkcello.com
More about me: https://www.linkedin.com/in/amitbansil/
- I'm not a Tesla owner, so I have no idea what the context for this UI is, but toggles are hard. I think a good rule is always follow the platform convention and if there isn't one be consistent.
NNGroup just did a post on toggles that is nice: https://www.nngroup.com/articles/state-switch-buttons/
I'd say even NNGroup doesn't really get it right, however. Raskin, The Humane Interface, p39 is a much better discussion.
- SEEKING FREELANCER | Boston, MA | Remote or Local
I'm looking for 1 or 2 people to do some quick subcontract work on a CRUD app. Tasks:
- Creating a script to sync an Airtable.com base to a SQL database. Distributed systems experience appreciated. You are welcome to open source this.
- Simple front-end Django spec work. Basically, given wireframes and already implemented models create views/templates for minimally interactive forms and pages.
Immediate availability greatly preferred (sorry). Email amit+hi@bansil.org
- SEEKING FREELANCER. Boston. Local Only.
I'm a software consultant looking for some help on some of my projects.
One role is for a python data engineer to un-mangle megabyte to gigabyte sized tables. The other is for a JS/React developer.
The ideal candidate will be available 10-20hrs/week with 1-2 for an in-person meeting.
I value resourcefulness, discipline, and empathy over buzz words, brain teasers, and brilliance.
- I taught myself to program. Badly. I spend my time doing grunt work. I used to think computer science research was the domain of theorists celebrating toy problems, but, if you look at the 8 queens solution at the bottom of the article, it is difficult to deny that the best of CS is anything less than “a bicycle for the mind.”
- 2 points
- Names are hard. Maybe "Google Bundle"?
- Yeah, managing memory with malloc and free directly was a nightmare. Back when I worked with Java, however, GC still suffered from unpredictable performance as well as a requirement to have much larger heaps. Are these now mostly solved problems? If not, what do you think of something like this (syntax aside):
http://en.wikipedia.org/wiki/Smart_pointer#C.2B.2B_smart_poi...
My personal experience with similar such systems was that even when performance was not a concern the cost of having to untangle and document my reference structure was well worth the time.
Has any language ever gotten the balance of tradeoffs for finalizers right for strong GC?
- Fantastic examples! I would also add möbius strips, toroidal spaces, and of course, the venerated circle. Sorry, my thoughts above are poorly worded. Perhaps what I am trying to say is that cycles should be created with intentionality, instead of willy nilly spilled throughout your code base. My complaint is really with all the mad spills of Java that I created when I thought that GC was some magic wand that freed me from having to consider the structure of the memory I was manipulating.
Someone should go around sabotaging regular expression parsers and replacing them with PEGs:
http://en.wikipedia.org/wiki/Parsing_expression_grammar
It is a crime against honest words to try to cram so much logic into so few characters.
I once was told that regular expressions were originally designed for creating AIs. The image I have in my mind is that of graduate students in a dungeon somewhere banging on type writers creating some sort of God box.
- I cannot imagine creating any sort of complex system that does not, at some conceptual level, contain cycles. What I am suggesting is that the author of a complex system should, whenever possible, untangle as many of these cycles as possible by differentiating between the different classes of references. Think of it like the difference between your directory tree and your symbolic links in unix.
Reg. your example, I have generally found it effective to model UI hierarchies where the top level components refer to their children 'strongly' while the children refer 'weakly' to their parents. I am not familiar with the recent smart pointer stuff in c++ but I believe that these concepts have been cleanly modeled with abstractions such as this:
http://en.cppreference.com/w/cpp/memory/weak_ptr
N.B. A more difficult conundrum that I have encountered when dealing with UI hierarchies is whether or not child components should require a constant reference to their parent passed upon creation or you should be able to 'reparent' or even be in an initial parentless case. My current thinking is that this is a mistake and interactions such as drag and drop are better handled by sending a gesture up to your data layer which then regenerates the component in its new place. This might get ugly, however, if you have a heavily direct manipulation based UI which doesn't really need a data layer on top.
By the way, what has lead you down the road of UI toolkits? They are a fetish of mine. Feel free to shoot me an email if you'd like to connect.
- That is wonderfully clear. I haven't touched much Java post nio but could the app just use something like java.nio.ByteBuffer to model the raw memory at the bottom of the graph, then have EarlyStageFrames muck with those using static native methods that take the ByteBuffers where needed and then LaterStageFrames playing with the EarlyStageFrames and reaching inside them to get at their ByteBuffers when absolutely needed for performance?
> It's probably best modeled as an acyclic directed graph
My pet theory is that a good representation for most systems should maybe always be an acyclic directed graph?
- I've done a fair bit of work interfacing memory managed languages like Java & Python with "unsafe" native code and found that this problem actually crops up often.
The first issue is that finalizers should NEVER be relied upon to clean up system resources the way that you might in a language with deterministic garbage collection like C++. Instead, expect clients of interfaces that use system resources to manually call some 'close' like method. Use finalizers to warn clients that they are leaking. Josh Bloch has an excellent writeup on this[†]:
http://www.informit.com/articles/article.aspx?p=1216151&seqN...
The second thing, as I believe @btown is saying, is that the child object seems to depend on memory that it doesn't own a strong reference to. I bet the whole memory graph here is just a tangled mess. I used to think that that was just the nature of graphs. When I first started working with GC that couldn't handle these kind of cyclical structures without being explicitly told I thought that it was an absurd premature optimization. Then, this wise old hacker peered at my code, smacked me on the back of the head, and grumbled that if I couldn't clearly explain the reference hierarchy it wasn't just the software that would be befuddled, it was too complicated for his old brain as well.
I'm sure that this can't be true, but I am starting to suspect that all the tremendous work that has gone into fast pause-less concurrent GC has been for naught. I wish that when GC encountered a cycle it would just tell the programmer that they now have a leak, maybe even suggest where it could be fixed with one of those neat little IDE quick fixes, and continue chugging along.
tl;dr When you have a hard problem let someone else deal with it.
[†] Granted, Bloch does make an exception for 'native peers'. My understanding of that pattern, however, is that the key is not letting some other object walk off with a reference to your peer, which is exactly what has gone wrong here.
(Aside: Josh Bloch's Effective Java & Java Puzzlers are fantastic. They are worth reading for programmers who use any language.)
I'm looking for javascript developers to join a small team building a product recommendation engine for a fortune 500.
Stack: React / Typescript / Node / Postgres
Intellectual curiosity, discipline, & eloquence appreciated.
Inquiries: amit@thinkcello.com Website: https://thinkcello.com