<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: cjh_</title><link>https://news.ycombinator.com/user?id=cjh_</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 12:14:37 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=cjh_" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by cjh_ in "Bitwarden – Open Source Password Manager"]]></title><description><![CDATA[
<p>The 'point' of solutions in this space is that they allow password access across devices. They use end-to-end encryption and support self hosting, what else could they do?</p>
]]></description><pubDate>Wed, 11 Jul 2018 05:35:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=17504670</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=17504670</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17504670</guid></item><item><title><![CDATA[New comment by cjh_ in "Bitwarden – Open Source Password Manager"]]></title><description><![CDATA[
<p>> Since all of your data is fully encrypted before it ever leaves your device, only you have access to it. Not even the team at Bitwarden can read your data, even if we wanted to. Your data is sealed with end-to-end AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256.<p>From the linked page (<a href="https://bitwarden.com/" rel="nofollow">https://bitwarden.com/</a>)</p>
]]></description><pubDate>Wed, 11 Jul 2018 05:32:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=17504660</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=17504660</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17504660</guid></item><item><title><![CDATA[New comment by cjh_ in "Apple sets up iPhones to relay location for 911 calls"]]></title><description><![CDATA[
<p>This sounds amazing.<p>I recently witnessed an intoxicated man collapse on the street in front of me, so I was first on scene and had to call our local version of 911 (I live in Australia).
Of course I am asked where I am, the address and street, and I had no idea.
I was at the bus stop I walk to everyday, surrounded by building with names I couldn't read very well at night, and no street signs near me.
I was eventually able to work it out, but that was precious moments we lost that could have made things significantly worse in a different case.<p>The man was passed out cold (he had hit his head very hard when he fell) and had a very weak pulse and weak breathing, I performed CPR until the ambulance arrived and he started to regain consciousness.
The ambulance took a very long time to arrive and then find us, I had to get other bystanders to stand out in the street to wave and shout.
When the ambulance left he was fully conscious and able to converse with the officers.<p>This whole thing of course seemed absurd, as we were all carrying smartphones equipped with HD cameras, GPS, and radios.<p>In another case, during the Christchurch earthquakes in New Zealand, I was lucky to be involved in a volunteer group which started offering free support services to those on the ground.
We ran a text information service where people could text in questions, including asking for the nearest help center based on their location (which they had to provide via text). We would likewise respond over text.
We were able to help people find the help they needed, by making it available over text we also were able to reduce the already overloaded cellular services (voice calls are much more expensive than text).
We helped dispatch appropriate emergency services to people in need, but it was still very much copying address information as text between various jury rigged systems (written by us during the incident).<p>I hope we can improve these systems in the coming years, it is especially important to improve them to be redundant to things such as cellular system overload (which is very common during major crisis).</p>
]]></description><pubDate>Tue, 19 Jun 2018 05:28:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=17344051</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=17344051</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17344051</guid></item><item><title><![CDATA[New comment by cjh_ in "My resume in an Operating system"]]></title><description><![CDATA[
<p>Very nice, although I want to point out that this page contains many typos - you probably want to run a spell and grammar checker over your blog posts and your resume as many employers may screen due to these.</p>
]]></description><pubDate>Tue, 06 Sep 2016 02:33:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=12433322</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=12433322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12433322</guid></item><item><title><![CDATA[New comment by cjh_ in "One year with Colemak"]]></title><description><![CDATA[
<p>I initially had rsi pains in my wrists and pinkies, after I recovered I switched to a Kinesis and was convinced it helped keep the rsi away for 2 years or so.<p>Recently the pain came back worse than ever, this time accompanied with quite serious thumb pains, I certainly do not blame the Kinesis as it is most surely a combination of many factors (poor habits, stress, workload, etc.), but the layout does increase the load on the thumbs so I think that contributed.<p>For now I have switched back to a cheap Microsoft dome keyboard as it is easier to type with using only my forefinger and middle finger (and easily allows me to avoid using thumbs and pinkies).<p>Of course this is all just my personal experience, for years the Kinesis was lovely and I may still go back to it, as always YMMV.</p>
]]></description><pubDate>Thu, 17 Jul 2014 22:33:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=8050627</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=8050627</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8050627</guid></item><item><title><![CDATA[New comment by cjh_ in "Join the Compiler Creation Club"]]></title><description><![CDATA[
<p>Thanks for those words and that link.<p>I like that way of thinking of it, I see it as just reusing the existing stack frame as a call in a tail call position doesn't need anything from the current stack (returning to this frame adds no extra meaning to it).<p>Having never implemented them though I feel like my ideas still need some fleshing out, my naive approach seems to be similar to the idea of trampolining.<p>Really looking forward to reading the linked document, very thorough and looks to be just what I was looking for (it even covers architecture dependent aspects!).</p>
]]></description><pubDate>Mon, 25 Nov 2013 21:12:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=6797055</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6797055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6797055</guid></item><item><title><![CDATA[New comment by cjh_ in "Join the Compiler Creation Club"]]></title><description><![CDATA[
<p>Thanks, that document looks very impressive and will now sit at the top of my reading list :)<p>Oddly following that link gives me a 404 ('The requested URL /~dyb/papers/3imp.pdfâ€Ž was not found on this server.', seems there is a trailing character '%E2%80%8E').<p>I was able to find it on google and open it, yielding the link <a href="http://www.cs.indiana.edu/~dyb/papers/3imp.pdf" rel="nofollow">http://www.cs.indiana.edu/~dyb/papers/3imp.pdf</a></p>
]]></description><pubDate>Mon, 25 Nov 2013 20:51:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=6796900</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6796900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6796900</guid></item><item><title><![CDATA[New comment by cjh_ in "Join the Compiler Creation Club"]]></title><description><![CDATA[
<p>I have been writing a scheme interpreter in c, and for me the most interesting aspect so far has been the level at which I am programming.<p>At the beginning it was very traditional c; symbol and AST manipulation were a PITA (at that point it was a malloc'd arrays of `expressions`).
After I had a base language working I started to use the language I had implemented so far to further the implementation, this finally peaked where this weekend I did a large refactor to remove most of my c arrays and instead replace them with scheme pairs and lists.<p>For example, here [1] I implement define function form in terms of lambda, specifically new_lambda(env, cons(args, cons(body, null))).<p>In hindsight this seems so obvious, but I have found the whole process extremely interesting, specifically looking at how the implemented languages starts to influence the implementation language.<p>I really cannot stress enough how enjoyable the process of writing my interpreter has been, I thoroughly recommend it to anyone who is interesting in programming languages.<p>[1] <a href="https://github.com/mkfifo/plot/commit/07272bd69e51979ab71fa08f6415978f46a3b4ee#diff-e2f93fafd9051a63d4bd310620ebd261R105" rel="nofollow">https://github.com/mkfifo/plot/commit/07272bd69e51979ab71fa0...</a></p>
]]></description><pubDate>Mon, 25 Nov 2013 20:20:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=6796665</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6796665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6796665</guid></item><item><title><![CDATA[New comment by cjh_ in "Join the Compiler Creation Club"]]></title><description><![CDATA[
<p>I have been working on a small r7rs scheme interperter [1] and it has been extremely educational. I had never used scheme previously but learning it from sicp [2] has been rather enlightening, it surprisingly lived up to expectations.<p>I haven't considered if I will go down the compiler route, but either way that resource looks very interesting; especially the coverage on tail call optimisation at the assembly level.<p>Does anyone have any further resources discussing tail call optimisation? I would like something a bit more in depth.<p>The other topic I would like to read more on is continuations, as a still newbie-schemer I find the idea of implementing them to be quite daunting.<p>[1] <a href="https://github.com/mkfifo/plot" rel="nofollow">https://github.com/mkfifo/plot</a>
[2] <a href="https://mitpress.mit.edu/sicp/" rel="nofollow">https://mitpress.mit.edu/sicp/</a></p>
]]></description><pubDate>Mon, 25 Nov 2013 20:09:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=6796591</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6796591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6796591</guid></item><item><title><![CDATA[New comment by cjh_ in "Introduction to the Python Interpreter, Part 1: Function Objects"]]></title><description><![CDATA[
<p>Part 2 has been posted <a href="http://akaptur.github.io/blog/2013/11/15/introduction-to-the-python-interpreter-2/" rel="nofollow">http://akaptur.github.io/blog/2013/11/15/introduction-to-the...</a><p>But I still feel like both part 1 and part 2 are far too short; even if read together they provide very little information to digest.</p>
]]></description><pubDate>Sat, 16 Nov 2013 19:52:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=6746190</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6746190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6746190</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>Locally in git you have the HEAD@{n} notation to step back n steps through the reflog, so after a bad rebase a `git reset --hard HEAD@{1}` should be all you need.</p>
]]></description><pubDate>Wed, 13 Nov 2013 21:01:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=6728479</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6728479</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6728479</guid></item><item><title><![CDATA[New comment by cjh_ in "Edward Snowden is Almost Broke"]]></title><description><![CDATA[
<p>I am not sure how easy it is to get money in/out to/of bitcoin from within Russia, at least in New Zealand it is generally a PITA and involves many hoops.</p>
]]></description><pubDate>Wed, 13 Nov 2013 06:30:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=6723726</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6723726</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6723726</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>It could have a simple 'are you sure y/n' prompt, and you could then have a git config setting to disable this.</p>
]]></description><pubDate>Tue, 12 Nov 2013 19:43:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=6720375</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6720375</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6720375</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>I was assuming after the fact as that information is not saved anywhere client side.<p>Also I am not sure what he did to push to 150 remotes, and in that case this output would be much more tedious to piece together (and that is assuming he was able to capture all of it).<p>However I disagree that force pushing is rare, I find it is a (sharp) tool I use most days (more often on private repos or branches).<p>I do like the idea of github providing some kind of web interface to view the reflog and reset branches to various points within it.</p>
]]></description><pubDate>Tue, 12 Nov 2013 05:44:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=6716088</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6716088</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6716088</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>After my first bad force push (silly git push default on an unfamiliar machine) I now 'enforce' the `git push remote from_branch:to_branch` syntax on myself when force pushing, I also have adopted the habit of always accompanying any --force with a --dry-run.</p>
]]></description><pubDate>Tue, 12 Nov 2013 02:05:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=6715410</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6715410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6715410</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>The central repository is the only point that <i>knows</i> (with 100% certainty) which ref the branch was set to before the force push.<p>Each distributed node only knows the ref the branch was pointing at the last time they fetched, so their certainty on what the branch looked like before the force push is much lower.</p>
]]></description><pubDate>Tue, 12 Nov 2013 01:58:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=6715378</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6715378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6715378</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>Git provides all the pieces, we just need to put them together in the right way.<p>The issue is that a client may not have fetched for a while before performing the force push, so it may not have all the required refs for performing the rollback.<p>The server of course still has all the refs, so it shouldn't be too hard to add a command (run client side) to invoke the required server-side rollback.</p>
]]></description><pubDate>Mon, 11 Nov 2013 23:24:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=6714820</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6714820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6714820</guid></item><item><title><![CDATA[New comment by cjh_ in "Jenkin developers accidentally do "git push --force" to over 150 repos on github"]]></title><description><![CDATA[
<p>In the case of git 'rewriting history' is not really the problem, and it leaves the old history intact (you cannot change git history, but you can create an alternative history).<p>The old history will possibly be garbage collected eventually, but for quite a while that history is still accessible.<p>I think the only missing piece is a simple (and obvious) client side 'undo/rollback that force push'.<p>The issue is that the git client may not have the history pre-force, so it may have insufficient information to do the rollback (at least in the current model), however the server still has all the refs (and they are listed in the reflog).</p>
]]></description><pubDate>Mon, 11 Nov 2013 23:22:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=6714804</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6714804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6714804</guid></item><item><title><![CDATA[New comment by cjh_ in "Surprisingly simple scheme for self-assembling robots"]]></title><description><![CDATA[
<p>It is possible that the current tech used in robotics will somehow form the basis for the work over the next 1000 years or so, either directly or via some tangential discovery by researchers working with current tech.<p>Without the benefit of hindsight it is impossible to tell with certainty what techs are worthwhile exploring and what should simply be discarded, the idea of discarding is of course based on the false assumption that techs that are later unused never had a use (e.g. we may solve a software problem with current tech that will form the basis for future robotics software).</p>
]]></description><pubDate>Sat, 05 Oct 2013 00:01:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=6498813</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6498813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6498813</guid></item><item><title><![CDATA[New comment by cjh_ in "Tny: A simple data serializer in C"]]></title><description><![CDATA[
<p>Thank you for mentioning jsmn, it was very enjoyable to read through jsmn's code.</p>
]]></description><pubDate>Sat, 21 Sep 2013 05:16:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=6422079</link><dc:creator>cjh_</dc:creator><comments>https://news.ycombinator.com/item?id=6422079</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6422079</guid></item></channel></rss>