When is visual programming too visual? - <AUTHOR> http://removingalldoubt.com/programming/2015/07/30/a-touchy-subject/ <comment><USER2> The MSFT Visual .NET tools are probably the most visual you can get and still be productive.

One of the things I really like about beginners having interface builders is that they can bridge the context between the code and the user interface in a way that is more meaningful than you get out of even web applications. To get started building interactive prototypes, you can draw first and flesh it out later, vs. learn how to draw in markup/code and then learn how to glue it together.

Some of my earliest memories of finding real accomplishment in programming were using Visual C++ and Visual Basic. While I had written a ton of absolute crap in BASIC and C before, the toy projects were relegated mostly to scripts and whatever text or ANSI interfaces I could dream up. I felt like I had made something accessible to other people. Also, my UI design skills got 1000 times better when I had an easy, accessible way to approach user-oriented design simultaneously with the behavior, and it helped me better learn how to divide my code up in ways that made sense.

<comment><USER3> Oddly enough, Visual Basic (and before that, HyperCard) got me over the hurdle of understanding OOP, because I got to _use_ objects before I had to _create_ them.

</comment></comment><comment><USER4> The ultimate dream of visual programming cannot work, at least not at present because we lack the models to represent software adequately using visual schematics.

Consider electronics. One engineer can create an electronics schematic and hand it to someone else who will build it and the second engineer will build what the first engineer specified. Right now, no such thing like that exists for software that isn't effectively a 1:1 mapping to source code. Flow diagrams and UML ain't it. And there's so much ambiguity in higher level diagrams (here's some layers, here's some lines, here's a thing that looks like a cloud) to make them only barely useful in describing software.

There is no standardized nor de facto schematic visual language of software that enables one human software engineer to specify the _design_ (not even the full implementation) of a software system sufficiently enough to be able to hand that off to other engineers to build and be successful and predictable at doing so consistently. And if we can't get a system like that to work with humans in the loop we really aren't going to do much better purely digitally. You _can_ program visually, but so often you end up spending more effort on minutiae than you would if you were coding textually, and so often you run into a very low ceiling where complexity becomes unmanageable.

P.S. Using interactive visual tools for things like UI design, that can be and always has been very beneficial, but that's a far cry from "visual programming".

<comment><USER5> When I look at functional programming, I see the building blocks of digital electronics.

Maybe that is the path we should take.

Create IC modules for apply, map, filter, fold, ... instead of adder, half- adder and so on.

I bet lots of lambda calculus programs could easily map to such constructs.

</comment></comment><comment><USER6> > It hurts when it tries to visualize something better left in code.

If you try to make a visual language as flexible as a general purpose programming language, it's going to be as complex and difficult to learn as any other general purpose programming language in my opinion. I think there's a fundamental limit to how simple you can make programming. Domain specific languages is a different beast however.

<comment><USER7> Just because no one had done it doesn't mean it can't be done. A lot of difficult in programming stems from how opaque it is. It is like doing a rubiks cube in a black box, taking a look inside, then putting the lid on and starting again.

<comment><USER6> I just think it's unlikely outside of domain specific problems. For example, flow charts and state machine diagrams can elegantly describe some algorithms but they have limited power which limits the complexity of the diagrams. If you want a visual language with programming features like function calls, state, threads, recursion etc. it's going to end up being of comparable complexity to just writing it in code in my opinion. Even visualising how a relative simple algorithm like quicksort works in an intuitive way is challenging let alone a fully working application. Happy to see examples that go against this though.

<comment><USER8> Visual languages are not good for representing complex state, but they're great for representing complex data transformations - often much better than textual languages.

If you want to transform the structure of an input file (or any stream) with a hierarchical structure to an exit file with a different structure, in a text language you need to build a parser following the data's grammar, and create a state machine that represents the required transformations, which is not an easy task.

With a flow language, you just draw an input component for each level of the hierarchy and list the data fields supported by that component; and then do the same for the output structure. The task is typically much simpler, as long as the task is pure data transformation and you don't need any side-effects during its execution.

<comment><USER6> > and you don't need any side-effects during its execution.

Have you seen any visualisations for pure functional programs? So they wouldn't have any state/side-effects but I can't imagine how you'd visualise those usefully unless you only used small concrete example inputs and showed the function being evaluated. It is very interesting how some types of algorithms can be visualised easily and others cannot.

</comment></comment></comment></comment></comment><comment><USER9> Visual programming mostly makes sense when your model implies some sort of flow of information. For instance, there are a lot of visual programming languages for materials/shaders in graphics visualization. In that context it totally makes sense, because it's about transforming a pixel buffer from one state to others via a lot of operations.

I think where it really breaks down is when you have loops. And loops within loops. Text is much more friendly for that.

<comment><USER8> I've programmed professionally in a visual flow language which supported loops, and you're dead-on about nested loops being the hardest part. My understanding is that the problem is caused by it being hard to think about the actual values on which each component is working.

I have this idea that this problem could be solved with a visual flow language where, at runtime, you could see the collection of all values that each node is emitting during program execution, rather than just the current value. I have not seen that approach in any flow language, so maybe I'll implement this idea in the future as an experiment.

</comment></comment><comment><USER10> GameMaker is my favorite visual programming language: You could insert custom blocks of Delphi but for the most part it was blocks of objects.

[http://dist.alternativeto.net/s/bbb84d61-31f2-de11-8cae-0022...](http://dist.alternativeto.net/s/bbb84d61-31f2-de11-8cae-0022190f5762_3_full.jpg?format=jpg&width=1900)

<comment><USER11> I loved GameMaker so much as a kid. I was sad to see it get taken over by money. :( Are there any modern free & open source alternatives?

Correction: I remember the underlying scripting language being GML (GameMaker Language). Maybe Delphi was embeddable into early versions of GameMaker? I also know that you could link plugins as DLLs...

</comment></comment><comment><USER12> AVS/Express [1] had a great visual programming system 20 years ago for building 3D visualisation systems. They called it the Network Editor [2]. It was very similar to the Unreal Engine Blueprint system. I've also played with MIT's Scratch environment, which is very visual too, but a little more like a traditional imperative language that the data flow connection style of AVS/Express or UE4 Blueprints. So I strongly agree with the author's contention that "there are some mistakes that are so appealing they will be made over and over again". Appealing because visual programming environments hold out the promise of enabling non developers to develop software. They do a good job of hiding the syntactic complexity of traditional programming, but they can't hide all the semantic complexity of objects, memory, stacks, variables, processes, threads, databases etc. But there is one functional, grid based visual programming environment that has been hugely successful in enabling end users to create their own software solutions: Microsoft Excel.

[1] [http://www.avs.com/solutions/express/](http://www.avs.com/solutions/express/) [2] [https://cdsweb.cern.ch/record/400582/files/p69.pdf](https://cdsweb.cern.ch/record/400582/files/p69.pdf)

</comment><comment><USER13> It is very confusing that two totally different things are called "visual programming". The first one does not really deserve it, it is just a visual UI design, while the programming part is nowhere near anything visual.

The real visual programming is not quite there yet, and may never deliver at all: it's the stuff like LabView, Scratch, DRAKON, etc.

Tha said Delphi managed to sit somewhere in between, a little bit, which makes it an interesting case.

</comment><comment><USER14> When maintaining the visual representation becomes more overhead than the textual representation.

</comment><comment><USER15> I think Unreal Engine 4's Blueprints are a bit "too visual". They're difficult to manage at scale and, if anything, make understanding the "big picture" harder than just writing out code.

<comment><USER16> I've been working a lot with something similar to Blueprints. We see it primarily as a way to allow non-coders to build a lot of the game logic. As programmers, we make reusable entities which are then connected to each other in a visual environment. Working in this environment requires little understanding of technical matters.

It's certainly not perfect. In practice, I quickly found that it adds a new level of obfuscation, due to the physical constraints of the 2D-space in which it is being visualized. In short, it easily becomes a mess of tangled connections and sometimes you may have difficulty physically locating the block you want to interact with.

Still, there's not a doubt in my mind that this is a great tool. Not a great tool for a team of programmers, but a great tool for a game studio as a whole. It allows designers and artists with limited technical knowledge to prototype game modes and develop user interfaces, without involving any programmers. Sure, they may need some help from software engineers who create new entities or guide them towards a cleaner design. The end result is still impressive: non-coders are building large parts of the game logic in a very intuitive way which requires no knowledge of code of any kind.

In essence, I see this type of language not as an alternative to writing code, but as an amazing tool allowing non-coders to to develop large portions of a program's functionality. Naturally, my own experience is essentially limited to the niche of game development. I don't know how useful this would be in developing, say, a website centered around an online shopping portal.

<comment><USER17> My experience is that stuff like blueprints is great for the smallest stuff only. Connect 3 switches to and "and" object. Connect "and" object to door's "open" input. If all 3 switches are pressed door opens.

But scripting anything more complex and especially user interfaces is awful. The designers will back themselves into all kinds of corners and there will be all kinds of edge cases not handled and subtle bugs and tracking them down is very very hard.

There was one company started by x-Insomniac people IIRC that decided there should be no designers scripting. All scripting should be done by programmers. Their experience was that trying to make programming easier for non- programmers sounds great, and it is for introducing people to programming concepts and enabling them to make things, but when it comes to shipping code it's not great and too much time is spent dealing with the mess of spaghetti they make.

Note I'm not harshly judging designers here. Great designers make great design. I'm only saying that experienced programmers are more likely to write efficient, maintainable, bug free code than non-programmers.

<comment><USER16> It's definitely not as simple as putting your designers in front of a visual programming language and then taking a vacation. They do need to be educated in some design principles and, whenever they don't know how to solve something, they'll fetch a programmer to help them.

In the end, though, when you have built up an existing team of designers and artists who know how to work in that environment, they can often train newcomers and help each other figure out some rather non-trivial stuff without it resulting in a terrible mess.

Also, the way it's used where I work, the majority of these tasks are essentially shoveling data between different parts of the system and hooking existing things up to each other.

</comment></comment></comment></comment><comment><USER18> We've been obsessed with this for some time. In the 1990s, Prograph CP/X was ahead of the pack in this space: [https://en.wikipedia.org/wiki/Prograph](https://en.wikipedia.org/wiki/Prograph)

I haven't tried it, but I was pleased to see that there's at least one current product that supports the underlying dataflow language: [http://www.andescotia.com/products/marten/](http://www.andescotia.com/products/marten/)

</comment><comment><USER19> I once had to do a project in LabView, where you either can go down the visual path or the C/C++ path. So you had to draw a switch statement or a while loop and attach a cable for the `while` condition. To get a feeling how this looks like: [http://etchingpathways.blogspot.de/2012/06/labview-event- str...](http://etchingpathways.blogspot.de/2012/06/labview-event-structure-vs- while-loop.html)

This was way too visual for me, once you got accustomed to writing code, checking it into your VCS.

<comment><USER20> Max/MSP is increasingly popular in music:

[https://cycling74.com/products/max/](https://cycling74.com/products/max/)

It looks like something people coming from a modular synthesizer background should be able to get.

In fact it makes a lot of simple tasks hard because something trivial like a loop takes an unexpectedly distracting amount of pointing, clicking, typing, dragging, and joining. The DSP and openGL parts aren't too bad, but hacking together non-trivial event and data processing logic can be torturous.

This is the big problem with dataflow - it makes you keep switching mental modes from visual object recognition to spatial understanding to text parsing/editing to causal modelling to UI design.

Text has its own issues, but it lets you stay in one mode.

I think VB and Delphi had a lot of success because they hit a sweet spot between the two. They let you solve visual and UI problems visually, and logic problems with code.

Webspace still doesn't have an exact equivalent. Flash came close, but the animation stage added an extra layer of complication. Most web design tools don't do a good job of simplifying and abstracting the relationship between onscreen elements and code the way VB and Delphi did.

<comment><USER21> > In fact it makes a lot of simple tasks hard because something trivial like a > loop takes an unexpectedly distracting amount of pointing, clicking, typing, > dragging, and joining.

That's because you don't create loops or if-statements in graphical programming languages, in the same way that you don't create loops or conditionals in functional programming; you use map, filter, etc.

</comment></comment></comment><comment><USER22> In short, the 'acutal' programming is NEVER visual. The best way to express commands to a machine is in a language by some syntactical text. Pictures are for children. Unless you are studying something inherently graphical, like trees, graphs, charts, you just need code to be as 'efficient' as possible. Usually a chart that does "If(X) then Y", takes just as much effort as typing that by hand.

</comment><comment><USER5> A Delphi blog with history insights!

Lots of great info, thanks for posting it.</comment>


Strange behaviour of CPU balance in t2.2xlarge AWS EC2 instance - <AUTHOR> http://stackoverflow.com/questions/42296511/strange-behaviour-of-cpu-balance-in-t2-2xlarge-aws-ec2-instance <comment><USER2> Wait, your paying $270 a month for a high CPU instance that isn't giving you 8 dedicated cores? WTF?

But seriously, this shouldn't be a Stackoverflow post, go ask Amazon, they are the service provider, they created this opaque algorithm that only they use for CPU credits, thus they are the gate keeper. Perhaps at quiet times (when your neighbors have low CPU) your baseline usage is a higher portion of the overall CPU use on that server.

Regardless, get off AWS, a dedi with better specs is under $50 and you'll not have to worry about CPU credits or noisy neighbors.

[https://www.lowendtalk.com/discussion/105114/dedicated- serve...](https://www.lowendtalk.com/discussion/105114/dedicated-server-deal- dual-hexa-core-32gb-ram-un-metered-bw-49-mo#latest)

<comment><AUTHOR> Actually we're paying a little bit more because it is a Windows instance :)

Admittedly we also find it expensive, but we try to balance off by making use of their infrastructure. Altogether we pay about half of what we used to pay when we had our servers collocated and we had a need for overprovising, so we still have a sense of saving money, at least for now (we migrated from collocated servers to AWS 6 months ago).

<comment><USER2> Why not just colo or rent a dual E5 box with 256GB of ram and a few SSDs? You'd get a much more reliable experience for a lot less than your paying, AWS's business model currently has them throttling CPU use very aggressively.

You could throw KVM or Xen on it and run Windows atop it pretty easily, plus depending on where you colo you could likely get some DDOS protection thrown in.

Alternatively, Subnet Labs, Vultr or any of the dozens of other providers that specialize in dedicated core VPSes could likely come in at somewhere around a quarter of what your currently paying, which would take you out of the loop for managing hardware entirely.

Have you asked Amazon whats going on yet by the way?

<comment><AUTHOR> Someone changed the original link for this thread to another link in Stack Overflow that actually explains the reason for the behavior. Strange but true.</comment></comment></comment></comment>


How the GPU works - <AUTHOR> http://c0de517e.blogspot.com/2008/04/gpu-part-1.html <comment><USER2> I might illustrate this as a flow chart. Would anyone be interested in that?

<comment><USER3> As the vote count for comments has now been removed I feel the need to reply with "Yes! Please!", however in doing so would not add anything to the wider community.

So... I'd also appreciate any timings you could add to better understand where bottlenecks appear in this flow chart diagram.

<comment><USER2> _any timings you could add to better understand where bottlenecks appear in this flow chart diagram_

I'll look into it. I need to contact the author & see if he's willing to collaborate.</comment></comment></comment>


Gogs: A self-hosted Git service written in Go - <AUTHOR> http://gogs.io/

<comment><USER2> [https://hn.algolia.com/?q=gogs#!/story/forever/0/gogs](https://hn.algolia.com/?q=gogs#!/story/forever/0/gogs)</comment>


Shared scooters don't last long - <AUTHOR> https://oversharing.substack.com/p/shared-scooters-dont-last-long <comment><USER2> This article is built upon a really weak assumption by the author. I can't seem to find the old reports they are referring to, because there are a ton of releases in that archive. There are a lot of reasons why the IDs could change every month. The average scooter being decommissioned after a month of use with $0 in recoupable costs seems highly unlikely.</comment>


Twitter is teetering because it has turned into one big pyramid scheme - <AUTHOR> http://www.theguardian.com/commentisfree/2015/nov/06/twitter-teetering-pyramid-scheme-social-media?CMP=Share_AndroidApp_reddit_is_fun?CMP=Share_AndroidApp_reddit_is_fun <comment><USER2> I think that this is the inevitable downfall of any online information source that doesn't have some kind of verification or moderation. People can pay for Facebook likes and Twitter follows and they'll continue to do so because it makes them money.

I know everyone's heard it on here, but this is also the same argument that gets thrown around Reddit all the time. People found that they can game the system for their personal benefit so Reddit, Facebook, Twitter, etc. get spammed by marketers. Marketing seems to be the common factor here.

When a social communications medium is co-opted by marketers, you can guarantee that the quality will go down and, by extension, the usefulness to its users. It's the same reason why everyone hates "Search Engine Optimization". It's not optimization, it's flat out manipulation and cheating and it makes "real" searches less useful.</comment>


Reader macros in Common Lisp - <AUTHOR> https://gist.github.com/chaitanyagupta/9324402 <comment><USER2> <rant> It's sad that clojure opted, for no good reason IMHO (ease of implementation, perhaps?), not to allow reader macros. I know, they claim that reader macros lead to "snowflake" code. But _this is lisp_. If you don't want tweakability, go back to Java. </rant>

<comment><USER3> Ease of implementation is an excuse for other things in Clojure as well, single pass compiler comes to mind.

But I would give up all of these for an interactive debugger. The series below shows how Common Lisp debuggers are light years ahead of the Clojure.

[http://malisper.me/2015/07/07/debugging-lisp- part-1-recompil...](http://malisper.me/2015/07/07/debugging-lisp- part-1-recompilation/)

[http://malisper.me/2015/07/14/debugging-lisp- part-2-inspecti...](http://malisper.me/2015/07/14/debugging-lisp- part-2-inspecting/)

[http://malisper.me/2015/07/22/debugging-lisp- part-3-redefini...](http://malisper.me/2015/07/22/debugging-lisp- part-3-redefining-classes/)

And this is important. I develop Clojure for a day job and this is a constant PITA.

<comment><USER4> Ease of implementation is not the reason for either no reader macros or a single pass compiler.

Rich Hickey discusses reader macros here: [http://clojure- log.n01se.net/date/2008-11-06.html](http://clojure- log.n01se.net/date/2008-11-06.html)

Quotes:

"Clojure doesn't allow user-defined reader macros because they can't be combined - there's no namespace support, unlike for regular macros"

"CL has user reader macros and the consensus is to avoid them"

"you are unlikely to convince me they are a good idea"

"I recognize fully this is less flexible than CL in this area, OTOH, I'd like to think Clojure will engender less desert-island programming than did CL -- speaking a common language fosters library development, shared idioms etc. When everyone creates their own language there's less of that"

"and even standard reader macros pose an understanding challenge for newcomers"

Compilation units are discussed here:

[https://news.ycombinator.com/item?id=2467359](https://news.ycombinator.com/item?id=2467359)

</comment></comment></comment><comment><USER5> While there are no first-class reader macros in Clojure, reader literals cover many common use cases. For the small set of use cases where you REALLY need reader macros, it's possible to hack them into the language. One such implementation: [https://github.com/klutometis/reader- macros](https://github.com/klutometis/reader-macros)

As far as interactive debugging - that's also something I missed from CL, but is relatively easy to hack into the language. A combination of REPL support for the standard JVM debugger ([https://github.com/ohpauleez/cdt](https://github.com/ohpauleez/cdt)), with a nice expression-based REPL debugger ([https://github.com/ohpauleez/cdt/blob/master/src/cdt/debug_r...](https://github.com/ohpauleez/cdt/blob/master/src/cdt/debug_repl.clj)) gets you pretty far. You can even trigger this environment on any exception using the built-in JVM support ([https://gist.github.com/ohpauleez/4ca0b646b89512f38ea2#file-...](https://gist.github.com/ohpauleez/4ca0b646b89512f38ea2#file- debugrepl-clj-L96-L108))

To see how far you can take reader literals, hack a look at my talk from last year's Conj, "Unlocking Data-driven Systems" \- [https://www.youtube.com/watch?v=BNkYYYyfF48](https://www.youtube.com/watch?v=BNkYYYyfF48)

<comment><USER6> Interactive debugging is not "relatively easy to hack into the language". In fact, it's impossible since Clojure lacks the Common Lisp condition system.

When an exception is thrown in Java, _the stack unwinds_ meaning all state in stack frames from the point of the throw to the handler gets thrown out.

In Common Lisp, _the stack does not unwind_ and high level logic can simply restart the computation (after fixing the error or trying different strategies) without losing any intermediate state. This killer feature is what makes interactive debugging possible.

Hacks like the one you linked to are a sorry state of affairs compared to what I described.

<comment><USER5> While I appreciate the dialog, your comment is rather condescending. I've worked extensively in Common Lisp and am well aware how the condition system works. My claims had little to do with conditions, and more about the benefits and use - It's pretty simple to have a dynamic var (say, _handler_ ), bound to anything you like, catching errors before the stack unwinds, including an expression-based REPL debugger, allowing you to change locals and return a value in the place of the exception. It has all the limitations you can imagine, but for many cases, this is plenty to be effective.

</comment></comment></comment><comment><USER7> Reader macros are brilliant - but as with many powerful language features they should be used carefully. I vividly remember receiving a release of some code (early 90s - a tape in the post) and looking at it and thinking that the source wasn't Lisp at all. Turns out it was someone who invented their own syntax and implemented it all as reader macros on top of Lisp - not quite as bad as trying to turn C into Pascal with #defines though but in a similar spirit.

<comment><USER8> And what is wrong, exactly, with changing the language syntax?

DSLs become more readable and closer to the way the problem domain experts think if they are using the more convenient syntax.

<comment><USER9> There is nothing wrong if you can justify it to the next programmer who has to deal with your code. If your gain is only marginal but I have to read and understand 200 lines of code to understand your DSL, I might be mildly annoyed....

<comment><USER8> A well-designed DSL should be self-documenting and obvious. And the right tools (like a proper IDE integration, with syntax highlighting and autocompletion) would make such a DSL much more obvious than a library of functions (which still must be thoroughly documented to be usable).

<comment><USER10> _A well-designed DSL should be self-documenting and obvious._

ROFL. You're adorable. :)

You're also conveniently ignoring the maintenance required on the DSL itself. DSLs are, themselves, code, and code must be tested, updated, will likely experience regressions, etc.

<comment><USER8> I've been building properly designed, syntactically rich DSLs for over a decade. It is much, much easier than building usable APIs.

DSL compilers are the simplest and cleanest code possible. They're nothing but a chain of very trivial tree rewrites, and with a help of a proper DSL you can write and maintain them easily.

</comment></comment></comment></comment></comment></comment><comment><USER11> So if lisp is so great and so are reader macros, why didn't Macsyma/Maxima win over Mathematica? It _is_ just a bunch of reader macros and lisp, right? It seems like a CAS is a prime use case for lisp to really shine.

Why isn't anyone else writing new CASes in lisp?

<comment><USER12> Because Lisp ran like shit on even the high-end hardware of that day. Plus it was proprietary -- nothing like SBCL existed. By using C Wolfram was able to offer a much more performant system with much lower TCO. Combine that with his legendary self-promotion skills and you have a juggernaut in the marketplace.

<comment><USER13> Maclisp ran quite fast on the PDP-10, even faster than DEC's FORTRAN (for a while, DEC was sufficiently embarrassed they put more effort into it).

High quality Lisps being proprietary during the chaotic '80s through the early-mid '90s was certainly an issue for Maxima, but for the licensed Macsyma (see my other comment on the history) I _think_ that would have been an acceptable part of the cost of goods; too bad Symbolics demanded you by one of their Lisp Machines to run it for too long.

Self-promotion ... yeah, Mathematica wins hands down there ^_^.</comment></comment></comment>


Murder: Fast datacenter code deploys using BitTorrent - <AUTHOR> http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html

<comment><USER2> Sometimes I wish geeks wouldn't worry about giving something a cool sounding name and instead just picked something conventional or unremarkable.

I don't want to search Google for help with Murder. I don't want to discuss Murder at the office.

<comment><USER3> or the next morning....did you complete the murder job?

<comment><USER4> or commit murder (on github obviously)

<comment><USER5> or find out who should be blamed for the recent Murder failure.

</comment></comment></comment></comment><comment><USER6> I wonder if they tried multicast. It would be strictly more efficient in terms of bandwidth (one copy per router/hop rather than all the different pieces flying back and forth) and likely less CPU. There's premade software like uftp (<http://www.tcnj.edu/~bush/uftp.html>) to do this.

<comment><USER7> Amen. The NIH syndrome at twitter seems to be going strong. They just don't stop reinventing stuff, and usually poorly.

In this case uftp is the time-tested solution, made _precisely_ for this purpose (mass deployment) and provably better on all metrics (speed, bandwidth, security via SSL, complexity).

The mind remains boggled...

<comment><USER8> You do realize that twitter didn't invent bittorrent, right?

;)

<comment><USER6> They appear to have invested substantial time into integrating it with their deployment system and improving its performance for their particular network situation rather than using off-the-shelf software like uftp.

</comment></comment></comment></comment><comment><USER9> You guys know a group of crows is called a Murder, right?

I'd hate to work somewhere where I could only use stuffy, politically correct software names. Call me crazy, but quirky software names are half the reason I release a project.

<comment><USER10> Indeed. I called my asset manager 'assman'. :)

<comment><USER11> Context: <http://www.youtube.com/watch?v=tujqM2u-BVo>

</comment></comment></comment><comment><USER12> Couldn't they use a tree-like distribution system where each node only receives pulls from a small number of child nodes?

You could organize this by giving each server an incrementing number and using math to deduce their parent node, much like an implicit binary tree stored as an array: <http://en.wikipedia.org/wiki/Binary_tree#Ahnentafel_list>

That way you can still use the http or git protocol without having to invent a special flavor of BitTorrent.

<comment><USER13> He covered why they didn't want to use a tree like distribution method in his presentation.

It introduces a possible single point of failure for all nodes which are children of a failed node.

</comment></comment><comment><USER14> Maybe this is too easy, but if you're using Git, why not have servers that get a new release be added to a list of servers that can distribute a new release?

<comment><USER15> Added complexity to continue to scale, and one deploy replica high up in the chain that breaks will break everything downstream. As you start building a system to address those issues, you're adding more complexity. This would lead me toward a Murder based solution from the start.

</comment></comment><comment><USER3>
      no NAT/Firewall issues, no ISP traffic shaping, only trusted peers

Sounds like an easy-to-exploit datacenter to me.

<comment><USER16> They'd have those protecting the perimenter, but this is only for deploys in a single datacenter right now. They're only doing it on their network, so they don't have to worry about all the hoops torrents normally go through; they can drop the timeouts to nothing, they don't need encryption, etc.

The video states that they will be looking into how best to do deploys across centers in the future, but they are not going to have peers connect across their wan links. One tracker and seeder per location is a first musing.

[Edit: paragraphs]

<comment><USER17> >The video states that they will be looking into how best to do deploys across centers in the future, but they are not going to have peers connect across their wan links. One tracker and seeder per location is a first musing.

Heck, use a VPN to accomplish this if you're lazy.

</comment></comment></comment><comment><USER18> css text-shadow on body content is over-rated and actually makes it harder to read.</comment>


Obama's 'internet kill switch' - <AUTHOR> http://www.bbc.co.uk/news/world-us-canada-11736545 <comment><USER2> _"By the time Skynet became self-aware it had spread into millions of computer servers across the planet. Ordinary computers in office buildings, dorm rooms; everywhere. It was software; in cyberspace. There was no system core; it could not be shutdown."_</comment>


Progo - The Cloud is Evolving. Go is the Solution. - <AUTHOR> http://www.progo.io/

<comment><USER2> I love Go, but what is this page? An advertisement? Where's the content?

<comment><USER3> It appears that they are a consultancy focusing on helping companies write Go apps. Sounds like what The Node Firm (thenodefirm.com) is for Node.js

<comment><USER4> I am on this operations team; we are a Go consultancy. Glad to see someone is interested in what we are doing.</comment></comment></comment>


15 huge questions about the Mac App Store - <AUTHOR> http://www.businessinsider.com/mac-app-store-2010-11

<comment><USER2> One-page version: [http://www.businessinsider.com/mac-app- store-2010-11?slop=1#...](http://www.businessinsider.com/mac-app- store-2010-11?slop=1#slideshow-start)</comment>


Why I hate iOS as a developer - <AUTHOR> https://medium.com/@Pier/why-i-hate-ios-as-a-developer-459c182e8a72#.d67k676yk <comment><USER2> Bashing iframes, really? They were a bad idea in 1999, and they are a bad idea today.

Second, the Dash story has played out elsewhere and it turned out the dev was responsible for some shady shit.

Third, you have been able to develop and run iOS apps on your device without paying for a couple of years already, quoting [https://developer.apple.com/support/compare- memberships/](https://developer.apple.com/support/compare-memberships/):

"If you're looking to develop apps for Apple platforms, download the Xcode developer tools, SDKs, and resources for free on the Xcode downloads page. Program membership is not required."

</comment><comment><USER3> " Apple's policy is to take no prisoners. If you can't upgrade your device you are a "sad" person. Go buy a new iOS device if you want the privilege of having bug free apps. " .... ? I mean, did you try to Run windows 10 in a pentium 4.</comment>


Ask HN: Confused software developer - <AUTHOR> I am desperate for help but not sure whom to ask. I do not have any senior software developer friend who I can ask for advice. So, I hope somebody out here can help me. I am 30yr old software developer with 2 yrs experience as a ASP.net C# developer. I have been jobless for 6 months. During my tenure as a developer, I did not do anything great. Just converted some existing HTML(static) sites to dynamic(developed a simple & crude cms like interface to edit the content on the website). I also made some simple web services. But I felt it was more like doing something and praying real hard that it should work. I cannot say honestly that I know webservice. Once I lost my job, I was having trouble finding .net openings as everyone wanted experienced people and no one wanted a junior. I decided to leave .net and look else where, I was also fed up with windows and visual studio. I tried Java but it was tough learning it based on the online resources. I struggled for a long time with Maven and still i am not sure if I know it properly. I did play around with Python, I really liked the syntax formating(well indented structure as it made it more readable). I am a windows 7 user, but now I am getting used to Linux mint since 3 months. Now my problem is, I do not have experience due to which I cannot find a job and I cannot get a Job as I lack experience. Its like a dead-lock situation. Plus I have not achieved at 30 what I aimed to do when was 25. I am not sure which language to choose as I am trying to move away from .NET. I am currently trying to develop an app for android in hopes to be self-employed or atleast gain a skill as a mobile app developer. But I am not very sure how successful I will be as I still struggling to find was way around Java. May be I am just looking at all this in a wrong way. I am not sure, but I think its time for a complete shake up. <comment><USER2> Not wanting to be brutal but if you have 2 years experience of anything then you are no longer a junior. Maybe not actually a senior but certainly not a junior. Junior is like saying trainee. Stop thinking that you are junior.

You seem to play down your accomplishments "Just converted some existing HTML(static) sites to dynamic(developed a simple & crude cms like interface to edit the content on the website). I also made some simple web services"

Lets rewrite that for you:

1) Rebuilt existing site into a modern Web2.0 dynamic website complete with it's own CMS to make the sites easier to maintain for the users. 2) Developed webservices to allow the content of XXX easily accessible by other services.

If your CV is like this post then it needs a makeover.

You are not a junior anything, you are an experienced ASP.net C# developer!

Building on your ASP.net and C# skills will provide greater benefit in the short term than becoming a noob in a whole bunch of other technologies.

<comment><USER3> This bullshit spin won't withstand even the most basic technical interview. It will also ensure that he'd come across as a pompous noob who's out of touch with reality.

I've been programming for money close to 25 years and I can assure you that the "junior" period covers _at least_ 5 years. Yes, 3 years in you would think that you know a lot, have a boatload of experience and just a wee bit under "senior", but then at a 10 year mark you realize how obnxoisously cocky that self-assesment was. You just didn't know what you didn't know, but it didn't prevent you from feeling super-smart.

So, yeah, the OP is most definitely junior. That part is not a problem and it's actually _really good_ that he doesn't think more of himself than he really is. His problem is a lack of experience and the only solution to this is just to sit your ass down, read what others have written and write your own code. Iterate.

<comment><USER4> _> > I can assure you that the "junior" period covers at least 5 years._

You can't assure that. There are super sharp people out there with less than 3 years of experience that know a whole lot and there are devs with 10+ years experience who can't determine when a for-loop should be used.

The problem is that term 'programmer' means very different things depending on the industry and company you're in.

<comment><USER5> > The problem is that term 'programmer' means very different things depending > on the industry and company you're in.

That's because 'programmer' as a word is a lot like 'painter', which means "applies pigment to surface" and does not differentiate between "painter of portraits" and "painter of my kitchen".

Programming is a literate and verbal exercise: We should have better words for this.

</comment></comment></comment></comment><comment><USER6> With your level of experience, you should not make the mistake of jumping on, or off, a particular technology stack's bandwagon. Look, lots of worthwhile work happens in .net, and in Java, and in Python, and even in older languages. When the technology in a stack has inconvenient or irritating aspects, that's a big opportunity: if you're good at dealing with that stuff, you're valuable.

What counts? Getting stuff done, not indentation styles.

If you don't know SQL, now, while you're looking for work, is the time to learn it. Give yourself the assignment of building a program and maybe a web site to browse some kind of open data. (Historical weather measurements? Nursing home quality scores? Political donations? There's tons of open data available on the net). Get your system working.

For $10 a month, you can subscribe to an online books service like Safari Books. That should allow you to overcome the somewhat chaotic state of online teaching materials for popular software stacks.

</comment><comment><USER7> The way you describe things reminded me of a fairly recent Hacker News post: [https://news.ycombinator.com/item?id=8630972](https://news.ycombinator.com/item?id=8630972)

It's a about a blog entry of a self taught programmer who was changing technology stacks back and forth, I suggest you to read it.

As he concludes, the answer is to focus. IMHO if you don't enjoy .Net and you want to change it, go for it; you will need motivation along the way and if certain technology doesn't give it to you then learn something that does and STICK to it.

</comment><comment><USER8> Sorry dude.. you are looking at this the wrong way. This is an industry where you do not need a job to get experience, you just need to RTFM (of whatever tool you've adopted), learn it up and down, and find a way to apply it. That's what you get from experience. After that, people will hire you

</comment><comment><USER9> I know people get fed up of C#/.NET because it feels so separated from what's going on in the rest of the development world and because the (relative) lack of open source community makes it seem quite dull. But it's a great language and a decent framework and with Microsoft open-sourcing so much of it a few weeks ago it could be on the verge of becoming more exciting.

If I were you I'd consider trying to get involved (or at least following developments) in the official .NET on Linux projects. That way you don't have to learn a new language but you can move away from Windows and Visual Studio. And try to get some practice deploying Linux .NET applications in Docker - I'd guess that experience will be in high demand in the near future.

</comment><comment><USER10> First off, read this: [http://blog.freecodecamp.com/2014/11/a-cautionary-tale- of-le...](http://blog.freecodecamp.com/2014/11/a-cautionary-tale-of-learning- to-code.html)

Then, read this ranking of the most popular languages: [http://www.tiobe.com/index.php/content/paperinfo/tpci/index....](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

Figure out what type of development you enjoy. Do you enjoy the backend, the frontend mobile etc. Different languages are good for different things.

If you like APIs and backend development learn java/scala or C#. Python is a really good all around programming language but you'll need JavaScript, CSS to do frontend web development. If you enjoy mobile, then java or Objective-C/Swift is pretty much a must.

Next, what kind of job do you want? If you want an enterprise job then java or C# is what you want. If you want to work for a small company, then many languages will do but Python is again a good bet.

If you want to be a freelancer, then probably you should pick a skillset to get really good at, whatever you happen to like, and stick to it. That's how you'll stand out against others and be seen as an expert.

I personally don't believe in knowing 5+ programming languages and claiming to be great at all of them. Pick 1 or 2 as your core, and then dabble in others. Your core languages you should be able to do in your sleep and be good enough to ace any interview.

</comment><comment><USER11> Most developers need 5-10 years to really get to be engineers and solid product makers. Until then work on teams that are better than you and get as much experience as possible.

Keep doing what you were doing in .NET or something you can take on. Maybe explore some new areas/platforms but only when you have some projects in them. You can learn to deliver product on any platform but change it up when you have the ability or in your free time. Start small in deliverable chunks always and build from there.

I feel that you need to slow down, write sentences into paragraphs, figure out what you want. Be concise.

You are focusing on the 30 year old thing, most developers are their best in their 30s+, so don't believe the hype. Think about it, graduate at 22 or 25/6 with masters if taking that route, 5-10 years of experience puts the best of their industry right at early to mid thirties as the starting point for good developers. Just because VCs want developers before you know your value doesn't mean good developers aren't needed. You need to focus on making yourself better in your eyes. You aren't there yet but you are on the journey and you are thinking about these things so that is a good sign.

Keep working at it, you have time. Right now though since you feel a little lost, just take on a .NET role, or something you can take on, and rebuild your confidence. You can make a product on any platform and you will learn many good patterns and anti-patterns even if that is not the platform you choose in your own projects. What you need right now is experience and some of it may suck but find the good/fun/learning in each adventure.

</comment><comment><USER12> What I tell most people to do is to build a lot of toy projects. A lot. Ship a lot of code out onto the internet for the world to see.

There are several purposes:

1) Building a lot of things will hopefully help you uncover different problems that you will have to struggle to solve. Hopefully after struggling to solve them, you will gain understanding. Just following hello worlds doesn't really help much. But when you're trying to figure out how to implement a "real- world" product problem, you'll have to figure out how to develop features that don't come for free with whatever framework you are using.

2) Also, don't write everything from scratch. Research what frameworks or libraries might help accelerate your development. Understand the pros and cons of using them.

3) Hopefully as you build more things, they will get better. And then you will have something to showcase to prospective employers. You'll have real code you can share with them. Be humble, get pointers on how you can improve. Bonus points if you have tests too.

4) It shows initiative and interest. I'd imagine these are important intangibles. I'd be very reluctant to hire an engineer who didn't tinker with things at night. (not necessarily all night, every night.)

5) Additionally, taking vague concepts and requirements and turning them into products does take some discipline. Which features will you keep, which features will you cut. How can you change your requirements and still get what you want. It shows that you can do things without being told exactly what to do, or how to do it.

Hope this helps.

<comment><USER13> _2) Also, don 't write everything from scratch. Research what frameworks or libraries might help accelerate your development. Understand the pros and cons of using them._

That's the most often ignored advice I've encountered. Most frameworks and libraries are written by actually smart people, or at least by very experienced people. While it may not seem as the best solution for any given problem, they solve many basic things that are just hard to get right on the first try.

I started coding about 10 years ago by writing my own CMS. Then I've found it was built on wrong assumptions and wrote another one. Then another. My thinking was - my needs are very simple, I don't need the whole framework, I will be better on my own knowing every line of my code.

This time was almost completely wasted. I've learned what to avoid but not how to do things right. Also my resume was missing hot keywords recruiters are looking for, since I knew the language but not the frameworks. Usually it's ok for companies to train somebody as long as they have a point of reference ("he knows Backbone so he will learn Angular quickly" \- not the best thinking, but that's what I've experienced so far).

My advice is do some initial research, see which framework or language suits you best and stick with it. It takes about a year to find all ups and downs of any given solution and many on the first glance look better/worse than they actually are. Good rule of the thumb is to choose something that is past the first iteration, so the initial problems are resolved but haven't had more than few, meaning that involved people are smart enough to not replace one error with another.

<comment><USER14> I'm of two minds on this sort of advice. If you don't at the very least understand the core concepts of DOM event handlers and async callbacks and I guess just the DOM tree in general, jumping right into Angular (when you're looking for front end jobs) is doing yourself a pretty big disservice. But as far as just getting a job jumping from hot framework to hot framework probably is just fine...

<comment><USER12> Yeah, it's tricky. I guess I should amend the suggestions to be:

A) start by understanding the tools and libraries available to you, and how to integrate them to build product/features faster.

B) start to understand what is going on under the covers in those libraries. it's not uncommon that, as awesome as these libraries can be, you'll have to look at their source code eventually to work through some unintended behavior or corner cases.

</comment></comment></comment></comment><comment><USER15> Some more background would be nice. All I was able to gleam was that you have 2 years experience developing in c# which mainly consisted of converting a legacy code base to an ASP MVC code base. Don't worry about being 30, it just matters what you can do. So, with that being said.

How were you making money before you became a c# developer? It sounds like you might have been programming, but what specifically?

What city/country do you live in?

What did you like about the tech you were using before c#?

What did you like about c#?

What kind of app were you building in c#?

What kind of online articles do you find yourself reading when your mind starts to wander?

What was the vision you had for your life at 25?

How long did you spend writing your resume?

How many jobs do you apply for each week?

How many do you apply for each month?

I just want to get a sense of who you are. If I get that, I'm sure I can offer some good advice as to what tech to invest your time in, and possibly even some actionable steps for you to find work.

This will all work out. Success doesn't care how hard you fall, only how quickly you get back up. So put your fucking rally cap on, cause this about to be a memory.

Cheers

<comment><AUTHOR> I did IT support for a yr after that I was a market analyst. Then a 2 month opening for an intern came up, which I managed to stretch it to 2 yrs. But the new manager wanted only senior developers on staff and I was out. C# was my first professional language. Before that I did some collage projects and some freelance work on static sites, MS Access based app with VB. C# was not a choice but what the company was working on. I have only developed websites with forms. Basically a fancy CRUD. They is nothing special I see in C# but I liked the intellisense of Visual Studio. My vision for 25 was that, I would have a clear aim. As in, picked a language, domain and stuck to it for atleast 5 yrs. My resume, have been a long time in making. Guess since the last 4 years, my Cv has been the same. Just keep updating it. I apply for about 3-10 jobs weekly, depending on the openings available. As for reading, I usually follow the articles on asp.net and hacker news. Anything with keyword .net, C#, python.

<comment><USER15> Thanks, I have a much clearer view. A little background on me so you can see I know what I'm talking about. I'm a 12+ year web app developer who specializes in front-end development.

Proficient in:

SQL, Java, Hibernate, c#, ASP.net, ASP MVC + Razor, Entity Framework, Coldfusion, Railo, Visual Studio, IntelliJ, Javascript, jQuery, Mootools, Backbonejs, css, LESS, bootstrap.

Familiar with: IIS, Apache, Tomcat, Maven, Artifactory

Currently Mastering:

knockoutjs, knockbackjs

Dabbled in:

Python, Ubuntu web server, Pylons.

So here are my assumptions about you, and I'll follow it up with advice:

You are not a developer or engineer, you are a hacker. You've probably thought or said something to the effect of "Users don't care what the code looks like, all that matters is that it works". You are probably good at getting things working quickly but given a large project can find yourself weighed down with code debt and that once rapid productivity rate comes screeching to a halt.

I think of programmers as having personality types, and if you match up the correct personality type with the correct tasks, that individual can be very productive. So, if I am correct, you are a hacker. You are best suited for working on prototypes or at custom software shops where getting an initial app launched is way more important than code maintainability.

You have a long background in market analysis, I'm guessing 4+ years, so if you can find a company creating software to aid in market analysis, you could champion yourself as both a developer and domain expert to that company.

Advice:

1) You have sent out roughly 168 resumes over a 6 month period and none of those have resulted in an interview. So either your resume is terrible, or you are applying to the wrong jobs, but I suspect its most likely both. Send me your resume, and I'll look over it with my friend and we'll critique it for you. hnsakes [at] gmail.com

2) Rewrite your resume from scratch, referencing your original resume for content. Your resume should always be coupled with a cover letter that has been tailored to the position you are applying for.

3) Understand the value that you bring and tell the employer how you will help them. Going on my assumptions above that would consist of banging out prototypes or small to medium sized applications quickly.

4) Apply to companies that are looking to start transitioning from people services to technology services. For example, I am currently contracting with a book publisher helping them move from selling books to delivering content via a web application.

5) Apply to custom software shops. They will have projects of all sizes, and hackers typically shine in these environments.

6) Apply to companies providing market analysis services where you can leverage your domain experience to add value.

7) Always apply to companies looking for a .NET / c# developer, don't pick up a new tech stack unless you need to, meaning some company is interested in hiring you but they don't use c#.

Critique:

You think c# is bad, you think visual studio is bad, but you don't have the experience to know why nor were you able to find the good parts in those techs.

Visual Studio is pretty amazing, c# is pretty amazing. The only problem with visual studio is that it is not IntelliJ, the only problem with c# is the web is polluted with poor code snippets due to a disproportionate amount of poor developers in that community compared to others. Building Microsoft based web solutions is just too easy to get started with, and developers tend to plateau pretty quickly as a result.

Entity Framework, is just awesome. I just wish I could code this stuff in intellij rather than VS though.

So this is my initial response. I'd be happy to go into more details over email or in this comment thread. This won't be hard to fix. You will have a job soon enough, you just need to know yourself better, and allocate your resources correctly (fine tuning the jobs you apply for, polishing your resume, and as a last resort working with new technologies after you have addressed the job search techniques/resume).

</comment></comment></comment><comment><USER16> "I do not have experience due to which I cannot find a job and I cannot get a Job as I lack experience. Its like a dead-lock situation"

Nowadays, whenever a programmer says this a cat dies in the other side of the world. We developers are almost immune to this, because we have what we call open source software and free cloud services doing very specialized tasks. What I mean to say is that if experience is your problem, you should be glad to know that there are ways to gain experience without a job. This is quite easy to do in our field - contribute to open source, do some personal projects for portfolio, or even help out some startup in need of manpower. All these things can be done right now, and reaching out to HN is a good start. Relax, my friend. Just head out and continue on, say, the Python web development path, and pretty soon you will find some arrangement or gig that will get the wheels rolling for you.

</comment><comment><USER17> You say you're battling to get hired with only two years experience, but now you're wanting to abandon that two years of .Net experience and then go job hunting with skills in which you have no commercial experience. Build on the little foundation, stay with .Net at least until job hunting isn't a problem.

</comment><comment><USER18> I pretty much agree with what everyone has said. But I'll just emphasize that you should believe in yourself and just try to fake until you can believe in yourself. Like they say "fake it till you make it."

And the only way to make it is to keep going and don't give up. Believing in yourself will help with not giving up. You'll be surprised how much you'd be able to learn by just not giving up. For example, I know this one developer who used to ask these ridiculously stupid questions on stackoverflow. I mean things like you can learn simply by reading the docs. But I've always known him having thick skin and just getting stuff done. Your aptitude can only help you to a certain extent but it is your attitude that can help you achieve great heights. Have a growth mindset and don't worry about not learning fast or what others have done.

</comment><comment><USER19> You already have experience in .NET so I'm not sure why you are trying to move away from it to a language in which you have no experience at all. You mention the work you did on the simple CMS and praying that it worked. Build on those skills. If you could do it again what would you differently. What methods could you employ so that you didn't have to pray it worked. Read up on webservices so that you fully understand them. Getting good takes a lot of time. Even though I know a few languages and frameworks very well, moving to something new can feel like starting all over again.

The great thing about software is that there are plenty of ways to get experience outside of having a job. Write your own software or develop your own sites that show off your capabilities. Make the source available on Github if you want. Write some blog posts. Help out on Stackoverflow.

</comment><comment><USER20> Don't over think it or start self doubting. Are you getting interviews? As previously asked - where are you located?

1\. You must network. Make the effort to go to local meetups, etc. One problem you have is that you don't have other developers around. Knowing how to market yourself comes with awareness and experience you get by having relationships with other developers. Get out to a local meetup or something.

Without knowing more, in general: 1\. If you're able to reduce your salary requirements then look for something that offers you a chance to build skills (sacrifice compensation for now). 2\. You may need to relocate for greener fields.

As for tech choices, I think it's more about being with a team (or project) that is actively practicing high-quality code craftsmanship. Languages come and go, but delivering high quality code is a skill that sticks.

<comment><AUTHOR> Dubai, UAE. No interview calls. That is really frustrating as I do not get any reply for my emails. Atleast, it would be great if they just reply saying what I lack. I know its extra work but I think is the least they can do when they post and ad for a job.

</comment></comment><comment><USER21> Consider moving to an area with more jobs available.

As for your skills, continue to create on your own. You should know SQL and how to work with memcache or redis. Making an android app is good but if your career path is more towards web development keep toying around with that technology as well. Ideally you could build something and include it on your resume.

As nolite said, pick a language and stick with it. You need to learn one language inside and out and then you'll be able to pick up other languages that much easier.

And lastly, _don 't sell yourself short!_ You have experience, you are excited about this work and willing to learn, then you will do a great job. Let that show through when you interview. Tailor your resume to fit the job description you are applying for. Your resume gets you an interview, the interview gets you the job.

<comment><AUTHOR> I know SQL.

</comment></comment><comment><USER22> As others here have pointed out, you don't give us a lot to go by. But here are some points that leap out:

1\. If you find Java hard to understand, and not just unappealing too your tastes, do you really understand C#? You may need to focus on basic understanding, no matter what language you choose.

2\. Android has a steep-ish learning curve and can punish an incomplete understanding harshly. For just one example, apps and components of apps have a lifecycle you can't just gloss over.

3\. What's wrong with the market for C# developers? I don't think picking another area of concentration will help. You may need to get some certification or course completion that shows you have a specific level of C# expertise.

</comment><comment><USER23> IDK anything about the job market in the UAE but I have an acquaintance in a position very similar to yours (self-taught .Net webdev with some years of experience) and my advice was to go into mobile development. You say you're doing some Android development. Stick with that and apply for those positions. If you publish something in the Play store, much better since you'll have something to show.

Use your knowledge (as limited as it might be) on web services as a leverage (all mobile apps use some sort of web service) and exploit it.

Also, try to apply to positions in consulting firms, since those usually grab the cheapest option and allows you to gain some real world experience.

</comment><comment><USER24> The main thing I'd recommend here is this: start building up an online portfolio.

Get yourself a GitHub account if you haven't already done so and start contributing to one or two open source projects. Submitting pull requests or patches to existing projects and having them accepted is one way of getting yourself noticed.

Start answering questions on Stack Overflow. Start a blog. Leave comments on other people's blogs.

Things like these can compensate considerably for a lack of workplace experience.

</comment><comment><USER25> These are in no specific order and I haven't tried them. But, sounds like you might benenefit from some structured training:

[http://www.thinkful.com/](http://www.thinkful.com/) [https://www.codementor.io/](https://www.codementor.io/) [https://www.bloc.io/](https://www.bloc.io/)

</comment><comment><USER26> A great way to gain more experience is to contribute to open source.

One way would be to join the Debian mono group to help improve the C#/.NET stack in Linux Mint (they pull packages from Debian):

[https://wiki.debian.org/Teams/DebianMonoGroup](https://wiki.debian.org/Teams/DebianMonoGroup)

Similar teams exist in Debian for many all languages.

</comment><comment><USER27> > _I am 30yr old software developer with 2 yrs experience as a ASP.net C# > developer._

That's it? Your only development experience is that? No school or anything of that sort?

There is a backstory missing: how did you get that ASP.net C# job with zero experience?

</comment><comment><USER28> Not-an-expert-disclaimer here.

First of, believe in yourself. This sounds clinched, but what I mean that you should do is dare to take on more responsibility.

Presumably you don't advertise yourself as 'experienced' when applying for the job openings because you feel you won't be able to add value the the company you're applying to. I presume you don't trust yourself to be able to complete the tasks the company will ask of you and that you refuse to have the company lose money because of you.

The solution, in my opinion, is to inflate instead of deflate what you've done. Even if you yourself don't believe it amounted to much: having 'built a custom cms' on your cv will, if phrased the right way, sound like 'experience' to potential employers. You're not lying when you do this. You _have_ built that CMS, and even if it seemed simple it still counts for something.

I can honestly say that I've written accounting software for the marketing department of a certain company. On my cv this sounds impressive, and I've actually done it. In reality it came down to 500 lines of (very ugly)VBAv6 code in excel. Do I think it's the best work I've ever done? No, but I did do it.

Next, perhaps you don't realize this, but after a certain point the language you program in matters less and less. You see what's important in programming is not the languages that you know but the paradigms that you've mastered and the intuition you develop for doing things in a certain way. In C# you've learned object oriented programming. This experience is much more valualbe to you than knowledge of C# itself. With you having played around in Java, C#, Phyton it sounds to me that you've sampled allot of different ways of getting stuff done with programming.

And you do _know_ this, even if it seems so simple to you, putting on your cv 'two years experience with OOP' is true and a valid way of advertising yourself. Allow yourself to advertise the 'generic' programming skills you've learned with C# when applying for openings that require Java. You're not lying, and you'll see that you can live up to the challenges your future employer has in store for you.

When I wrote that VBA application I hadn't written a single line of VBA in my entire life, and while the source is a mess (I don't envy the person who needs to fix something in the future...) the program does work.

You _must_ trust yourself to be able to tackle the problems that could be thrown your way by your employer. That way you won't feel guilty when applying for a job and you can say that you are, in fact, experienced, which you are.

</comment><comment><USER29> You say you don't have any senior software developer friend. Aren't there any opportunities for networking in Dubai? Meetups etc.?

</comment><comment><USER30> Have you considered focusing your job search on systems administration, while continuing to develop your programming skills?

</comment><comment><USER31> Try harder, look for a job in start-ups and at-least for one year just do good work instead of looking for package.

</comment><comment><USER32> some people (caugh caugh rent-the-runway) describe a junior developer as this: [http://www.indeed.com/viewjob?jk=d399f4767bd2e859&q=Junior+F...](http://www.indeed.com/viewjob?jk=d399f4767bd2e859&q=Junior+Front+End+Developer&tk=198ovvfrs0mqi12i)

pretty silly

</comment><comment><USER33> Where are you located?

<comment><AUTHOR> Dubai, UAE

<comment><USER34> Would you consider moving?

If you could move to San Francisco, you most certainly would get a job, junior or not. Then improve.

<comment><USER35> Surely you understand how unrealistic this is. I mean, it's so unrealistic that "unrealistic" is almost a comical understatement. Why not just go all the way and say, "If you could just win the lottery and grow a set of beautiful, angelic wings, you could be a very wealthy, flying programmer."

</comment></comment></comment></comment><comment><USER36> If your sloppy grammar and spelling are anything to go by, perhaps your issue lies with inattention to details.

<comment><USER37> You should consider the fact that not everyone on Hacker News is a native english speaker before judging someone based on their spelling and grammar.</comment></comment>


Defending the rights of protesters using ProtonMail - <AUTHOR> https://protonmail.com/blog/protesters-free-speech/ <comment><USER2> Awesome considering how big is this event in the history of Privacy and Censorship. Independently of how a tool like ProtonMail is used, Privacy and Fair Public Hearing are basic human rights.

</comment><comment><USER3> Well time to swap e-mail provider, just about confirms its part of the Western intelligence apparatus.</comment>


The TSA as we know it is dead - here's why - <AUTHOR> http://www.linkedin.com/today/post/article/20121130115318-332179-the-tsa-as-we-know-it-is-dead-here-s-why

<comment><USER2> Good riddance. Glad to see Congress is finally starting to realize what a mess and waste the TSA is.</comment>


"Goldberg polyhedra" – a 4th class of convex equilateral polyhedra - <AUTHOR> http://www.pnas.org/content/early/2014/02/04/1310939111

<comment><AUTHOR> There is also a spiegel.de article [1] which contains a short summary including examples, like this one: [http://cdn3.spiegel.de/images/image-656756-galleryV9-aesy.jp...](http://cdn3.spiegel.de/images/image-656756-galleryV9-aesy.jpg)

[1]: [http://www.spiegel.de/wissenschaft/mensch/geometrie-neue- kla...](http://www.spiegel.de/wissenschaft/mensch/geometrie-neue-klasse- regelmaessiger-koerper-entdeckt-a-952615.html)

[1-translated]: [http://translate.google.com/translate?hl=en&sl=de&tl=en&u=ht...](http://translate.google.com/translate?hl=en&sl=de&tl=en&u=http%3A%2F%2Fwww.spiegel.de%2Fwissenschaft%2Fmensch%2Fgeometrie- neue-klasse-regelmaessiger-koerper-entdeckt-a-952615.html&sandbox=1)</comment>


Social media has failed us and the nation - <AUTHOR> http://www.sfchronicle.com/entertainment/article/Social-media-has-failed-us-and-the-nation-10686838.php?google_editors_picks=true <comment><USER2> She even admits to trying to get Trump banned for "harassment". Is there nothing the mainstream media won't do to make sure they're the only conduit to the "correct" thoughts peoples should be having?

</comment><comment><USER3> Mainstream media needs to give this a rest.

Zuckerberg couldn't even dream of dogging us as hard as CNN/FOX/MSNBC et.al. did in the run-up to the invasion of Iraq and Afghanistan.</comment>


Twitter bookmarklet shows the background of any profile - <AUTHOR> http://elweb.tumblr.com/post/95557000/twitterbkg

<comment><USER2> FFX: Right click -> View Background Image</comment>


Ask HN: Beta launch strategy: PR vs. no PR - <AUTHOR> What's the best strategy when launching a private beta app in regards to trying to get PR vs launching quietly for only the people on the waiting list?
Trying to get PR for the beta launch:
+ Lot of visitors and potential users
+ Reduce risk of competitors stealing the unique ideas of the app if you get covered first
- Risk that many bugs will hit a lot of people resulting in negative marketing
Quiet launch:
+ Can sort out the major bugs before contacting the press
- Less users gets to test it
- Competitors can steal the unique ideas of the app without anyone knowing <comment><USER2> What usually happens: You launch it. Nobody signs up. You incrementally add features. Still nobody signs up. You eventually quit.

Competition rarely kills you. Product-market fit is usually the biggest factor. If you can get easy PR and signups, then go take them. Your early users will know its a beta product and will be forgiving about bugs.

<comment><USER3> It sucks, but this. Every beta I've launched has been disappointing with very, very little activity even when the sign up count is in the hundreds. I do however think betas are valuable, as it allows you to tweak things (sometimes large breaking changes) before launch.

</comment></comment><comment><USER4> Just forget about "competitors stealing your unique ideas". Really, forget it. You are giving your own brilliance too much credit. You don't even have customers validating your unique ideas and you expect competitors to take them seriously?

So a part from that, regarding your question. A "private" beta doesn't implicitly means "no PR"? A private beta isn't open for anyone to sign up, if it isn't open, why the press should cover it? You gain nothing.

But, even if it is not actually "private", I still would suggest "no PR". Launch quietly, let some users come, test, validate your ideas. You will know what to improve and which of your ideas are actually unique. Then you will know what to say when you decide to go with PR.

Yes, it means fewer users trying it out and validating. But users that come from press usually are not of the "early adopters" type (meaning: they will be frustrated by the smallest bug, lack of feature or unpolished design and will leave before even trying, leaving no feedback behind).

So launch it ASAP, forget press, and submit to places like Show HN, Product Hunt, Reddit, etc.

</comment><comment><USER5> I ran a beta period for one of my apps which I consider really successful, lots of feedback and lots of activity.

My way to go was to seek out people commenting positively about another product, then I would send them a message to see if they were interested in testing. This guaranteed that I would get, dare I say it, passionate people to test it - and I did.

One thing to note though was that I was looking for comments about "productX" which was already mine, and the new product was essentially a "productX 2". But I guess it can work somewhat similarly within a genre or category. Maybe not as perfectly matched as for me.</comment>


A Gmail Workflow - <AUTHOR> http://blog.sourcing.io/a-gmail-workflow

<comment><USER2> Looks like the server already melted. Google cache: [http://webcache.googleusercontent.com/search?q=cache:sPYunfa...](http://webcache.googleusercontent.com/search?q=cache:sPYunfaF6nEJ:blog.sourcing.io/gmail- workflow)

On a side note: I want to build a server that _actually melts_ upon receiving too much traffic. Make it an art project.

<comment><USER3> Looks good now

</comment></comment><comment><USER4> Never heard about unroll.me before. Looks legit, signup was super simple. Now I'll see how it works after today. I've been trying to eliminate almost 10 years' worth of subscription junk for at least a year now.

</comment><comment><USER5> Your blog breaks responsivity on my phone. Horizontal scrolling somehow got in there, you might want to take a look. Nice article BTW!</comment>


Memespeech: Censor-proof end-to-end encryption - <AUTHOR> https://www.obsessivefacts.com/memespeech <comment><USER3> Does anyone know what happened to the live demo on [https://github.com/harvardnlp/NeuralSteganography](https://github.com/harvardnlp/NeuralSteganography) ?

It basically does what memespeech is doing, except much better. Both parties would need to agree on a cover text (let's say, a chapter from the NIV Bible). It then generates some text via GPT-2 trained on this cover text, with your hidden message encoded in it.

You'd then send this generated text to the recipient (which actually looks like a normal message written in the style of your cover text). They'd enter the same chapter of the NIV Bible along with your generated text, which then lets it recover your hidden message.

Basically, memespeech looks like you're hiding something, both to the human eye and to machine learning models. NeuralSteganography solves both of these issues, as it looks like regular human-readable texts to both humans _and_ ML models (Harvard's paper goes into more detail on this [https://arxiv.org/abs/1909.01496](https://arxiv.org/abs/1909.01496) ).

</comment><comment><USER4> I agree that encryption is "unbannable" in the same way you can't really ban a word or basic math. However, that won't stop the government from passing laws that make it hard for businesses to operate legally using things the government doesn't like. For example, there are certain arrangements of letters which are considered illegal[1], and if you operate a TV station you can't use those arrangements of letters without getting fined by the FCC.

There's also the famous illegal number from AACS[2].

[1]: [https://www.fcc.gov/consumers/guides/obscene-indecent-and- pr...](https://www.fcc.gov/consumers/guides/obscene-indecent-and-profane- broadcasts)

[2]: [https://en.wikipedia.org/wiki/AACS_encryption_key_controvers...](https://en.wikipedia.org/wiki/AACS_encryption_key_controversy)

<comment><AUTHOR> This isn't so much about businesses that allow message exchange. Memespeech allows users to add their own encryption on top of whatever messages that a particular email provider, chat app or social network already allows. So even with laws like EARN IT, there would be no way for a company like Facebook to prevent people from bringing their own encryption.

There are more robust solutions like GPG, but Memespeech was designed to be easy for people who already have established trust with the party they're communicating with (and could exchange a decryption password off-channel).

<comment><USER5> Encryption doesn't matter if we eventually get to the point that Apple can be forced to run a key-logger on a user's iPhone (warrant or not). People are lazy and won't use an extra app to "encrypt" something before copy/pasting it into FB and then the other uses has to copy/paste back to the Memespeech app; all just to send :D. Additionally, let's say encryption is banned and this is the "workaround". They just ban this app in the AppStore. No way users are building github repos and side-loading.

</comment></comment></comment><comment><USER6> IANAL, but I know some and have seen them give talks on this kind of topic.

This might be entertaining, but it definately doesn't fix the problem it tries to solve. Any jury in the land would still convict you if this was used to pass messages which would otherwise be illegal. If this is serious it is as stupid as saying "let's agree wearing Yellow socks means 'kill that guy', they can't arrest me for the colour of my socks!"

<comment><USER7> To be fair, I don't think this purports to say anything about magically making the encoded message legal in its content if it wasn't otherwise.

<comment><USER8> But you'll also have a real hard time convincing a court you have a free speech right to uppercasing and lowercasing letters in certain ways - <USER2> speech is in the _words_ , not the _presentation_. That is, if there's a law banning encryption as a whole (and not simply certain messages, encrypted or encrypted), I think this _still_ doesn't save you.

I think the courts have generally held that you can't simply throw speech onto some otherwise prohibited activity to gain First Amendment protections. For instance, see the case about the man who tweeted a GIF at Kurt Eichenwald with the intention of provoking a seizure - the fact that the GIF also contained words (... which were "you deserve a seizure for your posts") seems unlikely to say that the act of sending the GIF itself was protected speech.

<comment><USER9> Good: if the courts don't identify the decoding bible chapter, you get plausible deniability of "I didn't communicate a message for Illegal Activity X, I was just sharing some abstract ideas on theology with a friend".

Bad: Courts might begin issuing surveillance warrants (or worse) to TLAs based on the most innocuous personal communications, because "we're pretty sure that happy birthday e-card contains an encrypted message".

In either case, I completely agree if the message is deciphered by authorities, they've got you dead to rights, whether it's done by PGP, GPT bible verses, or yellow socks on Tuesday.

EDIT: I was commenting primarily on the GPT technique, but now having read the Memespeech page, totally agreed that it wouldn't even slightly stand up to scrutiny in court, as one needs no prior knowledge to decode the message and demonstrate that there is no other legitimate explanation for the communication.

</comment></comment></comment></comment><comment><USER10> I don't get it. Why is this unbannable? Aren't they banning encryption tech without backdoors, not the transmission format?

<comment><AUTHOR> With Memespeech, the encryption tech is wrapped into the transmission format, and the transmission format is Free Speech.

Even if this software were banned, a couple of points remain: \- It's unprovable that any block of Memespeech text has something encrypted in it unless you know the password \- It's easy for a developer to write their own Memespeech implementation based on the documented specification.

Not saying that anyone would violate a hypothetical (and probably unconstitutional) law, but it would be hard to enforce.

<comment><USER8> I think there are multiple senses of "banned" here. There's "made illegal" and there's "disallowed by a third-party platform." Something can be illegal but easy to do, e.g., driving without a seat belt. Something can be blocked by a platform but still quite legal, e.g., proselytizing your religion on HN.

It's pretty easy (relatively speaking) to run _your own_ transport that doesn't go through a third party, at which point you can just use OTR or whatever. Then you're immune from banned-in-the-sense-of-blocked, and you can make your own risk decisions about banned-in-the-sense-of-illegal. (Also, depending on the details of the law, this might be perfectly legal too, e.g., "big tech must give us backdoors" doesn't need to imply "everyone who runs encryption must give us backdoors.")

It does seem like Memespeech has an advantage if you're using a third-party platform as a channel and you don't want to be blocked, i.e., you want to exchange encrypted-and-not-backdoored messages over Facebook Messenger because you can no longer trust its own encryption. I agree that this seems less likely to be blocked than literally sending base64 over the channel. But it still can get blocked - Facebook is under no obligation to transport all "Free Speech" (whatever that means) from user to user. If Facebook says, on our platform we disallow text with >20% uppercase letters, they can do that legally and constitutionally. The government could force them to do it, but they could also do it on their own (e.g. a spam detector might do it, honestly).

So you basically end up in a steganography arms race: you want to send messages that look to Facebook like actual genuine messages so they don't block you, but they contain coded information that is end-to-end encrypted using modern cryptography. I suppose it depends on a number of external factors as to whether that's easier than setting up your own transport.

For instance, if your goal is just successfully sending messages and you don't care about legality, another easy (relatively speaking) thing is to run Noise Protocol over your favorite shortwave digital mode. Then you don't have to worry about being blocked at all.

<comment> seph-reed If the government banned it, it'd probably have something like the Striessand effect. People doing it just because.

</comment></comment></comment></comment><comment><AUTHOR> \- NPM module here: [https://www.npmjs.com/package/memespeech](https://www.npmjs.com/package/memespeech)

\- Docs and detailed format specification: [https://gitlab.com/obsessivefacts/memespeech#memespeech- java...](https://gitlab.com/obsessivefacts/memespeech#memespeech-javascript- library)

</comment><comment><USER11> Oh my god this is hilarious.

It encodes your message into the bill of rights.</comment>


Work at Startup will be live streamed on JTV tonight - <AUTHOR> http://www.justin.tv/ycombinator <comment><USER2> RethinkDB gets my vote. Their openness about compensation is more counter- cultural than all the office nerf wars you can imagine. <http://rethinkdb.com/jobs/>

<comment><USER3> I also liked how they implicitly bashed 80% of the guys who presented by pointing out that they're doing "real" technology work, not just throwing a Rails app together.

<comment><USER4> Actually, we didn't mean disrespect to any of the other presenters (we're friends with many of them), or other startups. All of these guys are doing challenging work that requires superhuman efforts. We just pointed out that most startups are applying existing technology to business problems in new ways, while we're _inventing_ new technology (which means that in our case there's not only business risk, but technology risk as well).

We thought that the kind of people that would be interested in working on what we're doing probably wouldn't want to work on typical web startup problems, so we wanted to make that distinction with the first point.

<comment><USER3> I loved the pitch. :)

I thought it came off as playful/competitive smack talk, not mean spirited.

<comment><USER4> Apply!

<comment><USER3> Sorry, busy on my own startup. Best of luck to you guys!

</comment></comment></comment></comment></comment></comment><comment><USER5> Just a heads up. Now that the presentations are over, the recording can be found at this URL: <http://www.justin.tv/ycombinator/b/265435483>

Thanks for recording it.

</comment><comment><USER6> Are the companies supposed to be making elevator pitches? There doesn't seem to be much info on what it would be like working at each company.

</comment><comment><USER7> Airbnb really blew everyone away in terms of charisma. Also PG held up a "louder" sign for Sam Altman.

</comment><comment><USER8> Is there not a way to replay the video once it's offline?

</comment><comment><USER9> At what time is it at?

<comment><USER10> Presentations will start at around 6:25.</comment></comment>