Panopticon: A libre, cross platform disassembler for reverse engineering - <AUTHOR> https://panopticon.re/ <comment><USER2> Great work. Therefore that's one more disassembler in the wide. Some of the great open source ones, reverse oriented, that I have been able to test are:

Metasm: [https://github.com/jjyg/metasm/](https://github.com/jjyg/metasm/)

Radare: [http://radare.org/](http://radare.org/)

Capstone: [http://www.capstone-engine.org/](http://www.capstone-engine.org/)

Capstone is based on LLVM, that you cannot beat in term of architectures and industrial quality, and has great plugins, which make it kind of my favorite.

Of course, for non-scripting needs, you need decent graphical interfaces, as provided by these ones:

IDA: [https://www.hex-rays.com/products/ida/](https://www.hex- rays.com/products/ida/)

Hopper: [http://www.hopperapp.com/](http://www.hopperapp.com/)

IDA is clearly the best, but Hopper is a fair choice if you need it and you can't afford IDA license for personal use.

[Edit: add forgotten IDA and Hopper...]

<comment><USER3> FYI you most definitely can beat LLVM in terms of quality. Its diassembler was designed originally only to support the instructions that the compiler could generate. While they've since filled out most of the instruction set, there are still a whole set of subtleties it can't deal with well, simply because the compiler part of it was never designed to output them. (e.g. see segment prefixes)

<comment><USER2> It depends on what you are looking to achieve.

If you take a look to e.g. McSema [https://github.com/trailofbits/mcsema](https://github.com/trailofbits/mcsema), these guys have been able to use LLVM to transform assembly back to LLVM intermediate representation (IR). The IR is an abstract language used by LLVM during compilation to optimize the generated code. Being abstract basically allows to use optimizers across all LLVM supported architectures.

In these terms, I think LLVM has a clear advantage over competitors.

The following blog post give a nice overview of the McSema achievements: [http://blog.trailofbits.com/2014/06/23/a-preview-of- mcsema/](http://blog.trailofbits.com/2014/06/23/a-preview-of-mcsema/)

<comment><USER4> hi, I'm one of the mcsema authors and the original author who was responsible for mcsema using the LLVM instruction decoder and it was a mistake. if I had a choice between going back in time and assassinating Hitler, or convincing myself to use XED instead of mcinst...

<comment><USER2> Hi Munin,

What you did with McSema was really impressive and I'm glad discussing with one of the authors! I get the point you regret using LLVM, it seemed to me to be the best choice since LLVM has wide instruction semantics implementations, that more basic tools such as Xed do not offer. If I get it correctly… you would rather re-implement such semantic yourself? Or have you got any other tool / idea I'm not aware of?

<comment><USER4> I don't regret using LLVM at all. I regret using the instruction decoding features in LLVM. if I could do it again (and someone younger, smarter, and better looking than me is) I would combine the LLVM IR with the XED instruction decoder. we would still emit the semantics of the instructions as LLVM, but we would use XED to figure out which instruction we were decoding.

</comment></comment></comment></comment></comment></comment><comment><USER5> Let's assume you have reversed engineered some kind of boolean check and you now want to patch it to always return true or false. What does that process look like at a high level?

<comment><USER6> You insert the equivalent of "mov eax, 0x1; ret" (or 0x0) in x86 for whatever architecture you're using as the first instructions of the function.

<comment><USER5> I mean even more high level than this. If I open a binary, can I just write the new machine code to it directly and not be concerned with recompiling?

<comment><USER7> As long as all the instructions are the same size (or smaller padded with no- operation instructions) then yes. If, however, you do change the size of the application all relocation deltas need to be changed, and all relative jumps and calls need to be recalculated.

<comment><USER8> i was trying to edit one byte in an ELF, no change in file size and it kept crashing. i read that each section of code is hashed and obviously my byte edit changed the hash. i was pretty out of my depth tbh.

<comment><USER9> Sometimes code will add additional checks such as hashes to verify that parts of the text section haven't been modified. Should be able to remove those checks, too. Just have to track them all down.

</comment></comment></comment></comment></comment></comment><comment><USER10> I like the About me:

 _Hey I 'm Kai Michaelis, I'm in an IT-Security Masters program in Bochum, Germany and work part-time for people who use the term Cybersecurity unironically._

</comment><comment><USER11> Requisite Rust fanboy'ing: GitHub stats say 90% Rust code.

<comment><USER12> The author posted on /r/rust with some details: [https://www.reddit.com/r/rust/comments/4ihtfa/panopticon_a_l...](https://www.reddit.com/r/rust/comments/4ihtfa/panopticon_a_libre_crossplatform_disassembler/d2yj305)

A particularly interesting comment:

      > Also I found iterator invalidation bugs simply by translating
      > C++ to Rust, thanks Borrow Checker!

<comment><USER13> Yeah, it's really interesting how many iterator invalidation bugs you find in real C++ codebases. It's so easy to think that they don't exist until you have a tool (or a human) actively searching for them…

<comment><USER14> Isnt this whole category of bugs easily avoided by using

1\. _SECURE_SCL on windows

2\. _GLIBCXX_DEBUG on glibc based toolchains

<comment><USER15> Those do not remove any bugs; it just changes how they are handled (ignore and hope for the best vs print diagnostic and terminate program, and the latter not in all cases)

<comment><USER14> Assuming that tests exist, and have good coverage, wont the checked iterator implementations mentioned above catch most issues with invalid iterators?

<comment><USER13> I don't know of any large, widely used, security critical, heavily scrutinized C++ program that uses those flags in production. I also don't know of any such C++ program that hasn't had game-over use after free bugs. So the answer to your question is somewhere ranging from "we don't know, but unlikely" to "no".

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> Does somebody know how it compares to radare2?

<comment><USER17> From their GitHub repository[1]:

"Panopticon is under heavy development and its feature set still very basic. It's not yet able replace programs like radare2 and IDA Pro. We are working on it, check back regularly!"

[1] [https://github.com/das- labor/panopticon/blob/master/doc/feat...](https://github.com/das- labor/panopticon/blob/master/doc/feats.rst)

</comment></comment><comment><USER18> Anyone know how this compares to IDA Pro ?

<comment><USER19> If you can afford an IDA Pro license and cost of plugins, does it matter?

<comment><USER18> Yeah, it matters. If this is better, I'll use this; if IDA is better, I'll use IDA. I'm not 100% sure I understand your comment.

Btw, most companies can afford an IDA license. It's pretty cheap compared to the salary of a developer, at least in the coastal US.

<comment><USER19> If your job can justify it, great, but mine can't. I want it for personal use and I can't justify it.

<comment><USER20> If you have more time than money, here's a possible option:

      - Buy IDA Pro using a credit card
      - Find bug or two, submit to bug bounty [1]
      - Pay back credit using bug bounty money

[1] - [https://www.hex-rays.com/bugbounty.shtml](https://www.hex- rays.com/bugbounty.shtml)

<comment><USER21> If life were so simple, everyone would be doing it don't you think?

<comment><USER22> My friend's grandfather was an economist. When he was a little boy he saw a $20 bill on the sidewalk on a walk with with his grandfather. He pointed to it and said "Grandpa look someone dropped a twenty dollar bill! We will be rich!" His grandfather dismissed his enthusiasm and explained that if there was free money on the ground somebody would have picked it up by now.

</comment></comment></comment></comment></comment></comment></comment><comment><USER23> On a side note; the visual callgraph is interesting.. It'd be interesting for other IDEs to implement something similar with a historical listing of input/output values for the corresponding displayed methods.

<comment><USER24> What's the visual callgraph? Is it something different than the CFG graph in the screenshot? I feel like most disassemblers do that.

<comment><USER23> Never worked with a disassembler. Didn't realize that this is commonplace. Could be beneficial for other languages as well..

</comment></comment></comment><comment><USER25> The project states:

"Panopticon is a disassembler that understands the semantics of opcodes. This way it's able to help the user by discovering and displaying invariants that would have to be discovered "by hand" in traditional disassemblers."

Doesn't every disassembler have to understand the opcode semantics in order to disassemble and make sense of them or am I misinterpreting that statement?

Also can anyone explain what the "invariants" are? When I hear the word I can only think of loop invariants and I'm guessing that is not what the author means here.

<comment><USER26> You say "in order to disassemble and make sense of them", but the "sense" that a disassembler makes can just be the direct conversion from machine code to equivalent assembley. Machine code is just another syntax, directly converting that into assembly can happen instruction-by-instruction.

Making more sensible assembly that a human would write is another thing, if you want to follow jumps to figure out where instructions are and regenerate labels, then that's one step towards semantics.

I don't know what kinds of invariants panopticon is looking at, but there seems to be code for static analysis using abstract interpretation[1]. This could do the data-flow analysis, determine types and recognize persistent variables.

[1] [https://en.wikipedia.org/wiki/Abstract_interpretation](https://en.wikipedia.org/wiki/Abstract_interpretation)

<comment><USER25> Now I see. Thanks for the explanation. this is pretty neat then. Seems like a great learning tool

</comment></comment></comment><comment><USER4> I noticed that this only supports AVR. what is your plan to support x86? would you think about linking against some external code that provides semantics for x86?

<comment><USER27> The README is a bit out of date. It support MOS 6502 and parts of x86_64 too. I currently writing the lifting code that translates x86 opcodes to a simpler intermediate language: [https://github.com/flanfly/panopticon/blob/feature/rreil/lib...](https://github.com/flanfly/panopticon/blob/feature/rreil/lib/src/amd64/semantic.rs)

<comment><USER28> How do you find adding new architectures to it? I've been meaning to add some architectures I want to Radare for a while now, but it's a bit daunting due to lack of docs and the build system is argh. And I've also been wanting to learn Rust, so this seems like an obvious fit for me...

<comment><USER27> Panopticon includes a simple disassembler framework. The basic idea is that you provide opcode patterns akin to regexp and write a function that emits mnemonics and code describing opcode semantics. There isn't much documentation, but you can take a look at the AVR and MOS 6502 disassemblers in lib/src/mos resp. lib/src/avr.

</comment></comment></comment></comment><comment><USER29> What is the best guide to learning how to reverse engineer programs?

<comment><USER30> I suggest "Reverse Engineering For Beginners"[1] and "Hacking the Xbox"[2].

[1]: [http://beginners.re](http://beginners.re) [2]: [http://libgen.io/book/index.php?md5=64E13DD5E86FE633A48C2261...](http://libgen.io/book/index.php?md5=64E13DD5E86FE633A48C2261CBF505E2)

</comment></comment><comment><USER31> Slightly OT, but are there any good libre tools for reverse engineering binary file formats rather than executables?

<comment><USER32> Start with binwalk.

</comment></comment><comment><USER33> GPL means I can't use it as a library unless I also GPL.

No thanks.

<comment><USER29> You could ask them to make an exception:

[http://www.gnu.org/licenses/gpl- faq.en.html#LinkingOverContr...](http://www.gnu.org/licenses/gpl- faq.en.html#LinkingOverControlledInterface)

</comment></comment><comment><USER34> I like "ht editor".

</comment><comment><USER35> >Panopticon

Good lord what a cliche name.

<comment><USER36> Please don't post snarky dismissals. If you think there's an important point about the name, you're welcome to make it substantively.</comment></comment>


YC: 7 Weeks In - <AUTHOR> http://www.foundersatwork.com/1/post/2008/02/yc-7-weeks-in.html

<comment><USER3> For some reason I'm inspired to take this opportunity to say, to anyone who has any reservations about applying to YC: do it. Right now. Then do your best to nail the interview and get picked. This has been (already!) one of the best experiences of my life. The people that you get to meet and learn from - <USER2> just the amazing speakers they bring in, but the rest of the group you're in and the network of founders are the best part. It's all about being exposed to success and constantly hearing about and seeing the factors of success and being inspired to keep working, persist, iterate, make what people want. One of the best realizations for me has been that the people who succeed aren't that different from any of us. If they can do it, so can we. If we can do it, so can you.

<comment><USER4> I'm intrigued that you, as a veteran, would phrase it this way. If you got to call yourself 10 years ago, what would you say?

<comment><USER3> I would tell myself to apply earlier! Although I've learned a crazy amount about a lot of things in the last 10 years, I've just relearned a lot of them (better this time) in the past 2 months. The thing about it is, there's this perception that the people who do these things are so much smarter, more experienced, more _something_ than you, but that's not necessarily true, so what's stopping you? Just yourself.

<comment><USER5> I can't believe you wouldn't give yourself stock tips if you could call yourself from 10 years ago.

<comment><USER3> I wouldn't. That would be wrong. (j/k, good idea)

</comment></comment></comment></comment></comment><comment><USER6> It's a shame no-ones blogged it this time like auctomatic crew, draftmix did

</comment><comment><USER7> Hrm. Site's down...

<comment><USER7> ... and it's back.

<comment><USER8> And down... Or not the whole site, you can see this content from: <http://www.foundersatwork.com/blog.html>

<comment><USER9> We're doing some emergency maintenance on the sites, and things should already have been fixed a long time ago. Scaling issues are rough. The good news is that even though our shared-storage system was quite scaling as we'd hoped, we've got a new one in place, so things should be better going forward.

</comment></comment></comment></comment><comment><USER10> Its been great!</comment>


Ask HN: Which tool have changed your life recently? - <AUTHOR> Any app, tool, service, product that has changed your life recently. <comment><USER3> Org Mode in Spacemacs. I combined with a clean folder conventions combined with sensible usage of tags.

FWIW, I earlier had an analog planning system, but it wasn't scaling. With a new job and changed roles/responsibilites, Org mode gives me the productivity I was looking for.

The past 2 weeks since I have started using it has given me positive results. But I will wait for the year to give a definite answer :-).

<comment><USER4> And GitHub even renders .org files the same way they do Markdown. You can store your notes in a Git repo and see them on any device, even without Emacs installed.

<comment><USER3> Excellent I did not know that. Thank you, one of my TODO state changed to DONE.

</comment></comment></comment><comment><USER5> Notion. Been using it for a while to take all kinds of notes. Loving it.

[https://notion.so/](https://notion.so/)

<comment><USER6> Can you explain what makes it so good compared to using a combination of the tools it says it replaces? What if you like some of the tools it has and not others?

</comment></comment><comment><USER7> VisualStudio Code - I got rid of almost all IDE. I still keep using Intellij though for scala.

</comment><comment><USER8> LaTeX: Using TexShop to take notes, diary, programming notes, writing - <USER2> everything into beautiful PDF ebooks. TikZ for diagrams.

</comment><comment><USER9> I used to run a Microsoft Exchange Server for my family, just switched to Mailcow-Dockerized, which is really awesome.

[https://mailcow.email/](https://mailcow.email/)

</comment><comment><USER10> Not so recent but Vimwiki.

Fantastic way to organise things and has a built in diary. Definitely recommend it to fellow vim habitators.

</comment><comment><USER11> Thinking about Calm - I've started meditating, and this changed everything in my life :)

</comment><comment><USER12> Definitely the Pihole

</comment><comment><USER13> Headspace - Meditation guidance

</comment><comment><USER14> emacs</comment>


Ask HN: What would you do with $1,000,000? - <AUTHOR>

Hello HN. I was sipping on my morning coffee and I had the idea to ask HN, "What would you do if you received $1,000,000 today?" How much would you spend, how much would you invest, where and how would you invest it? Would you continue to look for funding for your projects? Or, would you self-fund with your newly acquired nest-egg? <comment><USER2> I would immediately move to Malaysia and retire.

<http://www.workpermit.com/malaysia/malaysia.htm>

<comment><USER3> I don't think 1m is enough to retire on if you are reasonably young. Malaysia is not that inexpensive to live in.

</comment></comment><comment><USER4> resisting the urge to quote the movie office space here...

I would pay off debt, save a portion, and invest the rest. in my case it would work out to be just about equal parts. That solved, I would probably spend a few months recharging and starting a business of some sort- most likely some sort of software plugin creative tool for musicians.

<comment><USER5> You have 300,000$ in debts? I feel for you.

<comment><USER4> Mortgage plus car note. personal/CC debt is pretty much nil.

<comment><USER5> Ah ok, didn't think about that.

</comment></comment></comment></comment><comment><USER6> I'd spend it on hackers, designers, marketing and hosting to aggressively launch my 'big idea' with a head start on anyone who tries to copy it. (It's an idea for a website with low costs but universal appeal and clear money- making potential... but if I just built it now there'd be nothing to stop a bunch of richer more competent people making clones. So I'm sitting on it till I figure out what to do about that. Which is a pity cause I think the world could really use it)

Ok, I probably wouldn't blow it _all_ on that.

</comment><comment><USER7> a million bucks isn't enough to retire on in perpetuity, but it is enough to set yourself up in such a way that you can, professionally, do almost anything you want with your life as long as you have some sort of working income stream.

i'd probably work on my current bootstrapped startup full-time for a while, see how it goes, and then travel the world while doing freelance work a few hours a day.

edit: oh, and pay down all of my debts, of course.

<comment><USER8> _a million bucks isn't enough to retire on in perpetuity_

It is if you don't live in the US. You could invest that money in the US where you can get decent returns and live somewhere like the Philippines where less than $1000/month affords you a comfortable lifestyle (see [http://trifter.com/asia-pacific/philippines/true-cost-of- liv...](http://trifter.com/asia-pacific/philippines/true-cost-of-living-in- the-philippines-for-2009/) for a middle class married couple who do it for under $500). Living in the Philippines will also give you a more relaxed lifestyle (maids, drivers, live-in cooks, etc) so you could even work on a startup if you wanted since you can't say you're too busy working or doing chores.

<comment><USER7> > It is if you don't live in the US.

i disagree. even if you adjust for inflation, consider taxes and such, you can live a very comfortable middle class lifestyle on $1m in the USA. going elsewhere, of course, makes it easier.

but its not about "just living". retiring in perpetuity it about having enough money socked away that, for example, a major, expensive medical problem won't ruin it for you, or that you can put your kids through college. its the big non-regular life expenses that get in the way.

<comment><USER8> I completely agree that you can do it in the US, I just meant that you can get more bang for your buck in a place like the Philippines. $1,000,000 invested in the US, even if you could get a 10% guaranteed return (that's a stretch in this economy), you'd earn $100,000 per year. Inflation is going to eat 3-5% of that $1,000,000 each year, so you can only take out $50-70,000 if you want the nest egg to stay intact. Give 1/3 of that to Uncle Sam for taxes, and you have $30-50,000 to live on, which won't go far, even in Arizona. Hopefully you have the restraint to live a lower-middle class lifestyle knowing you have $1,000,000 in the bank. In the Philippines that same middle class lifestyle can be had for $6,000/year, or if you want to live an upper-middle class lifestyle, $12,000/year.

<comment><USER9> You're assuming that you're only taxed on what you "take out" and that's wrong. You're taxed on taxable income, whether or not you "take it".

Yes, income inside tax deferred accounts is not considered income until distributed, but other accounts don't work that way. If there are sales, dividends, or interest, you've got taxable events even if you leave the money in the account.

Let's look at that $100k in earnings. $10-20k goes to taxes. (The marginal rate for $100k is higher, but you don't pay it on the whole amount.) $30-50k goes to inflation, leaving you $30-70k to "safely" take out.

However, it's hard to get 10% these days - even 5% may be too high. Fortunately inflation is currently low too, but $5k for taxes and $20k for inflation leaves you with just $25k to safely take out.

</comment></comment></comment></comment></comment><comment><USER10> Pay off all my debts, then my parents and in-laws, set up college funds for my children and nieces/nephews/godchildren, give something to my siblings and my wife's, invest half of what's left, and donate the rest.

</comment><comment><USER11> I'd pay off the mortgage, take a short holiday somewhere nice then consult a wealth advisor to help with creating a more diverse investment portfolio.

</comment><comment><USER12> I would start a Y-Combinator Branch in Atlanta!

</comment><comment><USER13> save half, invest a quarter in long term things (property, bonds, etc), distribute an eighth to friends and family, improve my own immediate quality of life with 1/16th. Invest the final 16th in shorter term projects, eg putting together a startup etc.

<comment><USER5> No party?

<comment><USER13> "improve my own immediate quality of life"=="vodka, hookers and weed" ;)

edit: and a top hat and monocle. I mean, I _am_ loaded after all...

</comment></comment></comment><comment><USER14> I would probably set up a software / gamedev company in US (and get a green card).

</comment><comment><USER15> I'd buy a nice place, and use the rest of it to live while I build something else.

</comment><comment><USER16> buy a nice house in a nice city

</comment><comment><USER17> "Two chicks at the same time."</comment>


UCB's Robert Reich: Apple isn't the problem. Wall St big banks are the problem. - <AUTHOR> http://robertreich.org/post/572112065/apple-isnt-the-problem-wall-streets-big-banks-are

<comment><USER2> I agree, I'm not a fan of Apple's recent actions but it certainly doesn't warrant government intervention. Same thing applies to the Google/Admob deal as many have suggested, I'm not sure why the FTC has a hard on for tech companies.</comment>


Show HN: A blog on pragmatic software development - <AUTHOR> https://stateofprogress.blog/the-state-of-progress-639f3a0040af#.ngrp3j8ce <comment><USER2> OK, but you could have filled the blog with some articles first. For now I don't even know if it will be factually correct, much less if it will be interesting, and I'm certain I won't come back on my own at this point.

<comment><AUTHOR> Hi dozzie, you certainly got a point. We wanted to clarify our mission first and then progressively publish articles.

We are developers that prefer small and incremental updates to big (bloated) releases and this is reflected also on the way we publish.

As far as for coming back... you don't have to! You have the following options:

1\. Add our RSS feed to your feed reader: [https://stateofprogress.blog/feed](https://stateofprogress.blog/feed) 2\. Follow us on Medium: [https://stateofprogress.blog/](https://stateofprogress.blog/) 3\. Follow us on Twitter: [https://twitter.com/stateofprogblog](https://twitter.com/stateofprogblog)

Thanks for your comment, I hope you like what we have been up to!

<comment><USER2> 1, 2, and 3: I don't know _yet_ if you will be interesting. Why the heck would I bother with following you _anywhere_? That's the point. I have enough reading sources.

<comment><AUTHOR> OK, I get it better now. We are not forcing or pushing anyone to follow us if they don't feel like it.

I am going to share with you though the topics I am working on right now. I expect the first one to be published by Monday.

1\. Well-structured repositories (What makes a repo well structured? Why should I do so? How can I do it?) 2\. Why you should choose a traditional relational database as the main back-end of your web application, instead of an object store (e.g. Mongo) 3\. When and why to choose TypeScript (or any other type-safe programming language)

If you believe that such articles are in your interest, then feel free to follow.

Thanks for your sincere comments. I really appreciate them and take them into account for the future.

P.S.: The above are working titles. Most probably they will be refined and shortened.

<comment><USER3> Those topics seem somewhat interesting in the abstract, but I would hope that they are more than just opinion pieces, and include real world examples.

In your intro post you definitely have the focus clearly on real world examples of how the advice plays out in practice. Compare:

Why you should choose a traditional relational database as the main back-end of your web application, instead of an object store (e.g. Mongo)

vs.

Why it made sense choosing Swarm over Kubernetes for our application

There is a big difference between "you should do X" articles and "Why we decided to do X (and how it worked out)" articles.

<comment><AUTHOR> Great comment. Let me reply.

The content of all articles is sourced from our experience on working on commercial products and open source projects, no just plain though sharing.

Let me share some more insights on the previous topics:

\- _" Relational vs. Object/Mongo store"_ this article is based on our experience at sourcelair.com. Choosing Mongo for our main data store has caused us more problems than it solved, and we have spent tons of hours working this out. After running this in prod for 3 years, we have a strong opinion on this that you should not use an object store for your main back-end unless you are a super exception.

\- _We we choose Swarm_ : Docker is a relatively new tech and while its adoption grows it has not yet the maturity and footprint of projects like MySQL or Postgres, so each case diverges more from another. This is why here we talk about "When does it make sense to use this" instead of "You should do this".

Hope I covered your question, but feel free to continue the discussion if you 'd like. It's an interesting topic.

<comment><USER3> _> Hope I covered your question_

Not really. Also, it wasn't a question, just an observation:

The example titles listed in the introductory post are in the format "what we did", and the example titles here are mostly "what you should do".

Do you see the difference?

</comment></comment></comment></comment></comment></comment></comment><comment><USER4> I agree, it is really uninteresting without any at the very least "sample" articles.

<comment><AUTHOR> Hi wingerlang,

Thanks for your comment. The first article will be published by Monday. A sneak peak on what I am working on right now for this blog is referenced at [https://news.ycombinator.com/item?id=13069757](https://news.ycombinator.com/item?id=13069757) as well:

1\. _Well-structured repositories_ (What makes a repo well structured? Why should I do so? How can I do it?) 2. _Why you should choose a traditional relational database as the main back-end of your web application, instead of an object store_ (e.g. Mongo) 3. _When and why to choose TypeScript_ (or any other type-safe programming language)

If you believe that these topics are of interest to you, feel free to follow us. It would be great to hear your feedback on our articles as well.

Thanks a lot!

<comment><USER4> I think you could have waited with the announcement until monday :)

Anyway, seems interesting and I'll check it out.

<comment><AUTHOR> Well, we will never find out now!

I am happy you are interested in the State of Progress. The next article is on its way.</comment></comment></comment></comment>


Fluid windows - <AUTHOR> http://toki-woki.net/lab/fluid-corners/ <comment><USER2> I work for Microsoft as a UX prototyper. This is actually not only cool, but useful. I'll forward this around internally.

<comment><USER3> Separate question;

Why can I have multiple documents open in any MS Office App, which allow me to show one document on one screen and another on a different screen -- EXCEPT Excel?

This drives me NUTS. I can't easily compare data between spreadsheets without stretching the app across both screens -- then manually adjusting each document window within excel.

Who the hell is responsible for these inconsistencies over there?

<comment><USER4> Right-Click on Excel Taskbar Icon > "Microsoft Excel" > A new window opens.

Still crazy that it doesn't do that by default, but there is a workaround.

<comment><USER5> > Right-Click on Excel Taskbar Icon > "Microsoft Excel" > A new window opens.

Is that a windows 7 feature? It doesn't appear to work for XP. (Yeah yeah this desktop is in a govt dept that will get updated one day...)

Like the samstave this (mis)feature of Excel has been frustrating me forever.

<comment><USER6> Can't remember what the shortcut is (been on the mac bandwagon for 5 years) but it definitely works in XP as I was doing that for years. Maybe File > New Window or something like that.

</comment></comment></comment></comment></comment><comment><USER7> This is a very cool idea and I definitely see the problem that it solves, but it also has the downside of not being a metaphor for something physical.

It's a little strange to see these controls which are currently very anchored in the corner of the window to be moving and sliding around, especially when the view inside the window is scrolling off the screen.

I could see people running into trouble when they've somehow moved the window partially obscuring controls. But if the controls are off the screen, I think it reinforces the idea that this "box" is a window into an application. It doesn't resize unless you grab an edge. (1) I don't mind making the tradeoff towards beginners understanding the computer when there are keyboard shortcuts for advanced users.

(1) This is now worse in OS X from a metaphor perspective. Before you could only resize from the bottom-right where there was a gripper. Now you can resize from any outside edge and there are no grippers/indicators. [http://arstechnica.com/apple/reviews/2011/07/mac- os-x-10-7.a...](http://arstechnica.com/apple/reviews/2011/07/mac- os-x-10-7.ars/4)

<comment><USER3> > _...but it also has the downside of not being a metaphor for something > physical._

Sometimes though we need it to be a metaphor for what we _intend or imply_

Rather than simply mirroring physical constraints in an unconstrained environment.

</comment></comment><comment><USER8> The Haiku window manager does exactly this, but it also resizes the viewport such that the scrollbars are always visible. I've always thought it would be a great feature in other stacking window managers.

<comment><USER9> The BeOS (and therefore Haiku) window managers were well beyond their time. The tab style is still my favourite windowing paradigm.

<comment><USER3> Seriously, everything should have tabs.

<comment><USER10> Everything does have tabs. All your windows are just tabs on the task bar!

</comment></comment></comment></comment><comment><USER10> I'm not a fan, also I don't like the name--I was expecting something like Wobbly Windows, but more fluid-y instead of rubbery. (Someone should at least edit the HN title to the original title of Fluid Corners.)

For the Windows version, dragging it pretty far to the right leaves essentially just the close button group left. So what if I want to drag it back? I'm incredibly more likely to accidentally click one of those buttons instead of correctly grab the tiny sliver of space to redrag. (Because when I drag things off-screen, I usually bring them back eventually, not to close them, but to use them.) This seems like a solution ot a non-problem. Do most people really close/minimize/maximize windows immediately after dragging them back fully on-screen?

</comment><comment><USER11> This would be awesome though on Windows (don't have much experience programming Mac UI, so maybe there too) it would break programs that make assumptions about how the non-client area of a window operates.

Quite a few programs do custom rendering up there in a way that would make it difficult to retrofit this in a universally compatible way. These programs would at a minimum need to get events to know that the various elements have moved which would require code changes in the programs to listen for and react to those events. Given how much Microsoft bends over backwards to maintain Win32 compatibility (less than in the past, but still far more than average), I doubt they'd put something like this in unless it was a wholesale interface change (similar to Metro... which avoids this issue altogether by just not having title bars).

<comment><USER12> The habit of Windows apps to have entirely custom UIs is relatively unknown on Macs. It's not impossible, just (thankfully) much more rare.

<comment><USER13> _The habit of Windows apps to have entirely custom UIs is relatively unknown on Macs_

Except for all the apps that do. Like iTunes (ships with OS X) and the Mac App Store app (ships with OS X). And Quicktime (ships with OS X).

Even some popular non-Apple apps like Twitter.

<comment><USER12> Er, those are _not_ entirely custom UIs, they use standard widgets in well- defined ways that the platform/window manager understands.

<comment><USER13> The question was about the title bar chrome. iTunes positions the traffic light buttons vertically when compact. The Mac App Store app positions them in the center of the title area instead of the top. Quicktime has its own chrome entirely. I'm not complaining about it, just pointing out that non-standard chromes are present on the Mac in Apple's own apps.

</comment></comment></comment></comment></comment><comment><USER14> I approve! One of the most annoying aspects of OS X (pre-Lion) was hunting for the lower right corner to resize windows. Thankfully, all sides of a window can now be used for resizing. This is a good vision for extending ease-of- resizing further.

It would also force the priority of responsive design. Now that we all work at so many different resolutions, apps and sites should adapt seamlessly to resizing.

</comment><comment><USER15> I am amazed at how poorly modern keyboards support our highly visual modern user interfaces. Wouldn't the following keyboard buttons be generally REALLY useful:

\- Open

\- Close/Exit

\- Save

\- Copy

\- Paste

\- Menu (to list available context options)

\- Help (to show context help)

\- Maximize/Restore (toggle mode)

\- Info

And the potentially very useful directional arrows keys are almost completely useless except when editing text (although game developers use them meaningfully)

The keyboard is also littered with buttons whose function are designed specifically for text editing, not necesarily a bad thing, but when was the last time anybody actually reviewed the efficiency of the modern keyboard to discover if it is doing a good job or not!?!?!

<comment><USER16> I always wondered this too. But I have a keyboard with these buttons (really just the Fn keys and an "alternative Fn" function lock key that sends the appropriate shortcuts to Windows) and I never use them. As a touch typist I find it too much of a distraction to move my fingers off the home row and end up sticking with the shortcuts. I'm not sure where else you could really put them without the same problem occurring. Maybe its time to cut our alphabet down to 19 letters and replace the bottom row of alphas with these functions.

<comment><USER15> I have also used keyboards that have extra buttons for things like this, but somehow I have felt reluctant to make the effort to use them because they are not standard and most other keyboards dont have them, which would frustrate me more!

Who is in charge of keyboard standards? If there isn't anybody, could we start a new keyboard layout organization!?!?

</comment></comment></comment><comment><USER17> Very, very cool. Would love to see this implemented somehow. Would save me from lots of "mouse goofs"

</comment><comment><USER18> That is a great idea! Even greater would be to extend this to a consistent way to manage windows whose title bar is above to upper screen edge.

Both Windows and Mac OS try pretty hard to avoid this, but with two monitors it happens every now and then--especially when unpluggin/plugging the secondary monitor.

Without the title bar, it can be really hard to get the window back on the screen. Usually involves, if possible, resizing the window so it shows on both screens or unplugging/re-plugging the secondary monitor.

<comment><USER19> I really miss Linux's Alt-drag to move a window, which would fix this problem. I also wish MacOS and Windows actually let you move a window's titlebar offscreen.

<comment><USER20> FYI: Someone did alt-dragging (and resizing) for Windows <http://code.google.com/p/altdrag/>

</comment></comment></comment><comment><USER21> Quick, patent this!

<comment><USER22> You can't. This page would count as prior art.

<comment><USER23> Not prior art, but public disclosure.

<comment><USER24> So what if I remake it before he patents it? Is my implementation then prior art?

If you're right, the patent system is yet again more broken then I thought.

<comment><USER19> No, he has 1 year from public disclosure to file for a patent (in the US, as of 2006 when I took my IP law class [IANAL, btw]). You could not file for a patent because his public disclosure would count as prior art for you, unless you could prove that you had the idea before his publication.

</comment></comment></comment></comment></comment><comment><USER25> I would rather have the button block simply jump to the other side of the window (instead of being pushed there by the window edge). IMO your version is just too fancy for the routine day-to-day use.

</comment><comment><USER26> I remember some X11 window manager that used BeOS like tabs doing something similar (either one of the twm hacks/successors, or a wm that allowed you to merge tabs)…

<comment><USER27> That might have been fluxbox (fluxbox.org), from the BlackBox family.

<comment><USER26> I would've thought it was something older like pwm…

</comment></comment></comment><comment><USER28> I think the OS X version is a bit confusing, to be honest. There are too many elements sliding around and resizing. The problem it aims to fix is also still partially unsolved when the screen is dragged 'too far' (<http://i.imgur.com/Q4Ktw.png>).

The Windows version isn't confusing at all though (in its current implementation). I think this would be a really nice feature on Windows.

</comment><comment><USER29> I solved this problem by not having window decorations and not allowing windows to be partially off-screen.

</comment><comment><USER30> With the Mac, a lot of people (i.e. me) will have the Dock in the way when you drag off screen: keeping the window buttons onscreen wouldn't help much, since they'd be behind the Dock, and sliding the buttons to keep outside the Dock area would probably be too weird-looking.

</comment><comment><USER31> This is really cool and I'd love to use it! The one thing I'd like to see is some more gap on the windows side when it is dragged all the way to the right. With some gap I wouldn't click close or minimize when trying to move it back. The mac has enough gap with the title.

</comment><comment><USER32> That is really smart. Though I don't think anyone is going to implement it (except maybe gnome) because the world of UI is shifting to mobile, even if the "desktop" computer will stay with us for many years to come. Had you thought of this 10 years ago ;)

</comment><comment><USER33> On most Linux WM buttons are left and right hehe.

</comment><comment><USER34> I keep accidentally losing the window by dragging past the bottom of the "screen" and letting go.

<comment><USER11> Windows 7 allows you to do something similar.

The window layout manager is smart enough not to let you push the window totally off the screen, but if you grab a window and pull it down under the taskbar (assuming the taskbar is in the default bottom position and does not autohide) in Windows 7, you're somewhat boned because while the window is still there, the taskbar's zorder makes it impossible to click on it to recover it. You can fix this situation by unlocking the taskbar (if it is locked) and moving it or by setting it to autohide, but neither of these things is a particularly intuitive move for the average user, I'd guess.

<comment><USER35> Pressing alt-space, m followed by the arrow keys usually worked when I was using XP.

On Windows 7 this is not an issue as the windows snap to the sides and top, and if you drag towards the bottom of the screen there are several pixels on the titlebar where you can only resize the window and not move it, it is really difficult to lose a window by dragging it as shown on the website.

<comment><USER11> It is an issue in Windows 7, at least with default settings. As mentioned in the grantparent post, if you have a default taskbar setup (at the bottom, no autohide) you can very easily drag a window below the taskbar (because the taskbar is larger than the entire window titlebar), which might as well be off the screen because the zorder of the taskbar is greater than that of the window, so you can't interact with the window via the mouse until you move the taskbar or set it to auto-hide.

<comment><USER35> I just tried with the taskbar on the bottom, and I could not drag the mouse cursor below the top edge of the taskbar.

<comment><USER11> That's odd, because I've got 3 different Windows 7 installs here and every one of them allows me to drag the mouse cursor below the top edge of the taskbar while dragging a window.

I'm not suggesting you're wrong here, just that I've never seen the behavior you're seeing and I use Windows 7 frequently. Perhaps you have some option set that I do not.

<comment><USER23> You can only drag into the taskbar area if you have multiple monitors.

On a single monitor setup it captures the mouse and prevents this issue.

<comment><USER11> My setups are all multi-monitor so I guess that's the issue? Thanks for the info.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER36> I don't see how this could be useful - why would I drag a window outside of the viewable area?

If I do, it's probably because I want it easily accessible but not obstructing other windows, so these buttons would make it harder to drag it back.

For multiple monitors - the controls are dragged to the other monitor as well...

<comment><USER36> I don't usually reply to myself, but when I do, I have a good reason :-). In this case, can anyone tell me how this fluid window could be useful, instead of just downvoting me? Thank you!

</comment></comment><comment><USER37> It doesn't work for me, what is supposed to happen?

<comment><USER38> Here's a quick and dirty screencast <http://screenr.com/QrB8> Basically, parts of the UI that would be hidden when the window is off-screen, get moved inwards.

<comment><USER39> I was thinking it doesn't work for me but it does. I was just moving the windows too fast to notice. It's great how unobtrusive it is.

</comment></comment></comment><comment><USER15> great!

</comment><comment><USER40> There are some little things called hotkeys........

</comment><comment><USER41> Um, I have no idea if this is cool or not, because I'm sitting in a doctor's office on my iPhone.

Is it really too much to ask to implement swipe gestures in JavaScript? The world is mobile now. Whether this is actually cool or not I shall never know, it has disqualified itself from my web browsing time.

<comment><USER42> The idea itself isn't meant for a mobile environment. The GUI moves when you drag the windows around. This sort of interaction doesn't really play nice with mobile usage.

<comment><USER43> Slight pipedream aside; a tiling window manager with multiple real and virtual desktops plus gesture control would be nice. Anon or authed zeroconf wireless networking and would allow one to place/dock a mobile device to the side of your desktop/tv/other mobile and drag/sync apps and/or items between the two. Anyone know of a system or so that could do the likes of that?</comment></comment></comment>


Lets get an early reflection of how Britain will vote in 2017 UK Election - <AUTHOR> https://twitter.com/kirksfletcher/status/854317935829164033 <comment><USER2> Because polls are always an accurate reflection /s</comment>


Do You Know Who Owns Your Debt? - <AUTHOR> https://www.gq.com/story/debt-buying-collectors <comment><USER2> I once thought it would be funny to offer a service that bought "bundles" of securitized mortgages, but would then separate them out and offer to sell specific mortgages to people's arch enemies who would presumably pay a premium.

the elevator pitch is "the google of mortgages".

<comment><USER3> I'd find it hilarious if my arch enemy [1] bought my mortgage, especially if they paid a premium to get it.

When someone buys your mortgage it doesn't change the terms of the mortgage. For the most part all that changes is who you send your payments to.

Probably the worst that they could do is (1) make you use a payment method that is inconvenient for you, such as mailing an actual check once a month, and (2) if you violate any terms of the contract be hard nosed about it.

[1] I'm actually between arch enemies at the moment, so the position is open if anyone would like to apply.

<comment><USER4> > make you use a payment method that is inconvenient for you, such as mailing > an actual check once a month,

This is really the biggest challenge facing borrowers. The means of payment should really be locked in. Fortunately the servicer doesn't always change too, but that is something that the law should probably protect.

I could imagine the law requiring the consent of the borrower to the transfer of servicer, or some similar mechanism.

<comment><USER5> >>> This is really the biggest challenge facing borrowers. The means of payment should really be locked in.

Why? Some debt terms are incredibly long, such as a 20/30 year mortgage. Many soon to be paid off mortgages were signed before online banking / online payments was a thing. So you would be forcing people to continue using outdated and inefficient technology,,, b/c no reason at all.

Can you imagine the payment technology we will have 20 years from now? If I bought a house with a mortgage today, why should I be forced to continue using today's technology for another 20 or 30 years when a better technology is out there?

<comment><USER6> Okay, yes, locking in the payment method at the start is bad, but what if it can't be changed without the consent of both parties? Presumably if some awesome new payment system becomes available, both parties would consent to use that.

<comment><USER7> A mortgage is usually a contract between two parties, so...both parties can agree to change anything about the contract at any time anyway.

</comment></comment></comment></comment></comment></comment><comment><USER8> > The average price, according to a 2013 Federal Trade Commission (FTC) > report, is about 4 cents per dollar, which means a $200 credit card balance > goes for $8 on the secondary market.

Wow, that is cheap. Is there a way to buy your own debt?

<comment><USER9> My dad tried to buy the mortgage on our family home from the local bank. It was at a time of rapidly rising interest rates, and according to the textbook calculation, our mortgage was costing the bank to hang onto. He figured out the fair market value of the mortgage, and offered to split the difference with the bank. Each side would profit.

The banker's first reaction was: This can't be real. A week later, the banker called my dad back and said: Sure enough, the numbers say that we should sell you your mortgage. But we also found out that it's illegal.

I don't know the details of why it might have been illegal, but it was an amusing episode.

<comment><USER10> People sell mortgages all the time. Is it just illegal to sell a mortgage to the borrower?

If so, suppose two borrowers team up and buy each others' mortgages?

<comment><USER9> In response to both the posts here, I don't know. It also could be that the banker was full of it. On the other hand, I could imagine a sort of moral hazard situation where someone could take out a loan, let it go into default, and then offer to buy it back at a massive discount.

</comment></comment></comment></comment><comment><USER11> The entire industry of debt collection is literally scum. Debt can be sold to these parasites at any point in a transaction with a company.

During my college days, an apartment complex tried to add on various move out fees when I didn't renew. Despite being in active dispute with the complex about the fees, the complex ended up sending the fees to a debt collector.

Fortunately I was able to reduce the amount to an agreeable state and it never reported to the CRA. Still have clean reports to date.

<comment><USER12> That sounds more like the complex was scum, rather than the debt collector. What did they do wrong here?

<comment><USER13> The industry buys debts with little to no proof that the debt is legitimate and then proceeds to hound and scare people who don't know their rights into paying.

</comment></comment></comment><comment><USER14> A cool charity would be one that bought poor people's debt and then forgave it.

<comment><USER15> Such charities exist.

Here's one: [https://ripmedicaldebt.org/](https://ripmedicaldebt.org/)

</comment></comment><comment><USER16> No one. I am debt free. When I paid my last debt off I vowed no more. Getting a house will take building it myself and I plan to. Already bought the land with cash. I feel real good about that.

I blame the banks for a lot of what's wrong with society today and refuse to pay them interest. A personal boycott if you will.

They are unethical and break the law with impunity. Extracting free will from the populace. It's wrong. The whole system is a lie.

<comment><USER17> Good for you. For many Americans who were born into families living in high growth areas (California, New York, etc.) a mortgage is often times the only way to stay in the area close to family, while scraping together some semblance of financial stability.

I'm curious as to why you think the "whole system is a lie". This sort of blanket statement seems to discount the fact that banks do in fact serve a purpose in our society, specifically by providing liquitity.

<comment><USER18> In software, we can generally agree that too many layers of abstraction introduces many issues since it is difficult to ensure each layer is perfect. For this imperfection we often pay a price: performance, maintainability, etc. However I think that often this imperfection is unintended and is a consequence of trying to make things better.

In the finance world, and particularly with mortgages, there are similarly many layers of abstraction but each layer has an imperfection built in: money.

Your mortgage, after its gone through all these layers and after everyone had extracted their pound of flesh from its value along the way ends up looking nothing like the original product. It might end up as a resecuritized security based on only the interest portion of a pool of loans or some other abomination. Just like a JavaScript application is a completely different beast from the the x86 asm executing on your CPU.

However, in software these layers exist to try to make things better. In the finance world these layers exist to only make money. To extract value from one place and move it to another. These layers don't need to exist in this form but they do because they make people money. This is the lie.

Despite this, we can't just remove all these layers at once but maybe we can remove one layer. Just like you wouldn't rewrite your nodejs server in asm but might drop down to Go or something.

Alternatively you can say, "hey I don't need this website so badly so I'm just going to not build it" and not play. Or maybe you have the time and inclination to build it "from scratch" from assembly.

Starting with a plot of land and only the money in your pocket reminds me of the true hacker spirit! :)

<comment><USER14> Layers exist in finance for the same reason layers exist in programming: because value is being provided. Or, at least, that's what the Efficient Market Hypothesis would say. Maybe you can't see the value as an outsider, but you know, Chesterton's Fence. Only when you see the value of the current system should you be allowed to change it.

Using the example of mortgage backed securities, they were created to solve real problems. Mortgages carried risk, were too unique. Also money had a hard time reaching those who needed mortgages. Most mortgage providers were local and often there were too many people who wanted mortgages and not enough money, or the other way around. By packaging mortgages together, you could reduce risk and sell traunches nationwide.

TLDR: understanding is a prerequisite of change. And just like software, if you can't find a reason for why something exists you should probably look harder. More likely than not, you are the one who doesn't understand, not the person who created the thing in the first place.

<comment><USER18> I traded CMO derivatives for several years at a broker dealer that specialized in MBS and other fixed income products. I'm intimately familiar with the system and stand by my analogy.

<comment><USER14> I work as a derivative quant/trader in EM (mostly fx swaps and such) and think that the broker-dealers I transact with provide value. Otherwise, obviously, I wouldn't need them! This may be a little controversial, but in most cases, being paid means you provide value. And when this isn't true, it almost always has to do with government regulation.

Anyways, while I don't have any experience with MBSs, you were probably providing value even if you didn't think so.

</comment></comment></comment></comment></comment></comment><comment><USER19> What would happen if you transferred your student debt to a credit card and then declared bankruptcy?

<comment><USER20> You are unlikely to get a high enough credit to cover student loan debt if it is high. Else everyone would be doing it. Personal loans and HELOCs are even cheaper and hard to get with bad credit.

<comment><USER21> > You are unlikely to get a high enough credit to cover student loan debt if > it is high. Else everyone would be doing it.

Well, no, because bankruptcy isn't an option most people want to pursue, and personal unsecured credit is far more expensive than student loans with the same principal unless you discharge them in bankruptcy.

</comment></comment></comment><comment><USER22> I have a pretty unique last name, and am completely oblivious to bills. Accidentally stopped paying a credit card after an emergency and the law firm that sued me employed a cousin I still haven't met. Still laughing after paying that one off

</comment><comment><USER23> Where ex.act.ly can I buy consumer debt?</comment>


The Deletion of gcj - <AUTHOR> http://tromey.com/blog/?p=911 <comment><USER2> This is a little sad because this means we will have to keep around old versions of GCC with GCJ in order to be able to bootstrap the JDK from source (without a binary bootstrap JDK). Only OpenJDK6 (with the extensive IcedTea patches) can be bootstrapped with GCJ alone, so we also have to keep OpenJDK6 around in order to be able to build the latest JDK.

Bootstrapping becomes harder and more legacy software needs to be accumulated in order to actually build new software from source.

(I'm working on GNU Guix, a functional package manager, and I wrote the package definitions for the JDKs.)

<comment><USER3> As someone who worked on porting Microsoft .NET Core to new platforms, that's definitely a pain I felt.

At first, very few assumptions was made about the Unix bootstrapping process, and the mantra was that you should build the managed components on a Windows machine which already had .NET.

Just to get _something_ going, the Unix community decided to use mono to bootstrap the process on non-Windows platforms. This effectively meant you could bootstrap .NET Core on almost any platform where mono was around. That gave quite some platform reach out of the box, and on overall an improvement much welcomed by Microsoft.

But later, after Unixes like Linux and OSX become better supported, the bootstrapping method changed to downloading a _previous_ build of .NET Core for the current platform and using that to build the latest sources. I.e. going self-bootstrapping, which sounds fancy on paper.

The cost of that? Suddenly it just wasn't doable (without considerable knowledge and effort) to bootstrap .NET Core from source any more on platforms not currently considered first class.

I'm not just talking about "strange" outlier OSes like FreeBSD, NetBSD or Alpine Linux or whatever. Just trying to build for Fedora 24 (which doesn't have published packages) fails. This is because the Fedora 23 packages are linked against library-versions which are no longer in Fedora 24.

You'd think that be easy to fix, but now, even with Fedora 25 betas starting to ship, there's _still_ no official Fedora 24 package exists from Microsoft, so Fedora users (and developers, and porters, etc) are SOL.

So now basically just trying to bootstrap for a previously supported mainstream Linux-distro is seriously PITA, next to impossible. In my honest opinion that's a _major_ regression just for the sake of being self- bootstrapping.

So yeah. You should never underestimate the value of having secondary platforms available for bootstrapping your own. You may come to depend on it.

<comment><USER4> > I'm not just talking about "strange" outlier OSes like FreeBSD, NetBSD or > Alpine Linux or whatever. Just trying to build for Fedora 24 (which doesn't > have published packages) fails. This is because the Fedora 23 packages are > linked against library-versions which are no longer in Fedora 24.

This sounds like more of an issue with Fedora than anything else. If Fedora 24 can't run programs for Fedora 23 (not ancient programs that happened to work on Fedora 23, but programs that were specifically built for Fedora 23), that's pretty ridiculous.

<comment><USER5> Fedora maintains binary compatibility within a specific release, but major versions of software are updated every 6 months and if the ABI is different a soname bump will happen. Unless software in the Fedora repositories flat out will not build or run with a newer ABI-release of a dependency older versions of the library aren't typically packaged.

In all honesty it's virtually never an issue, most libraries maintain _API_ compatibility and everything gets a mass-rebuild before alphas start to ship (though everyone tries to notify affected maintainers when they are going to do a soname bump on the mailing list) - so as long as you don't depend on old libraries for _bootstrap_ of new package versions it's fine. There's plenty of compilers in the repositories that bootstrap themselves every release without giving grief, so Microsoft needs to either provide an external bootstrap mechanism again or reduce the dependencies needed to get it bootstrapped to preferably nothing more than glibc.

</comment></comment></comment></comment><comment><USER6> It was used for creating the native builds of XWT [1] 15 years ago. At the time I found it amazing to see Java programs becoming native (a lot snappier and generally faster too). It seemed (naively) to be beyond what was possible.

However, the main problem with GCJ was it used conservative garbage collection - boehm GC - and as such was fundamentally broken for long running programs (what java is good for). Without wanting to denigrate it too much, it seems to me that a lot of 'good' work has been put into this approach which was essentially a cul-de-sac.

I had a related rather general thought recently about documenting features in projects. Sometimes the hardest thing to know is whether something is in fact a good idea or not (both in theory and in practice) and the amount of effort/quality of documentation is probably not a good indicator of this. So in the case of the GCJ garbage collector, there was always a lot of talk about how clever the garbage collector was and all the technical aspects, but unless you were already an expert, how would you know if it was infact a good idea or not.

[1] That is this one, there are several now doing similar things (!). [http://www.xwt.org/](http://www.xwt.org/)

The code lives on here [https://sourceforge.net/projects/vexi/](https://sourceforge.net/projects/vexi/)

<comment><USER7> Anyone know if gcj ever experimented with a precise GC? Or did the design of GCC simply not allow for a non-conservative GC implementation?

<comment><USER8> Historical. We implemented the Bohm GC at Cygnus, funded by Metaphor back around 92/93 if I remember. GCC is / was very conservative.

</comment></comment></comment><comment><USER9> This is why you should always create something, even if you think it will never be accepted by a large audience. It is worth it for the journey itself.

Reading this post made me wish I had spent more time with 'gcj'. Though in all honesty I know I gave up on it because I didn't want to go the tougher way - the the normal JDK was just there. Creation is beautiful, and its ending bittersweet for the creator and the witnesses.

<comment><USER10> I live in the moment! Enjoy and cherish those magical times when the work is right, the team is right, and you're having fun. Don't let the stupid stuff bother you.

You can rebuild teams like that, find those projects, etc.. but it feels like an eternity when you've had it and then don't have it for a while.

</comment></comment><comment><USER11> [http://openjdk.java.net/jeps/8166089](http://openjdk.java.net/jeps/8166089)

One Java AOT option goes away, and a new one is arriving.

<comment> iso-8859-1 Hopefully the new one can replace RoboVM as well...

<comment><USER12> I'm afraid the job of the new AOT is not to produce standalone binaries - it's code to be loaded into the JVM, not to run without it.

</comment></comment></comment><comment><USER13> GCJ was deemed obsolete in 2010, amazing that it was still around until now...

[http://stackoverflow.com/questions/3032727/java-jre-vs- gcj](http://stackoverflow.com/questions/3032727/java-jre-vs-gcj)

Did anyone used GCJ for something in production?

<comment><USER14> I evaluated gcj to use in a shareware desktop application in the 2000's. The goal was to compile java + SWT into native binaries for distribution. The goal was a slim installer that didn't require the user to futz with installing java, or bunding a jre. Ended up going with Excelsior JET which is a fantastic project.

In the end, the full java spec doesn't lend itself to aot, because if you claim to be "real" java you have to include support for runtime classloading, which means there has to be a bytecode interpreter embedded in there somewhere. My thoughts are now, if you really want a java/c# style aot language, vala is the way forward.

<comment><USER15> C# fully supports AOT since a while.

<comment><USER16> I'm pretty sure that C# AOT does not eliminate the need for a JIT in the runtime system. Just as one example, how could expression trees be implemented without one?

<comment><USER17> You cannot use them.

In .NET Native you have to explicitly inform the compiler of any kind of reflection behavior you might require.

<comment><USER18> Not quite right. Mono has the lovely mkbundle tool which can do what the poster wants: AOT your intermediate/byte code and build a statically linked executable containing your app, the runtime, and all your deps (except for key system dynamic libraries like libc or Security.framework, similar to how go works).

No restrictions on reflection, unlike .NET Native (which has slightly different design goals).

I've used it many times for just this reason with great results. Plus, the runtime was re-licensed to MIT/X11.

<comment><USER17> My .NET experience is only on Windows, thanks for the clarification.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> What a shame about gcj being dropped. I remember using GCJ with CNI to interface with native C++ code was a much more pleasant experience than using JNI.

[https://gcc.gnu.org/onlinedocs/gcj/About-CNI.html#About- CNI](https://gcc.gnu.org/onlinedocs/gcj/About-CNI.html#About-CNI)

</comment><comment><USER19> It seems the most beloved feature of GCJ was its ability to compile Java to native code.

Is this something that could be implemented in the Java JDK / OpenJDK? Understandably a lot of work, but Oracle is looking at AOT now, for performance reasons.

The performance improvements could be taken even further by something like this, Java to native code compilation.

</comment><comment><USER20> Google cache: [http://webcache.googleusercontent.com/search?q=cache:zFK8UNR...](http://webcache.googleusercontent.com/search?q=cache:zFK8UNRnBpkJ:tromey.com/blog/%3Fp%3D911)

</comment><comment><USER21> gcj being killed means someone needs to reimplement pdftk in... well, something else. D:

<comment><USER22> Indeed, that was my concern as well.

The best solution is probably to replace the C++ bits with Java, and go full JVM.

<comment><USER21> Yep. I recently had to get pdftk running on an old Centos-or-whatever system, and that ended up being a big fat no-go, so I reimplemented the functionality we needed from pdftk (filling forms) with just Java: [https://github.com/akx/foofdf](https://github.com/akx/foofdf)

</comment></comment></comment><comment><USER23> Not directly related to topic, has anybody used Excelsior JET to compile Java apps to native code? How was your experience? Did it improve the start up time of the app? Did you find it any faster than using a JVM?

</comment><comment> fake-name I skimmed the article, and all the comments here, and I still have no fucking idea what "gcj" is. It's apparently related to java. Maybe at least define your acronym once?

<comment><USER24> Yeah, I mean, it's just incredibly hard to go on Wikipedia and look up "gcj". All I got was this extremely informative page about an open source java compiler: [https://en.wikipedia.org/wiki/GNU_Compiler_for_Java](https://en.wikipedia.org/wiki/GNU_Compiler_for_Java).</comment></comment>


AT&T security breach exposes emails of 100,000+ ipad owners - <AUTHOR> http://techcrunch.com/2010/06/09/att-security-breach-exposes-thousands-of-ipad-owners-emails-but-luckily-little%C2%A0else/

<comment><USER2> The title is a little bit misleading: Only the email addresses of the owners were reveiled. Not the content of any emails.

</comment><comment><USER3> here is the source of that code: <http://gist.github.com/432615>

</comment><comment><USER4> This is why AT&T needs to start carrying more Android phones... :)

<comment><USER5> Issue was with the AT&T website, not the iPad.</comment></comment>


The Future of the LispM - <AUTHOR> http://arrdem.com/2014/11/28/the_future_of_the_lispm/ <comment><USER2> LISP machines failed for a number of reasons, only some of which are LISP- related.

The Symbolics refrigerator-sized LISP machine was one of the most expensive single-user machines ever built. It was designed as the ultimate hacker toy, with a MIT Space Cadet keyboard.[1] Price/performance wasn't that great. Reliability was poor. Service was awful, because it needed on-site servicing and Symbolics didn't have enough local offices. The original garbage collector could take _hours_ , because the virtual memory and the garbage collector did not play well together. Symbolics as a company was quite arrogant. They had the attitude "We are the one gateway to AI".

Soon, LISP compilers for UNIX workstations were written, and Symbolics lost their exclusivity. Later Symbolics products were better, but unnecessary. Around that time, the expert systems bubble deflated. So did the LISP industry.

(I once did a lot of work in LISP, but mostly on Franz LISP on Sun workstations. I used an early Symbolics refrigerator briefly. Cool, but inefficient.)

[1] [http://en.wikipedia.org/wiki/Space- cadet_keyboard#mediaviewe...](http://en.wikipedia.org/wiki/Space- cadet_keyboard#mediaviewer/File:Space-cadet.jpg)

</comment><comment><USER3> Some basic misunderstanding here: "However, as a stack machine architecture, there is no opportunity for the instruction level parallelism exploited by modern architectures as the exact state of the stack which is depended on by every instruction changes with every instruction. This forces all program execution to wait during slow operations like main memory reads, ..."

This is of course nonsense. Even an in-order implementation with non-blocking caches will let execution proceed in parallel with a load until the result is demanded. An actual out-of-order implementation will rename the (implicit) registers and proceed as normal.

The _only_ issue with stack architectures is that they are awkward (but not impossible) for compilers to generate optimized code for.

EDIT: I agree with basic motivation for pushing all the way to hardware (just not for Lisp). That's why I work on [https://github.com/tommythorn/Reduceron](https://github.com/tommythorn/Reduceron)

</comment><comment><USER4> Author here.

Oh. HN frontpage. That's cool I guess.

Well I have plans for today, so I'm sorry that I won't be sitting here defending my article.

However if you hit me up on twitter at the link at the bottom or email me at my listed email address I'd be more than happy to respond and debate this piece in due time.

Cheers! Reid

</comment><comment> white-flame The cache locality of linked list cells is a red herring. Garbage collectors seek to keep chained cons cells consecutive in memory.

Also, does the author not understand that most Common Lisp implementations are already built on assemblers implemented in Lisp, generally with portable intermediate representation DSLs generating native machine code?

<comment><USER5> The big lesson of performance computing has been this: if you have a garbage collector, you lose! Once you surrender control of how memory gets used to a GC, you WILL take a performance it. If you need to crunch through lots of data items and do it fast, use C++ and std::vector.

<comment> white-flame If you have a constrained situation such that the iteration is known over a range of fixed-type consecutive data, any language should be able to generate the exact same optimized assembly as a manual C++ vector iteration.

Also, if it's large and you're bound by compute time rather than memory bandwidth, iterating a single vector will be slower than splitting it up between threads.

Also, if your data to work on is being streamed in, having to make the choices in managing the allocations & uses of std::vector buffers is much less useful than having the system heuristically balance in a more managed environment.

So, no, C++ std::vector isn't a silver bullet except for microbenchmarks, where other languages can (or should be able to) match. And vector iteration has nothing to do with GC.

<comment><USER6> "any language should be able to generate the exact same optimized assembly as a manual C++ vector iteration"

This is absolutely, massively untrue. If you try making compilers sometimes, you will see how very hard it is for compilers to be sure about anything.

For example: Are you calling a function anywhere inside that iteration? Is this a copying collector? Could anything that function does (or anyone it calls) possibly cause a GC, or cause us to be confused enough that we can't tell whether a GC might happen or not? Then you need read barriers on all your operations in this function, i.e. your iteration is going to be slow.

"Also, if your data to work on is being streamed in, having to make the choices in managing the allocations & uses of std::vector buffers is much less useful than having the system heuristically balance in a more managed environment."

Also absolutely, massively untrue. Your application knows more about its use cases than the generic systems it is built on (which must handle many many different kinds of programs). Because your application knows what is meant to happen, it can make much better performance decisions.

<comment> white-flame Regarding iteration:

First, if something within an iteration calls out and performs memory allocation, well the first thing is that microoptimizations are likely to be dwarfed anyway. :) But most of the GCs I've worked with do not use read barriers. If a GC occurs which moves the iterated structure, all pointers to that area are modified and the iteration continues unaware that the movement has happened.

There certainly are benefits to read-barrier systems, for instance in idealized fully concurrent non-pausing GC, but they're certainly not universal. In particular, they're the vast minority in terms of Lisp systems. (Of course, they can be zero-overhead in a LispM.)

Regarding heuristics:

Yes, I should convey a bit more context. In Lisp development, it's hard to draw a line where the environment stops and user code starts. Plus, my thinking is from heavy server deployments, not tightly fixed-path systems like games & supercomputing, where the universe of possibilities through a code path tends to be smaller and manually manageable.

If scalability, workloads, and execution environments wildly vary, predicting best performance via hand-tweaking and enumerating particular situational decisions quickly diminishes returns and even ends up regressing performance. Unfortunately, this reflects a lot of C family programming styles. I've moved way too many systems (even in C++) away from such designs into a "just code your application, let the system worry about how to optimize it" and have seen performance improvements, as well as code size collapse and far better status awareness.

<comment><USER6> Look, what you are saying just doesn't work. What happens when the pointers are in registers? What happens when the loop is occurring in a thread running on another core?

Yes, you can make GC work in these situations, but you are going to pay for it. In perf.

I have to say frankly I do not believe any of the words in your last paragraph at all.

<comment><USER7> It is conceptually very simple: the GC stops the mutator threads while compaction is in progress and objects are moved around; throughput-focused GCs generally do that, better ones do it in parallel with multiple GC threads.

This has an obvious impact on performance that needs to be compared with the mutator calling malloc/free in a non-GC system. The function isn't called "free" because it runs in zero time, you know.</comment></comment></comment></comment></comment></comment></comment>


Show HN: Terraform module for deploying Docker containers to any Cloud VM - <AUTHOR> https://github.com/christippett/terraform-cloudinit-container-server <comment><AUTHOR> I've been playing around with a few different self-hosted PaaS offerings (Exoframe, Caprover, Dokku et al), but nothing quite hit the mark. I ended up bootstrapping a small VM using cloud-init and found it worked seamlessly across all the major cloud providers with little to no vendor specific code - cloud-init is pretty neat! I ended up creating a Terraform module for deploying Docker containers + Docker Compose files and I'm pretty happy with how it turned out.</comment>


Man, stranded in the desert, makes a motorcycle from his broken car - <AUTHOR> http://hackaday.com/2012/05/21/man-stranded-in-the-desert-makes-a-motorcycle-from-his-broken-car/ <comment><USER3> I understand why people are calling 'hoax' on it, but it is really possible, especially given that area of Morocco has an average temp of about 18C according to the internet. If he built himself a shade from the shell as the first stage he'd be pretty good for surviving the aspects of dehydration.

Plus anyone who's ever been near a 2CV know you could probably drill through the metal with a pencil if you tried hard enough.

Edit: some more info on why it's possible.

\- 2CV weighs roughly 560kg, they were built to save weight all round so the body panels, frame work and mechanical components were built 'light' (read thin, no carbon fibre here).

\- The engine will have been heavy, but it's a relatively small simple block, it won't have been easy but "give me a fulcrum and I will move the world". It's doable, I'm pretty sure if I bug the petrol heads I know I'll find one who's done it on something similar or tell me how it's done. Edit: brohee (<http://news.ycombinator.com/item?id=4008052>) posts that the engine is 66kg, which isn't super ridiculously heavy. Find someone who's around that weight and see if you can pick them up.

\- If you're going on a desert holiday, taking water is a smart idea. 14 days water would be about 8/9 gallons for a man weighing 12 stone (I think, unless the 'recommended minimum water per day' calculation I found is useless). That seems like a lot, it's about 4 of the jugs used on water coolers, so he might have rationed it out and had less.

To round it off for you naysayers: <http://citcity.citroen1.info/2CV/water.htm> if multiple people can make boats out of them to race about a local lake there's every possibility someone could figure out how to make a bike.

(and yes, I'm locked into a 2CV research spiral now)

<comment><USER4> The hoax people are calling surround the fact he somehow fabricated a motorcycle from his car with a broken swing arm, but couldn't simply fabricate a new or fixed swingarm.

<comment><USER3> From the people who've read the French that's not the only thing that was broken.

GitHub is littered with people who came up with crazy solutions rather than fixing the problem in the existing. Hacking is not limited to just software.

<comment><USER5> I wonder how many otherwise intelligent people died reinventing the wheel before before they were able to do it from the safety of civilization.

<comment><USER3> Possibly thousands, with the propensity of wheels for exploding.

In a more serious note that's the benefit of living in our civilisation, we can experiment and do what we want to even if it has no measurable long term or commercial benefit. Or if someone got there first, why not have a go, could pay off (for example, SpaceX had a go)

</comment></comment></comment></comment></comment><comment><USER6> So, I'm a french native and I read the story. Here are simple facts:

\- it's from 2003, and at the time all the magazines were talking about it - <USER2> don't remember it.

\- the guy was a few tens of kilometers of a city/village — he could have come back on foot in less than a day, but chose to stay to protect his car (haha ! ;-)) and his equipment.

\- He had lots of resources (food/water), so he decided to stay, and build the project he probably have been dreaming for a long time.

\- the guy wasn't a newbie in mechanics and knew the car (a very well known french brand) by heart. He also happened to have all the tools necessary in his car.

<comment><USER7> Correction: the events took place in 1993 but it was published in 2003. (see <http://chameaudacier.free.fr/moto1.html>)

</comment></comment><comment><USER8> For all the people expressing doubt, please:

\- read the original story [1], in full. Google translate is your friend if you can't read French.

\- find out a bit more about the 2CV car before commenting. It really is a very simple vehicle.

Ovi256's explanation [2] also gives a bit more context.

This story is emminently believable. And an impressive hack!

[1] <http://chameaudacier.free.fr/moto2.html>

[2] <http://news.ycombinator.org/item?id=4007857>

<comment><USER9> <http://french.cars.free.fr/moto2cv/index.htm>

is a much better article about what was really done.

</comment></comment><comment><USER10> I hope Myth Busters read HN. This would be a good one: Can you take a 2CV and turn it into a motorcycle and river-crossing barge.

<comment><USER11> 2CVs where the first cars I ever stripped apart .. you can see in the pictures where he has one of the drive shaft brake hubs strapped up and the other side is placed in direct contact with the wheel to drive it .. simply genius. No question this is real and would work .. however the jury is out on it being constructed in the desert in 12 days .. but I'd put my money on it being true.

<comment><USER12> The concept of transmission by friction with the tire comes directly from the Solex, another highly hackable vehicle that any young Frenchman born between 1930 and 1980 would be quite used to: <http://en.wikipedia.org/wiki/Solex>

</comment></comment></comment><comment><USER13> A lot of people seem to be extrapolating "stranded in the desert" into a scene out of Survivorman or some Hollywood movie or The Little Prince.

Alternate title: "Mechanic camps not far town, repurposes broken car as motorcycle"

</comment><comment><USER14> Even more amazingly, he made a boat from another broken 2CV on another occasion in Africa. My, those 2CV's sure do break a lot.

<http://chameaudacier.free.fr/bato1.html>

<comment><USER15> I'm starting to get the picture here. Emil Leray just happens to serendipitously have the tools available to convert a 2CV to whatever he needs at the moment. I thought we would have to wait for nanotechnology for this to happen, but apparently Citroen got there first with the 2CV.

I think we've found the solution for lunar colonization: we'll launch Emile into a moon orbit with 5 or 6 2CVs and let him figure it out from there. Only downside: official language of the moon will be French.

<comment><USER16> This has already occurred, is just that the French are keeping it secret until they have finished the final alignment checks on the giant laser. I think they plan to unveil it for the London Olympics by burning the words Vive la France onto Boris Johnson live on TV during the opening ceremony.

</comment></comment></comment><comment><USER11> From memory the 2CV had brake drums attached to the gearboxs differential CV shafts, you can see this in the pictures and he has strapped one up which puts all power into the other side allowing him to drive the wheel by placing the brake drum in direct contact with the wheel.

Later version of the 2CV had discs .. I wonder if it would have been possibly if he had that configuration.

</comment><comment><USER17> If happen to have the tools to turn you car into a friggin' motor bike in the middle of the desert, wouldn't it have been easier just to fix whatever went wrong on the car in the first place?

<comment><USER18> The swing arm and one of the two main structural parts of the chassis broke. He'd want to have a welder with him.

</comment></comment><comment><USER19> I have to admit, I had a shred of doubt. Though I can see myself doing this exact project. I would absolutely add the kick stand and license plate. He probably also wanted to make it look cool.

Camping in the desert isn't outrageous either. Anyone that's spent a week at Burning Man tinkering with art cars and construction projects can appreciate the challenge. You're there with a partial tool kit, enough water for 10-12 days, and appetite for a creative project. The one thing out of my comfort is the "war zone".

</comment><comment><USER20> When I read this I just thought (assuming he couldn't just Macgyver the original problem) why didn't he just dig a hole, bury the 'expensive' tools, walk back to civilization, buy the spare part, return, fix, dig up tools, be on his way!

<comment><USER21> There's no spare part when you break the frame of a car. Burying is probably an option, as was probably just pushing the damned car the 10km distance (<1km a day over twelve days).

Then again, he did think, in classic programmer units, that it would take only "three days" to make it work.

</comment></comment><comment><USER19> It looks like it would perform very poorly (a bit like a recumbent tricycle project I abandoned.) It has a really long wheelbase and a lot of weight up high. I bet the steering was less than ideal too.

I wonder if he would have been better off keeping the front axle/engine assembly intact and adding a single trailing wheel.

</comment><comment><USER22> The man just happened to be named Tony Stark.

<comment><USER23> Reminds me of _Flight of The Phoenix_ more than Iron Man

</comment></comment><comment><USER24> The guy actually got a ticket for riding a vehicle which is not conform with the local legislation ;-) <http://chameaudacier.free.fr/pv.jpg>

That pic is so funny, don't miss it: <http://chameaudacier.free.fr/moto8.html>

That would be a great subject for analysis by the owner of this blog I like to read: <http://www.hackerfactor.com/blog/>

</comment><comment><USER25> I'm having trouble believing that one person can accomplish this in 12 days with few tools could disassemble a car and build something even remotely drive-able without a welding torch, engine jack, and countless other tools. Was he stranded in the desert in the way that I imagine?(no water, sand dunes everywhere) Or did he end up in some desert town that had basic facilities for him to do this type of work?

Even the most skilled machinist would have a tough time doing this. Seems implausible.

<comment><USER26> A Citroen 2CV is pretty much tinfoil with an engine attached. It's definitely feasible even with hand tools.

With respect to survival, if you head into a desert, you take supplies galore. The 12 days was probably due to the heat so you can only work at dusk/dawn and seek shelter during the day to conserve water/rations. 2CV is very simple and can carry a lot of stuff. It's nearly ideal.

I take a 72 hour pack and am happy doing 50mi+ on foot if i go more than 10mi from home after a couple of experiences being stranded in rural areas in the UK. Imagine what that guy was carrying in the desert!

</comment></comment><comment><USER19> BTW, this would be an awesome event. Everyone camps in a desert with a 2CV (or collection of parts) take a week and have a race/parade back to some location.

<comment><USER27> This event has a similar spirit: <http://www.4ltrophy.com/> (french) / <http://en.wikipedia.org/wiki/4L_Trophy>

They're using Renault 4s, and it's not mainly about hacking, but still.

</comment></comment><comment><USER28> Looks like something out of Mad Max or Water World. It sounds like a hoax just by the fact - why didn't the guy just fix the car instead of building a motorcycle? Also, don't think he followed the desert survival guide (1):

"Stay as hydrated as possible before going out.

Take along food that packs the most nutrition in the least size and weight.

Wear wicking fabrics with a UPF of at least 30 as a base layer, and take along one warming layer (wool or fleece) and one windbreak layer.

Many deserts are prone to dust storms - protect yourself.

Travel at night when possible.

Try to stay as warm as possible at night.

Be wary of nocturnal animals that can harm you."

Typically you are meant to stay with the vehicle.

<http://www.wikihow.com/Survive-in-the-Desert>

</comment><comment><USER29> By the way, it seems he used the reverse gear, which means there would be no need to shift.

<comment><USER30> If I'm not mistaken, the only reason you don't have to shift a reverse gear is just because there's only one of it (you're not supposed to be able to do 150mph in reverse in a car that can do 150mph normally).

If you had a one-speed car, you wouldn't have to shift gears if you were in "forward," either.

</comment></comment><comment><USER31> Also, I would like to add to the general skepticism. A kick stand? Really?

<comment><USER32> He even took the time to attach a license plate again: <http://chameaudacier.free.fr/moto3.html>

Something tells me this was planned.

<comment> mkr-hn The last thing you want after a 12-day ordeal in the desert is a four-hour wait at the DMV to get a new plate.

</comment></comment></comment><comment><USER33> Supposing it's a true story, here's the region where he took his 2CV off-road: [http://maps.google.com/maps?q=agadir&hl=en&ll=28.294...](http://maps.google.com/maps?q=agadir&hl=en&ll=28.294103,-10.991135&spn=0.549587,0.611115&sll=33.85217,-4.801025&sspn=8.289195,9.777832&t=h&hnear=Agadir,+Agadir- Ida-Ou+Tanane+Province,+Souss-Massa-Draa,+Morocco&z=11)

Looks deserty to me!

Plus, his 2CV was loaded with tools, and they are really quite simple mechanically....

</comment><comment><USER11> When I was young, I really really wanted a motorbike and at the same time my dad collected 2CVs which for some I would strip for parts .. this guy would have been my hero back then.

</comment><comment><USER34> vladsanchez is right, but he's been hell-banned, so I'll rephrase his comment:

This is the sort of thing that would make a great Mythbusters episode.

</comment><comment><USER35> would be awesome if it was true

<comment><USER36> What makes you think it is fake ?

<comment><USER37> It's very likely that it's fake. It's very difficult to survive in the desert for twelve days, even if you have adequate water, let alone survive _and_ find the energy to build a motorcycle, as rudimentary as this one might be.

Finally, in a few of the pictures the supposed engineer of this contraption is shown in a thong. I don't know about you, but if I were in an arid place the last thing I would want is my skin exposed to sun and the air.

It may be a real motorcycle, and that's cool, but it's very unlikely it was built under the conditions discussed in this article.

<comment><USER38> "It's very difficult to survive in the desert for twelve days..."

My co-founder survived in the Desert for 52 days after crossing the Gobi Desert entirely on foot in 2011. Not all deserts are 50C every day and explorers can be quite hardy. Also, they often wear clothes to cover all extremities, including gloves to cover fingers.

<comment><USER37> Not all deserts are 50C every day, but all deserts are _dry_.

<comment><USER5> He had supplies with him. He wasn't living off the land.

<comment><USER39> Yes, after eating his photographer he called the front desk to extend his stay until the licence plate and kickstand were assembled.

</comment></comment></comment></comment></comment></comment></comment><comment><USER40> Credibility of this is very doubtful indeed. Even if the 2CV was easy to deal with mechanically, the task of doing this in itself is a challenge in the middle of the desert. Add to that he didn't plan on breaking down and had tools + food/water to last him the trip. Then you take the precision of the work itself. He even bothered to add a license plate and he managed to level it as well.

</comment><comment><USER41> As a long-time fan of Junkyard Wars, I approve :)

</comment><comment><USER42> Was the guy an RC motorcycle designer?

</comment><comment><USER43> The part that sets off my incredulity here is that the whole purpose was "he had a lot of tools that he didn't want to get stolen." I have a hard time believing that bike can hold more tools than one could carry, or otherwise drag with a simple sled.

<comment><USER44> The picture suggests to me that the "bike" if you could call it that is actually more of a two-wheeled open car. The changes are remarkably minor. I suspect it could hold the tools just fine.

</comment></comment><comment><USER45> If that picture above article is the motorcycle...then that guy sure didnt build it to survive.... I mean why would you need a standard??? (im reffering to the thing that keeps it standing straight) that doesn't work well in sand either,

</comment><comment><USER46> I want to believe.

</comment><comment><USER47> There's a (very short) video of someone riding it near the bottom of this page on the adventure rider forums:

<http://www.advrider.com/forums/showthread.php?t=773613>

</comment><comment><USER48> What makes it seem fantastical is not the facts of the story itself, but that it's so similar to the plot of a 1965 Jimmie Stewart movie -- and seems to make no mention of this.

</comment><comment><USER49> +1 for a true hacker!

</comment><comment><USER50> MacGyver would be jealous!

</comment><comment><USER51> The part that made me dubious was that he had sufficient hacksaw blades and a rat-tail file, but no hand drill. I'm having a hard time thinking of why one would pack blades and a file, but no drill...

But hey, I figure this is the type of guy who knowingly puts himself into risky situations with sub-par transportation for the sake of testing his own resourcefulness. I do that sort of thing, too.

<comment><USER52> This was 1993. Battery powered hand drills may not have been so common. They certainly wouldn't have been so cheap.

<comment><USER53> Hand drill: [http://www.garrettwade.com/a-real-solid-hand- drill/p/89B04.0...](http://www.garrettwade.com/a-real-solid-hand- drill/p/89B04.01/)

They are human powered.

</comment></comment></comment><comment><USER54> lol, one simply can't move that engine by himself...

<comment><USER9> Weakling.

A 2CV motor is at most (later versions with 600cm3 motor) 66kg heavy.

See <https://fr.wikipedia.org/wiki/Moteur_de_Citro%C3%ABn_2CV></comment></comment>