hacker news with inline top comments    .. more ..    29 Jun 2017 Ask
home   ask   best   8 months ago   
Ask HN: A good primer on cryptocurrencies?
204 points by uptownfunk  11 hours ago   47 comments top 26
ktta 2 hours ago 0 replies      
To really understand cryptocurrencies, you must understand Bitcoin. Not just its inner workings but where it came from and how it became what it is today.

The rest of the cryptocurrencies are only hoping to gain Bitcoin's popularity (which Ethereum is getting close to) that it maintained for nearly a decade.

Back in the day the following links helped me understand bitcoin:



Once you properly understand bitcoin you are ready to understand other cryptocurrencies pretty easily. If some design choices don't make sense (secp256k1), then remember that Bitcoin's creation was close to when someone was caught doing something[1]. This is the answer to why many cryptocurrencies choose non-standard algorithms (aka. not NIST)


fzaninotto 3 hours ago 2 replies      
I wrote a three-part study on the Blockchain phenomenon a year ago, based on real experience with Ethereum. It's intended for web developers. It ends with an unusual conclusion.

- https://marmelab.com/blog/2016/04/28/blockchain-for-web-deve...

- https://marmelab.com/blog/2016/05/20/blockchain-for-web-deve...

- https://marmelab.com/blog/2016/06/14/blockchain-for-web-deve...

criddell 25 minutes ago 0 replies      
I first learned about Bitcoin when Steve Gibson did an episode of his podcast Security Now on the topic:


If you have an understanding of basic cryptography primitives, then I think it's an excellent introduction, especially if you learn well via audio.

olalonde 9 hours ago 4 replies      
The paper that started it all is still a good read: https://bitcoin.org/bitcoin.pdf
Jimbabwe 8 hours ago 0 replies      
This demo/primer on the blockchain itself is fantastic, if you're looking to understand the underlying technology: https://anders.com/blockchain/
bowaggoner 7 hours ago 2 replies      
I recently was researching bitcoin, blockchain, etc, and I found it surprisingly difficult to find good but relatively short resources! I synthesized what I found into some slides that you might find helpful[1].

Apologies if this seems like self-promoting my own slides -- and I should say I am not at all an expert here -- but I created them mainly because I had trouble finding a "primer", so maybe they can help others in a similar position.

[1] http://bowaggoner.com/talks/2017/bitcoin-etc.pdf

jgalvez 7 hours ago 1 reply      
I read this back to back and vouch for it:http://chimera.labs.oreilly.com/books/1234000001802

Bitcoin-centric, but covers a lot of ground.

azophy 1 hour ago 0 replies      
Aside from many 'theoritical' reading suggested by others here, I found that this tutorial is incredibly helpful: https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-co...

I myself have also made the PHP version of the code implemented there. You could see it here: https://github.com/azophy/naivechain-php

Hope it helps

aml183 2 hours ago 0 replies      
avery111 4 hours ago 1 reply      
I recently read the white papers of both bitcoin and ethereum. I would definitely read bitcoin's white paper first. I actually read the annotated versions from Fermat's Library:

- http://fermatslibrary.com/s/bitcoin

- http://fermatslibrary.com/s/ethereum-a-next-generation-smart...

thisisit 3 hours ago 0 replies      
I am no expert on this but it depends on what is your interest? Is it from a use case perspective or a technical one?

Technical perspective, people tend to conflate crypto currency with blockchain and vice-versa. Both are not the same. Crypto currencies are an implementation of the blockchain concept with their own twist on how to leverage blockchain.

A good primer on blockchain is - https://anders.com/blockchain/

Then there is the bitcoin paper which not only introduces blockchain but also explains bitcoin:http://fermatslibrary.com/s/bitcoin

The white papers of various currencies also provide the technical perspective and details on their implementation.

Use case perspective, you will have to rely on white papers by the specific coins. They will delve into how they look at blockchain to solve their problems. Beware these papers tend to be verbose and full of marketing fluff. So unless, as Warren Buffett puts it[1], within your area of competence there is nothing to be gained.

One thing I have realized over time is that many people writing stuff on cryptocurrency tend to be very verbose. Case in point:https://www.igvita.com/2014/05/05/minimum-viable-block-chain...

This in my opinion, and I am known to be very wrong most of the time, is because it takes the technical route to explain things than standard expressions.

Basic stuff like - what is a block is elongated with many technical terms. The simplest answer is "block is a public ledger and contains all transactions". Ledger is a legit word and you can find tons of articles explaining what is a ledger. But then you have tons of articles which skip this simple explanation in favor of a elongated explanation using technical terms and putting their own versions of what constitutes a transaction.

[1] http://www.businessinsider.in/The-Circle-Of-Competence-Theor...

ivan_ah 6 hours ago 0 replies      
I found this to be a good overview paper. Research Perspectives and Challenges for Bitcoin and Cryptocurrencieshttp://www.jbonneau.com/doc/BMCNKF15-IEEESP-bitcoin.pdf
sudshekhar 4 hours ago 1 reply      
Any good resources to understand the economics/finance impact of cryptocurrency and the broader scale implications of blockchains? Usage in different fields etc.
delhanty 5 hours ago 0 replies      
Four days ago I asked [1] for technical references on the differences between the Bitcoin and Ethereum blockchain length function, and @DennisP replied with 4 links [2] - Satoshi's classic paper and 3 good links on Ethereum.

[1] https://news.ycombinator.com/item?id=14624714

[2] https://news.ycombinator.com/item?id=14625430

satanic_pope 9 hours ago 2 replies      
Cryptocurrencies with Tim Ferriss, Nick Szabo and Naval Ravikant [Podcast]


Dnguyen 9 hours ago 0 replies      
elorm 3 hours ago 0 replies      
There's a ton of resources here as well


kumartanmay 4 hours ago 0 replies      
Cryptocurrency explained in plain english: https://www.linkedin.com/pulse/blockchain-plain-english-mike...
mlla 7 hours ago 0 replies      
One good resource for understanding on how Bitcoin works on a lower level is this article: http://www.samlewis.me/2017/06/a-peek-under-bitcoins-hood/

It goes through the details of creating a tiny Bitcoin client that can send transactions so that they will get included in the blockchain.

fiatjaf 2 hours ago 0 replies      
First try to imagine a way to have decentralized money on the internet by yourself.
corv 5 hours ago 0 replies      
Andreas Antonopoulos' 'Mastering Bitcoin' book.

In my opinion the best technical resource on Bitcoin.


His book on Ethereum is still work-in-progress.

kumartanmay 7 hours ago 0 replies      
I find the pictorial explanation of www.blockgeeks.com very very much interesting for a beginner. If anyone gets serious about it, the paper at bitcoin.org that started it all is a must read.
shiado 9 hours ago 1 reply      
I definitely suggest reading mastering bitcoin. The second edition appears to have recently been released. http://shop.oreilly.com/product/0636920049524.do
FullMtlAlcoholc 9 hours ago 0 replies      
This may be a more comprehensive resource in you're looking for but Princeton is offering a course on bitcoin via Coursera:


meritt 8 hours ago 0 replies      
wousser 7 hours ago 0 replies      
While on a similar topic, what would be a good primer on blockchain?
HN is my new Facebook
25 points by herve76  6 hours ago   17 comments top 12
dirtylowprofile 2 minutes ago 0 replies      
I just hope HN will have an official app in the near future.
marsRoverDev 2 hours ago 1 reply      
This only works until it gets too popular. Reddit was pretty awesome back in the day too, specifically because it had an HN-like crowd.
arximboldi 49 minutes ago 0 replies      
It is also like Facebook for me. Indeed, these are two first lines of my /etc/hosts and only uncomment them from time to time:

pssst 1 hour ago 0 replies      
This is my first post so here it goes:

I'm a 30 yo self-taught programmer from Romania and I've found this page a couple of months ago... since then this is my point of entry to the WWW, this is really adictive! :D

Great job maintining this!

parski 11 minutes ago 0 replies      
Pipe yourself to /dev/null.
COil 1 hour ago 1 reply      
Same here. Facebook will just make you loose your time and fill your brain with useless data.
matthberg 4 hours ago 1 reply      
I find that it's a near perfect niche for news. It's slim and dead-simple: there's one feed (two if you count new, then the subdivisions show and ask), no following or friends, direct messaging is even excluded. It was built into a niche, and it expanded to fill it perfectly.
zabana 1 hour ago 0 replies      
HN sounds very similar to the FFF forum in Gibson's pattern recognition novel. And I mean it in a good way. Also, if it's not on Hacker News, then it's not news.
slang800 4 hours ago 1 reply      
Yeah, same here. Just don't start posting cat photos or what you ate today.
danielharrison 37 minutes ago 0 replies      
I find medium is my new FB.
allenleein 5 hours ago 0 replies      
Same here.
fadolf 5 hours ago 0 replies      
same here, opens automatically.
Ask HN: What happened to the ORM?
73 points by olalonde  5 hours ago   69 comments top 40
ciconia 1 hour ago 3 replies      
I'm the original author of Sequel [1], an ORM for Ruby. Lately I've been finding that ORM's actually get in the way of accomplishing stuff. I think there's a case to be made for less abstraction in programming in general, and access to data stores is a major part of that.

I believe in most cases the efficiencies that can be gained from using an ORM is quickly offset by a substantial dependency on third-party code, limited control of performance, and inability to express more complex SQL expressions, such as CTE's, lateral expressions, JSONB functions and operators etc.

ORM's also tend to pile on lots of functionality, of which most projects will normally only use a small fraction.

For an in-production system I've been maintaining for the last 10 years, I've recently ripped out the ORM code, replacing it with raw SQL queries, and a bit of DRY glue code. Results: less code, better performing queries, and less dependencies.

[1] https://github.com/jeremyevans/sequel

git-pull 3 hours ago 3 replies      
ORM's are good form, why?

- Avoids mistakes when dealing with writing raw SQL queries (SQL is quite repetitive in practice)

- The declarative nature of classes maps well to types and relationships

- The declarative nature of classes maps out well to tables, even with polymorphism [1]

- Keeping "Models" in an ORM often maps out well to migration utility (Alembic, Django Migrations)

- Object-chaining map very well to queries

- ORM objects can be reused and composed

- They can abstract out intricacies across SQL dialects

- They can potentially make it easier to migrate to different SQL servers if no specialized features were used

- Can help avoid common security vulnerabilities like SQL injections

- When something can't be expressed via ORM relationships, they tend to allow the dev to drop down to raw SQL. In the case of SQLAlchemy, there is a core query language [2], too.

- In the case of Django, QuerySet is used as a standard throughout extensions that power a whole community. Plugins that don't even know each other (e.g. django-filter and django-tables2) can operate on the same django queryset to filter/search and sort/display data.

I mention QuerySet/Django ORM quite a bit in a recent blog post at https://www.git-pull.com/code_explorer/django-vs-flask.html.

[1] http://docs.sqlalchemy.org/en/latest/orm/inheritance.html[2] http://docs.sqlalchemy.org/en/latest/core/

slackingoff2017 3 hours ago 2 replies      
They're still alive and well, just not sexy anymore. The most popular one is probably still Hibernate which is helped by Java being the top high level language.

I never understood the ORM hate. Every place I worked we intermingled raw SQL when needed. Hibernate has a way to clear query caches so you can use raw SQL when you need to. You can just write raw SQL exclusively if you want within hibernate so I don't get how you could lose anything :) .

Still, my experience is mostly with Hibernate. It's extremely mature, meaning reliable, feature complete, and only 0-30% slower than raw queries in most cases. It makes adding support for things like multitenency and audited tables a breeze without losing database agnostic behavior. It makes database upgrades a no-brainer 95% of the time too. It has a built in memory caches that help enormously with common queries. Probably the biggest thing is it makes the database strongly typed so it's possible to refactor. Code refactoring in Java is easy but raw stringified SQL is nearly impossible to fix in any language.

I think the biggest counterpoint to ORM is shitty ORM. Things like SQLAlchemy generate downright horrific SQL slowing everything to a crawl and causing deadlocks. Another honest counterpoint to ORM is the learning curve. Everyone is taught SQL but the ORM is more abstract and harder to reason about, not a fun thing to learn.

TBH I think most ORM's are just poorly done. Putting an object abstraction on a relational database is hard. The only ones I've enjoyed for completeness and performance are Hibernate and to some extent Entity Framework. EF being the easiest to use but a bit slower with less features.

I have heard good things about Dapper but never used it. I like the idea of injecting a SQL DSL into the language itself, wish it was more prevalent.

coldtea 3 hours ago 1 reply      
What happened to the ORM?

To my opinion, it was a bad solution to the wrong problem.

For one, we're not that enamoured with objects anymore (what with functional programming, immutability, etc).

Second, SQL and DDL, being declarative, is both a higher abstraction that (at least) most ORMs, and offers more fine level control to the DB at the same time!

Third, people don't really switch databases that often, for the abstraction between different SQL syntaxes to matter.

_Codemonkeyism 2 hours ago 0 replies      
I thought we've been through :-)

"ORMs are a thing of the past" (2009) http://codemonkeyism.com/orms/

"Be careful with magical code" (2010)"[...] ORMs and in particular Hibernate [...]"http://codemonkeyism.com/beware-magical-code/

fzaninotto 1 hour ago 1 reply      
It's now called GraphQL. Let me explain.

First, the need for data has moved from the server to the client side in API-centric architectures. The backend is often just a dumb HTTP layer on top of a (sometimes relational, sometimes not) data persistence. Heck, I even built apps without server, using PostgREST.

Second, on the client side, we don't need an object-oriented interface to the datastore, because JavaScript. But we do need a powerful declarative query builder, and static data types to build up on. GraphQL provides that.

Third, if the purpose of the ORM was ever to abstract the SQL dialect of the database, GraphQL has resolvers, which turn a GraphQL request into a request for the database of your choice. So it does that job, too.

Last, for the data crunching jobs that you decide to do on the backend, you often need specialized data stores (event store, document store, full-text search index), and ORMs don't address that. And since these jobs are often resource intensive, you need the best performance - therefore falling back to raw SQL in most cases.

ORMs were a good solution for the kind of software architectures that were used for the web in the 00s. Since then, we have different needs, which require different solutions.

Disclaimer: I was the maintainer of a popular open-source PHP ORM [1] for 3 years. I no longer use ORMs.

[1] http://propelorm.org/

codeulike 3 hours ago 0 replies      
An old article, but still somewhat relevant I think:

"ORM is the Vietnam of Computer Science" (2006)


TheAceOfHearts 14 minutes ago 0 replies      
It depends a lot on the project. I think learning SQL and basic database theory are a strict requirement. ORMs are a great tools to help make life easier, but you'll need to reach in sometimes in order to fix performance bugs. I've learned to love both.

ActiveRecord is amazing. It makes it really easy to get stuff up and running, and it works for a wide range of problems. There's nothing better for typical CRUD operations, especially when you models map mostly 1-to-1 to your tables. You start to encounter problems later on as the application grows, especially when you have lots of associations, complicated queries, or your models grow too fat.

Maybe your problem isn't really with ORMs, but with MVC or whatever application architecture you're using. For example, Rails has been criticized because of its fat models and its overall "flavor" of MVC.

Trailblazer [0] was created by a Rails critic as an alternative approach for structuring your web application. I won't go into the details, since the website already does a good job explaining. But he effectively kills the traditional model and shifts the persistence layer around, which is a fairly common pattern.

I remember reading book that discussed ASP.NET's approach to MVC. I don't quite remember all the details, but it mostly amounted to having four primary layers (presentation, application, domain, infrastructure) which were further divided and given specific responsibilities. This approach is overly verbose and complicated for some cases, but the abstractions appear to make more sense as the application increases in complexity. A small example is an application in which you have to break up a model's data between multiple storage services like Redis and the RDBMS.

You'll probably like Ecto [1]. It's an ORM for Elixir. After the 2.0 rewrite it's a lightweight embodiment of some of the concepts mentioned above. One of the key insights is that you'll want to separate business logic from data and presentation. But it really depends on the project! It might help or it might just add more boilerplate.

[0] http://trailblazer.to

[0] https://hexdocs.pm/ecto/getting-started.html

oliwarner 15 minutes ago 0 replies      
Django user here. I feel like it got settled a while ago.

I think that probably encapsulates the whole issue here. ORM isn't one thing, it's a whole range of implementations and use-cases. For the sorts of annotations and reports I need to generate, Django has really started to come into its own in the past couple of years. Well on top of schema migration, caching and things like that.

So I wouldn't go looking for one answer. It's always going to be contextual.

barrkel 2 hours ago 1 reply      
My experience is strongly flavoured by developing and optimizing on the edge of what the database is able to do; and my performance condition isn't scaling up millions of tiny trivial queries, but getting big hairy dynamically generated queries to execute efficiently within a deadline.

No ORM comes remotely close to being able to solve this kind of problem. The kinds of things I need to consider:

- analyzing select / predicate / order / etc. for tables used and selectively including tables

- forcing query evaluation order by creating a subtable query with conditions, projecting out an id, and rejoining in the next query up

- analyzing predicates and rewriting predicate trees to push predicates down into subtable queries, or convert predicates into joins, or replace references to columns on other tables with denormalized columns

- gathering heuristics about query set size and changing query generation technique

- splitting queries into parallelizable queries and composing result set client-side

An ORM doesn't really help me. Even a library tuned for symbolic manipulation of SQL doesn't help hugely; my life is made much simpler when I can freely extend the SQL AST classes with my own analytic and rewrite methods.

jasonkester 2 hours ago 1 reply      
Nothing. They're just as bad an idea today. I think perhaps that message had begun to sink in.

Developers have this unreasonable fear of the SQL language, and I can't really understand why. Sure, it's different. But then so is CoffeeScript and everybody seemed fine learning to draw little arrows in their code for the six weeks that was popular.

For me, SQL is the perfect language for describing and working with databases. "Computer, give me a list of Students who are taking Algebra 101". But developers really seem to prefer taking that whole Student list and spinning through it themselves, looking up every class everybody is taking and building their own list thank you very much.

And instead of using a simple, concise way of defining data tables (that follows that same elegant data retreival and manipulation language), devs would much prefer something with angle brackets.

So they never bother learning the easy way of doing things and spend several years inventing something more complex and opaque.

Eventually, I guess enough people got fed up of dealing with the silliness and picked up a book on SQL.

TurboHaskal 2 hours ago 0 replies      
It could be that most haters are simply using the wrong one? If JPA was my sole experience with ORM I would side with the haters as well, fortunately I built enough successful projects using DBIx::Class and SQLAlchemy to understand the advantages of using an ORM to the point that I refuse working without one.
madiathomas 2 hours ago 0 replies      
Not sure in other platforms, but in the .NET world, ORM(read Entity Framework) usage skyrocketed and improvements are made with each version of .NET released. I use Entity Framework. Both at work and when doing my home projects. Code First. I started with Database First and only recently moved to Code First. It feels so good modeling my database using C#.NET classes instead of doing it in SQL. Don't get me wrong. I do like SQL and I am very good with it, but I prefer C# better.

Speed of development greatly improved since I switched to EF. Speed of development is what matters most for me when building first version of an application.

alex_hitchins 1 hour ago 0 replies      
I come from a heavy C# background. I can say that MS has been revising their Entity Framework platform and it's a perfectly good ORM tool to use.

Being stubborn and old-school, I prefer the lower level roll your own approach for speed and efficiency. That said, if dealing with an enterprise application where ease of code mendability/adaptability is key, I'd happily go with something like Entity Framework.

It would be interesting to see if code generation tools have progressed in this domain at all. I remember several data layer class generators which although not exactly an ORM, could provide many of the same benefits.

bendermon 2 hours ago 0 replies      
The big question is when to use ORMs/raw SQL.

SQL is the most concise and perfect fit for RDBMS.

However, at the application level there are benefits of using ORM.

- The application itself is usually imperative style as against the declarative nature of SQL.

- Chaining is sometimes more readable and concise. One can chain dynamic filters.

- Abstract the underlying data model with higher level names. SQL eq. of table views.

- Hides the underlying relational model. Which can sometimes be helpful in a large code base. And sometimes a curse.

I normally opt for ORM in Rails/Django web apps. But SQL in

- Performance critical- Report generation, where it might be complex and declarative nature of SQL shines.

douche 2 minutes ago 0 replies      
I'm still using Linq-to-SQL in the .net world. For 99% of what I need it to do, it works golden. Once in a while I've got to go in and profile and rewrite a query when somebody that doesn't know what they are doing has introduced an n+1 query, or done something overly "clever" that's resulted in gnarly SQL being generated.
samblr 1 hour ago 0 replies      
ORM gets in the way of programming.

ORM abstracts which something developers know as his/her fundamentals : SQL statements. For simple operations this abstraction doesn't hurt. But this abstraction becomes obfuscation when we write complex queries or statements.

First a developer has to figure out complex SQL query to solve a business problem. Then has to figure ORM equivalent to it. Then ,ofcourse one should, write original SQL query in comment section above ORM API query to help figure whilst debugging.

Once into debugging, if original SQL query is missing in comment section or hasn't been updated. Spend extra time on what is wrong with both queries. Which one is right/wrong and then how to solve the problem.

Although, I do see some value in ORM in migrating to another DB or abstracted objects of tables-and-properties.

But for simple reason of learning additional set of apis to run SQL statements hurts!

lz400 2 hours ago 0 replies      
I think part of the reason they are not talked about anymore is that people like to talk about the hot and sexy and not the mature and incrementally improving. The hot and sexy now is full of Javascript and noSQL so ORMs aren't as relevant as before. ie: schemaless JSON + dynamic languages have eaten a big piece of the cake.

That said, people seem to still use ORMs in Ruby, Java, C#, etc. and frameworks look fairly mature.

out_of_protocol 48 minutes ago 0 replies      
Take a look at Ecto (kind-of-orm for elixir), didn't even hear about anything comparable for other languages (which is sad)

* No impicit N+1 and stuff like that (elixir is functional with immutable variables)

* Whole "orm" is really fast, thanks to macros (compile-time metaprogramming)

* Can express very complex queries, allowing raw sql then necessary


richardknop 2 hours ago 0 replies      
One of the issues is that programming languages are evolving so fast it is hard for ORM libraries to keep up.

A good ORM library needs to be well designed, battle tested and mature. Then it provides great benefits over writing just raw SQL. That takes years of development effort.

The problem is that with new languages (Node, Golang, Rust) there hasn't been enough time and effort put into ORM yet to produce something good enough to be usable.

When developing in Java or Python there are great, mature and battle tested ORMs I would use but with these new languages I had bad experience with ORMs as they still seem experimental and have issues therefor stick to raw SQL when working in newer languages.

realusername 2 hours ago 1 reply      
I still use ActiveRecord a lot (Rails) and I would not write SQL queries manually since the ORM works so well. But I used ORMs in other languages and they were not as convenient so maybe it depends on the ORM itself. The time it saves compared to standard queries is massive.

ORM haters would likely point out that complicated queries are hard to write with an ORM but these complicated queries are not a massive part of the work and can still be abstracted away in a method using SQL if needed.

Another good point of the ORM: validation of data. There are plenty of validation you cannot enforce in SQL (regex, postcode...).

circlefavshape 1 hour ago 0 replies      
I work someplace where the primary db schema is very poorly structured, and the one attempt we (or rather a single dev that was under-supervised) made to use an ORM was disastrous - a single http request would generate literally hundreds of queries. I don't know whether the problem was the dev himself or the ORM or the db, but either way we're having to replace everything and I've been put off ORMs for a very long time to come
baq 3 hours ago 1 reply      
there's raw SQL, there are ORM and then there's the mid layer of DSL-ish query builders like sqlalchemy.core, which are amazing if you've ever been dissapointed by not being able to compose queries in a sane way in SQL.
jzwinck 1 hour ago 0 replies      
I mostly use this now: https://pandas.pydata.org/pandas-docs/stable/generated/panda...

Which is basically an easy to use API that turns a SQL query into an efficient columnar table in memory.

Yes, this still requires writing actual SQL. And yes it does not help you insert or update data. But for 95% of uses it works well.

watwut 2 hours ago 0 replies      
I never seen orm as abstracting database out. More like easier to maintain way to access it and have features like caching/consistency available without much work.
stuaxo 2 hours ago 0 replies      
SqlAlchemy and the Django ORM are good - recently worked on a C# project and the devs are very anti-orm.

I think, the REPL makes a huge difference.

In a python project, getting a shell at any point - or experimenting in the shell Jupyter is really straightforward.

The brackety languages have options for this sort of thing now, but it is still just a lot more hassle - the easiest way to get something similar is to just write SQL.

neverminder 2 hours ago 0 replies      
Nowadays I'd say there's something better than ORMs, take Slick (Scala) for instance, it's an FRM (Functional Relational Mapping) or JOOQ (Java). Both of those provide pretty much 1:1 DSL to SQL while at the same time granting a lot of flexibility and type safety.
Ciantic 2 hours ago 0 replies      
There are ORM's in functional languages too, but they too have problems. Mainly the problems arises from SQL being structurally typed, meaning you can JOIN totally unrelated tables as long as they have columns with same types.

Practically there are no programming languages that allow to do all set operations on properties of records. Though Elm comes close. If the language has this peculiar feature, it should be possible to write a "ORM" that just works for all queries (given that the language has similar flexibility).

pastaelle 1 hour ago 0 replies      
The point of an ORM is not to be some magic 1:1 powerhouse, but to make it easy to abstract your storage layer. If I had the time and resources, I would make storage plugins with testing interfaces and dependency injections that precisely match the query patterns of my application. ORMs are almost never an ideal fit but they give me that for free out of the box.
tanilama 2 hours ago 0 replies      
ORM is a leaky abstraction. It does provide benefits, like avoiding SQL injection, however, it still don't have the level of flexibility as SQL, and probably will never do.

It is still useful though, but hardly stands on its own term.

forgottenacc57 2 hours ago 0 replies      
I used to use an ORM but I discovered in fact that SQL gives me precision, control and performance and indeed I like it. I'll never go back to the ORM.
darkblackcorner 2 hours ago 0 replies      
What's wrong with ORMs?I tend to use Dapper. I've found that it can solve most of my problems, and it's easy to drop back to raw SQL as needed for the last 5% that need finer control. It's also super easy to extend and customize based on my requirements, and it's almost as fast as raw SQL.
Scarblac 2 hours ago 0 replies      
We write science and GIS related interactive web applications. All our backends are Django because every application has some CRUD components somewhere and in general Python and Django have fantastic libraries available.

The Django ORM just works, I love it, it's never in our way and does what we need.

Sakes 1 hour ago 0 replies      
There are a number of things you can do to improve performance of queries generated by ORMs.

* Make sure you are indexing properly

* limit the number of items returned by introducing paging

* use lazy loading where applicable

I'm sure there are other techniques, but these are my gotos.

COil 2 hours ago 0 replies      
The problem with ORM? I always forget DQL "like" syntaxes while I never forget raw SQL.
ux-app 2 hours ago 0 replies      
ORMs aren't very good. They make simple things slightly simpler and get in the way the rest of the time.
INTPenis 2 hours ago 0 replies      
What I see are often custom ORMs implemented for a specific library or purpose. Many of the APIs I work with daily are in fact a type of ORM.

That said, I never use an ORM myself unless it's one I implemented as stated above.

repomies691 2 hours ago 0 replies      
It is a good tool, people use it, however it turns out it was not a silver bullet (tm). I think it is pretty much settled for what things it makes sense or not.
flukus 5 hours ago 0 replies      
They still have their uses, particularly with largish LOB/enterprise apps. For me they are no longer the goto solution for apps I write though, if I started building one today I would start with an "ORM lite" (never liked the term) like dapper. If it ever got big and complicated enough that an ORM was justified then I would introduce one.

I find an ORM really excels when you've got complicated business logic, the sort of thing where there are dozens of business rules that may or may not be involved in any given installation. Something like this is extremely stateful and and ORM does a great job of tracking this state. In fact, this is what I'd define an ORM as, a state tracker for database modifications. If you don't have much state then you probably won't get much out of an ORM.

Even when using an ORM does make sense, it's important to remember that they don't make sense everywhere. For a performance critical or particularly complicated query then SQL should still be a fallback.

DanielBMarkham 1 hour ago 0 replies      
I currently think ORMs might be an anti-pattern, but I'm interested in what other folks think. It's the same kind of anti-pattern that led us down the path of taking Object-Oriented Analysis and generating an entire stack using MDD.

The thing is, you should really only want your database to do a small number of things, and those things you should pay special attention to. You don't want a database that does everything and all runs on autopilot. Then who the heck is coding the system?

I think most any app has a reasonable number of features which map to an also-reasonable-number of function calls back to persistent storage. Identify those and make them first-class citizens in your coding. After all, aside from UI dazzle, that's where all the magic happens.

Ask HN: What are the best books on modern computer graphics?
273 points by BigJono  1 day ago   74 comments top 23
Jare 1 day ago 5 replies      
I would not advise anyone to try to get into computer graphics directly with the Vulkan or DX12 APIs. Start with DX11, modern OpenGL and/or WebGL, and work through your computer graphics theory (and a lot of practice) using those. Geometry, illumination, shaders, tools and GPU computation will take a lot of time to master. When you decide you want to go into low level APIs, if you are comfortable with Apple systems, Metal will likely be easier than Vulkan/DX12.

A lot of the theory from classic books is still valid, so even a copy of Computer Graphics: Principles and Practice will look fine on your desk. "Real Time Rendering" by Moller/Haines and "Physically Based Rendering" by Pharr are excellent. "Game Engine Architecture" by Gregory and "Mathematics for 3D Game Programming and Computer Graphics" by Lengyel will probably prove very useful and relevant to you as well.

Online resources, the free https://learnopengl.com/ and the $10 http://graphicscodex.com/ are both fantastic. Make sure to read https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-..., and also study the techniques used for the craziest entries in https://www.shadertoy.com/

And then, lots and lots of papers and presentations from the past 5 or 10 years of Game Developers Cconference and Siggraph.

jacobparker 23 hours ago 1 reply      
If you're interested in something that's not strictly real-time a good book is physically based rendering http://www.pbrt.org/ . It uses a literate-programming style which is neat. It's about path-tracing which is similar to ray-tracing but can give an unbiased approximation to the rendering equation (which is a reasonably accurate model of "everyday" optics.) Here is a JS+WebGL (mostly WebGL ;) ) interactive path-tracer: http://madebyevan.com/webgl-path-tracing/


Vulkan is pretty boring to be honest. I'm very doubtful that you want to bother with it if you're just starting. Using these APIs is like filling out tax forms, but Vulkan is a lot more effort than OpenGL (but, OpenGL is weird...) Learning shaders in OpenGL will be pretty transferable knowledge. Vulkan uses a lower-level assembly-like language, SPIR-V that doesn't pretend to be C (like GLSL) but there are GLSL to SPIR-V compilers. I can't comment on DX (I haven't used it.)

Here's a tutorial on drawing you first triangle: https://software.intel.com/en-us/articles/api-without-secret... . Note that there is a lottttt of code to do this (this is part 3...) I really think you could learn more about modern graphics with glBegin(GL_TRIANGLES) and writing GLSL shaders than boring yourself with Vulkan.

If you do want to play with Vulkan there is this book (piggy-backing off the rep from the old "OpenGL Bible") https://www.amazon.com/Vulkan-Programming-Guide-Official-Lea... . I can't give it an honest review because I got bored; I plan to pick it up again later...

gregorburger 23 hours ago 0 replies      
- As a starter Realtime Rendering [0]

- The siggraph courses on shading [1]. The 2017 course will be on 30th of July [2]. Current techniques from AAA engines.

- Papers from JCGT [3].

- Plus the paper collection from Ke-Sen Huang linking all graphics related conferences [4]

have fun reading

[0] http://www.realtimerendering.com/book.html

[1] http://blog.selfshadow.com/publications/s2016-shading-course

[2] http://blog.selfshadow.com/publications/s2017-shading-course...

[3] http://jcgt.org/read.html?reload=1

[4] http://kesen.realtimerendering.com/

davidwparker 21 hours ago 1 reply      
If you have any interest in WebGL (1), I've been publishing screencasts on YouTube for a while now- I'm up to nearly 100.

The playlist for WebGL is https://www.youtube.com/playlist?list=PLPqKsyEGhUnaOdIFLKvdk...

I'm also covering 3D Math fundamentals now.

My channel https://www.youtube.com/user/iamdavidwparker

Guyag 22 hours ago 0 replies      
I can't recommend Scratchapixel enough for diving deep into the concepts behind CG (although it seems to be down for me at the moment ironically). I can't remember how much it goes into libraries or if it sticks to implementing things from scratch, but I find knowing the concepts behind something makes learning the libraries much easier anyway.


escapetech 21 hours ago 1 reply      
What many people fail to realize is that the older and fixed pipeline legacy API's in modern graphics cards are emulated with thin layers directly on top of the modern stacks. On today's iOS devices, OpenGL ES 1.0 is emulated with the OpenGL ES 3.0 API, which very likely in turn is emulated with the Metal API.

If there was a genuine interest in helping the transition to the newer API's, the different parties writing and implementing today's API's would publicly make available the code for emulation layers to the older API's.

nikivi 1 day ago 0 replies      
We made a mind map for learning computer graphics :


The basics node has the best resources for learning the subject.

open_bear 20 hours ago 0 replies      
Fabien Sanglard's bookshelf has all you need: http://fabiensanglard.net/Computer_Graphics_Principles_and_P...
samlittlewood 23 hours ago 0 replies      
Whilst not realtime rendering - Physically Based Rendering (Pharr, Jakob & Humphreys) http://www.pbrt.org/ is great for understanding what people are trying to achieve, without being distracted by very detailed optimisation etc.
Mathnerd314 17 hours ago 0 replies      
It's not a book, but if you poke around the Unreal Engine source code you can learn quite a bit:


You need to join the org first, https://github.com/EpicGames/Signup

dahart 19 hours ago 1 reply      
@BigJono - it would help to hear a little more about your overall idea or goal of what you might want to do. Like are you thinking maybe game engine programming? Mentioning Vulkan/DX12 implies you might want to get into real time engine/shader programming, but that's only a small slice of "modern computer graphics".

If you're interested in computer graphics in general, and googling "modern computer graphics", then the Vulkan/DX12 APIs aren't super important, the fundamentals of CG have not changed at all. The paradigm shift with those APIs is centered on performance, not on new concepts. You can learn vast amounts of computer graphics by writing a ray tracer or animation program or using off the shelf renderers, and never touch Vulkan or DX12.

There are definitely lots of great suggestions here, but it's a wide variety, because it all depends on what you envision or hope to do. It doesn't have to be fully formed or thought out, but if you had some inking like 'hey I saw this awesome procedural animation on Vimeo and I want to learn how to do that' or 'I'd love to work for Valve someday... what steps do I have to start taking?' or 'I was thinking I should add some 3d to my website' or 'I want to be a film animator', if we had a little more insight on what you're hoping, we can definitely get answers that will be more focused and helpful.

bhouston 23 hours ago 0 replies      
I sort of know this area.... There two separate paths -- realtime or non-real-time.

For non-real-time there is: http://www.pbrt.org/

For real-time there is this: http://www.realtimerendering.com/

Neither book gets into the details of the specific API, they are theoretical.

Real-time techniques change nearly complete about every 10 years because GPUs get faster and render more techniques possible and obsolete the older less good looking techniques.

gavanwoolery 17 hours ago 0 replies      
IMO you should step back and ask: what is your end goal?

1) To make games (commercial games) or other realtime graphics application?

2) To make 3D rendering software or other semi-non-realtime software?

3) To have fun / learn?

4) Etc.

If you just want to learn/have fun, my personal recommendation is to write your own software, from the ground up. Ignore DirectX and OpenGL (unless you need them for a context to get pixels on the screen).Use a fast, native language like C/C++.

Teaching yourself and exploring is 100x more fun than reading a book, IMO (at the same time, you may learn faster using a book).

Try working with a naive projection algorithm to get 3d points on the screen. Like y' = y +/- z (Zelda-esque bird's eye view). When you are comfortable with matrices and vectors, learn "real" projection algorithms.

honestoHeminway 1 day ago 1 reply      
To be honest, the books in GFX programming are usually about old consolidated methods. The new stuff is - everywhere, in blogs, in papers, in shader-toys.
kobeya 11 hours ago 0 replies      
Real Time Rendering is particularly good at explaining the underlying concepts of modern GPU rendering pipelines.
auggierose 21 hours ago 0 replies      
I am picking up on computer graphics again now, too, after dabbling a bit in it well over 18 years ago (and for a small iOS game 8 years ago). I am restricting myself to Apples platform currently, this might not be what you want, but maybe others prefer it. They have great SceneKit WWDC videos dating back all the way to 2012. I recommend watching them from 2012 to 2017 in historical order. Also I am learning Blender, a free 3D authoring tool. I can recommend the free wiki book athttps://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro .
mi_lk 16 hours ago 1 reply      
Does anyone have comments on Ray Tracing Minibooks --Ray Tracing in One Weekend, Ray Tracing: the Next Week and Ray Tracing: The Rest of Your Life?


nkg 22 hours ago 3 replies      
Slightly off-topic, I am looking for resources about geometry applied to computer graphics (because I have forgotten everything I learned at school). Any advice ?
hyperpallium 19 hours ago 0 replies      
I understand that Vulkan is more efficient for the CPU, not the GPU. However, because it's low-level, giving more control over the hardware, it can enable new techniques that weren't possible before.

Do any of these new Vulkan (or Metal or DX12) techniques actually exist yet?

sciguy77 22 hours ago 0 replies      
I'm actually trying to learn compute shaders specifically. I've followed all the tuts and guides I could find and have made some neat things, but I still want more depth than I can just find through Google. If anyone has any recs for further study I'd really appreciate it :)
vram22 18 hours ago 0 replies      
There was a book written by a US college CS professor that I saw a while ago online. I think it was free to read online, maybe other versions were paid. Unfortunately don't remember the professor or book name now. It covered OGL and HTML Canvas. I remember thinking it looked good. Maybe someone else here can say what the book name is.

Edit: Maybe covered WebGL too.

CyberDildonics 21 hours ago 0 replies      
I would recommend starting with things like touch designer and/or houdini. Jumping into the programming side right away can be done, but understanding things visually should give a much better foundation. From there you can write shaders in real time in touch designer or put them together with nodes in houdini. Simple expressions and small python fragments can help understand what certain manipulations look like. From there the programming side will make a lot more sense.
Ask HN: DevOps learning resources
259 points by durian89  1 day ago   57 comments top 31
oblio 1 day ago 7 replies      
Well, the best way to learn is to actually do something. Create a small service in your favourite framework. Something really small, an echo service will probably suffice.

Then stop "developing" and switch on "Ops mode".


- builds (build & packaging scripts)

- deployments - try all 3 major approaches:

 - push deployment: running a command on a central server that orchestrates everything (Ansible, Salt, chef-solo, ...) - pull deployment: agents running on your target server, that pull the latest changes (Chef, Puppet, ...) - immutable infrastructure: VMs or containers that are never modified, only recreated (CloudFormation, Docker, ...) include database updates in your deployment orchestration and possibly include even environment pre-warming/pre-caching
- functional tests, especially fast smoke tests


- high availability/load balancing (Nginx, HAProxy, Apache, Elastic Load Balancer)

- detailed technical monitoring and graphing (Nagios, Zabbix, Cloudwatch)

- availability monitoring (Pingdom)

- a status page (can't give you a decent example; you can build your own, but host it somewhere else than your main "app")

- log collection and shipping (Splunk, Graylog)

Basically, for almost everything I listed google options and pick an "Ops stack". Then implement that as best you can.

Oh, and by the way, while working on the "Ops stack", only "develop" things in support of this Ops work in your "app".

organsnyder 22 hours ago 1 reply      
The first thing to realize is that DevOps is an ambiguous term (at least partly by design, it seems).

My beliefshaped by many at the forefront of the DevOps movementis that it is a cultural focus rather than a technical one. In many ways, it's an extension of agile philosophies, with a focus on fast feedback, transparency, heightened interactions between teams, etc. There is also a heavy focus on automation (CICD), but the automation is there to serve the cultural goals. Just because you do CICD doesn't mean you're necessarily doing DevOps, and you can adopt a lot of DevOps principles without doing full CICD.


* The Phoenix Project introduces a lot of concepts (such as lean principles) that are foundational to the movement

* Effective DevOps (Oreilly)

* The DevOps Handbook


* Arrested DevOps

* DevOps Cafe


* IT Revolution


* DevOpsDays conferences

* Local meetups

* Velocity conferences

* DevOps Enterprise Summit

Having a good grasp of both development and operations skills is helpful. But it's far from complete. If you solely focus on the technical aspects without examining the cultural, you're missing the foundation of the movement.

beaker52 23 hours ago 0 replies      
The Phoenix Project is a really inspirational novel, good for 'getting' the devops mindset and also as a tool to get other people in your organisation on board.


The DevOps Handbook is a sister book to The Phoenix Project which is more technically oriented around the practicalities of closer integration between Dev and Ops.


digitalsushi 22 hours ago 0 replies      
I work at one of the large insurance companies as a DevOps role wherein I convert the various product build processes into a CI pipeline. We use Jenkins (we use all of them, but our department uses Jenkins). Everyone has roughly the same process in general - you store some code in SCM, and then something checks it out, runs various "Quality Gates" (corporate speek for tests), and then you eventually build the product and commit it to some secure artifact repository. You put some logs on there that you're somewhat convinced employees can't modify or delete, and call that an audit trail.

Ok, so that said, I would say that for an open source core like Jenkins, the source code is hands down the only documentation you can trust. And that's very, very frustrating at first. Trusting what's in a wiki is the easiest way to burn a day, believing something that was once (possibly) true to still be true. Most interfaces are not documented at all, beyond system generated documentation. A certain class of developers are fine with that, but many of us need a little push up the hill in order to script our way around these ecosystems effectively.

After accepting that the source code is the single source of truth, the job got a lot easier (and made me come across as far more of an expert). But it's a difficult sell to get other people interested in sharing this work.

didip 20 hours ago 0 replies      
Have you written a webapp as a side project before? If yes, then great:

1. Find a bare VM provider, e.g. Linode or Digital Ocean or EC2.

2. Figure out a way to get your code up there, even if it's ghetto. e.g. git pull from github. Get the app server running.

3. Figure out how to expose your app to the internet. Buy a domain name, get it to point to your IP addr. Soon enough you will realize that DNS load balancing is terrible...

4. Then you should install Nginx or HA proxy and put your app behind it. Run your app on localhost, only nginx should be exposed.

5. Once everything is up, iptables is your next concern, expose only ports you want and disable everything else.

6. Repeat 1-5 on a second instance.

7. Soon enough you will find that repeating the same thing sucks, so you will write Python script using Fabric library. But then you realized someone else have done this already, after a quick googling, you will find Ansible or Salt. Use those instead.

8. Rinse and repeat for other networked things. e.g. databases, mail relays, cache servers, etc.

9. Evolve your approaches, rewrite ghetto stuff, make your artifact as immutable as possible with very few network dependencies...

That's pretty much the entire devops evolution up until 3 years ago. Once you got good in these...

1. Start reading about Linux container and why they are useful.

2. Install docker and try to get your toy project in a dockerfile.

3. Repeat the learning exercise again on deploying Docker containers.

Hope that helps :)

nikivi 1 day ago 4 replies      
I made a mind map for learning DevOps :


Clicking on nodes with a map will go to other mind maps with resources.

ransom1538 20 hours ago 3 replies      

One word of caution. The future really will be having a docker file and finding a place to run code (docker swarm, ecs, etc). When you commit code it will be ran through a ci system (unit tested, staged) then updated.

The salts, puppets, chefs, Vaults, running your own Kubernetes (wtf), VMs, Nagios, sendmails, vpcs and all this other drama will be latin in a few years.

The future will be running the code on your macbook (with container of choice), then commiting. The end.

perlgeek 21 hours ago 0 replies      
For the build/test/integration/deployment cycle, there's "Continuous Delivery" by Humble and Farley: https://smile.amazon.com/Continuous-Delivery-Deployment-Auto...

I found that very good for understanding the principles and reasons. Implementing it was a very frustrating experience for me, which is why I wrote a (much shorter) book on how to do it practically, with worked examples: https://leanpub.com/deploy

richardknop 15 hours ago 0 replies      
Do you have a website / blog or any other hobby project?

You can learn basics by automating its deployment.

Let's say you will go with public cloud: Amazon or Google.

Create a small basic infrastructure with some automation tool such as terraform.

For example a VPC with private subnets and two small instances in different availability zones. Another instance for NAT and a load balancer.

Then use Ansible / Puppet / Chef to automate deployment of your application, make sure you can deploy without any outage to the service (set up some health check to verify your app is always up).

Perhaps deploy the app in a container. Automate security settings to lock down ports. Automate SSL certificate renewal with let's encrypt.

You can even take it a step further and automate deployment of a PaaS like Kubernetes or CloudFoundry and deploy your blog / website there.

Next task would be setting up CI pipeline and continuous deployments. Integrate it with PaaS.

Where do you store all secrets and credentials? Look at solutions such as Vault from hachicorp or Ansible Vault.

There's a lot to learn by just automating everything about a simple hobby project or blog.

Of course after you're done with this scale down all this crazy infrastructure so you don't pay $200 for a blog.

Juliate 23 hours ago 1 reply      
Also, if you can afford it, the Site Reliability Engineering book is an excellent comprehensive resource on practices, theory, return from experience: https://landing.google.com/sre/book.html (and you can read it online for free, too).
wyclif 23 hours ago 0 replies      
This is a less general answer, but if you want to work with AWS and you have a Kindle, download the manuals for free and read them during down time. I did this and it helped me a lot.
eeZah7Ux 21 hours ago 0 replies      
badri 10 hours ago 0 replies      
Like most comments here, I'd suggest you get started by deploying your side project to any of the cloud providers out there. This process alone will teach you a lot about deployment.Also, I find https://serversforhackers.com/ and https://sysadmincasts.com/ very useful.
kellet 22 hours ago 0 replies      
Over at DZone, we have big community of developers sharing tutorials and content that could help introduce you to DevOps.

For starters, we have an entire web portal with thousands of free community-written articles about DevOps-related topics:https://dzone.com/devops

We also have several Refcardz (cheatsheets) on a variety of DevOps related topics:

Deployment Automation Patterns https://dzone.com/refcardz/deployment-automation-patterns

Continuous Integration Servershttps://dzone.com/refcardz/continuous-integration-servers

Continuous Delivery Patternshttps://dzone.com/refcardz/continuous-delivery-patterns

And for an introductory overview, we provide topical research and best practices Guides. Here is our latest 2017 DevOps Guide:https://dzone.com/guides/devops-continuous-delivery-and-auto...

imperialWicket 19 hours ago 0 replies      
DevOps is a moving target right now, and a lot of great fundamentals are linked here already. I'd also recommend subscribing to, and reading old issues of:


The last two are fairly young, but have good content so far. I wouldn't call it a well-curated list, but there are tons and tons of great posts are linked (in loosely chronological order, as weekly mail blasts tend to be).

gshakir 22 hours ago 0 replies      
DevOps is a such a broad term and can mean lot of things. If you are looking for something related to orchestration, I am putting together some Ansible recipes specific to AWS. It is here at https://github.com/gshakir/ansible-recipes
rb808 21 hours ago 0 replies      
The new cloud space has changed a lot in the last few years. A short time ago I'd say you should learn about creating VMs, using ansible, scripting etc, now Kubernetes and Docker has changed much of that. Its worth looking at which space you want - with Kubernetes etc you barely need to know any Linux or scripting.

People learn differently - but I'd recommend starting there. Get the generous Google Compute intro special and write some apps. There is a bunch of free resources on the web - I can't point to anything specific. Linux academy, Safari books online are huge but not cheap.

jpzisme 20 hours ago 0 replies      
Work through all of these tutorials on containerization and orchestration found here: https://github.com/docker-training/orchestration-workshop

When running the Dockercoins example, how can you scale it up to mine as many coins as possible? How would you set up alerts for if one of the services went down? How would you diagnose the problem? What other tools might you use?

Play around and see what tools you like and don't like. Have fun!

1ba9115454 1 day ago 0 replies      
I just searched "list of curated devops github", this is what I got.

Awesome Devops. A curated list of resources for DevOps


garysieling 1 day ago 0 replies      
gmjosack 20 hours ago 1 reply      
Few resources I haven't seen mentioned yet:


If you're looking for a community of people to interact with I've found the following Slack teams to be very active with lots of helpful people:



ajmarsh 22 hours ago 1 reply      
Linux Academy. Not free but has a very nice DevOps learning track.


mpdehaan2 21 hours ago 0 replies      
(In case the handle is missed, I created Ansible and I'm a little opinionated on this)

DevOps isn't really a thing, but an amalgam of things. Some people think it's about culture or something, which I think is too obvious to be a thing. In the beginning when many people were using the word lightly, most people really just used it to mean automated systems administration, which is more likely called "Operations" now. That's fine. Some people use it to mean groups of people who make ops tools to allow developers to self-deploy their own stuff. That's also fine.

Most likely what you are looking for is to learn how to do IT Operations stuff they way people are currently doing it.

Reading a lot of articles is fine, trying lots of tools is fine. Talking to people at your company that DO ops is huge. Make friends with the guys who run the build systems, do security, or anything like that for starters and they can show you lots. Plus I strangely find that ops guys are much better to go to lunch with than developers. Don't know why :)

You should read up on AWS lots, as it will likely be across your career path at some time. Try a configuration management tool (or two). Learn about monitoring systems and logfile collection/analysis systems. Do a little bit of reading on computer security. Vagrant is probably useful, but optional, though you should at least get going on a virtualized Linux box. Reading up on Immutable Systems is worthwhile. Pick up either CloudFormation or Terraform, or both if on AWS. I don't know Google as well, but it has a lot of similar things.

DevOps Days conferences can be good sometimes but often they are too cultural to get down into technical bits. But they are cheap and usually close by, so they are things.

If you have a local meetup group that can be absolutely great.

The really nice thing about AWS now is there are tons of parts and it is pretty cheap to try things out, where before you probably couldn't get your IT guy to let you play with a load balancer or get you your own database instance. Now you can, so that makes it a lot easier to learn than it was before.

IMHO I don't like books because they are often written by people who don't DO things (DevOps has an unfortunate "thought leader" problem, which impacts conferences and tries to get everyone to believe the same things), and podcasts/videos are too slow for me, and my brain is a lot more random access.

Don't get caught up in assuming you must do any one particular thing. For instance, Continuous Deployment is a spectrum, it's not appropriate for everyone.

And at most people's scale, you have no need for something like Docker or Kubernetes when basic AWS instances require a lot less to keep going in your head.

ozkatz 22 hours ago 0 replies      
I use pocket to collect (and tag) links related to the field. I hacked together a small UI around it that lets you filter them by tags. There's a lot of good content there IMHO.

You can check it out here: http://links.ozkatz.com/

iDemonix 16 hours ago 0 replies      
I'm trying to build up the effort to finish writing my book on monitoring, let me know if you'd like to read it and it might encourage me to push on.
southpawflo 20 hours ago 0 replies      
get a digital ocean account and a domain name. start a lamp server (or equivalent), use the excellent (imo) documentation to get things running. add services as you go along. I learned a lot from just that, now I have my own webserver, source control (git server with gitea) and other things running. tons of fun and learning
mehzer 22 hours ago 0 replies      
Vendor specific but a lot of good tutorials http://learn.chef.io
atsaloli 23 hours ago 0 replies      
Check out:- The DevOps Handbook- State of DevOps Report 2017- Guide to Sysadmin Body of Knowledge www.sabok.org
samstave 22 hours ago 0 replies      
Where do you live? If you'd like to meet up, I'd be happy to braindump as much as possible on you.
Ask HN: As an employee of a company, how do you assess its health?
253 points by dpflan  23 hours ago   183 comments top 75
tiredwired 22 hours ago 3 replies      
They suddenly decide to inventory equipment (determine company value or collateral). Cutting back on benefits like 401k matching. Delays buying new equipment. People quitting and not being replaced. Senior management having all-day private meetings. They request your background information as if to determine if you are qualified for current or new positions (if company is discussing being acquired). Hackathons with a theme completely off target from current products. Multiple sets of men in suits touring the office. Managers stop downloading latest version of the beta-test app. Managers stop showing up for meetings. Managers stop caring about product quality. You look up from your desk and realize the office is empty when it should be busy - either those people are being terminated or you are being terminated.
fnbr 22 hours ago 1 reply      
There's a great article on this topic from Steve Blank:


He argues that a leading indicator is when free food/drinks are removed, as it's a sign that the company is moving from a growth, "we're all in it together" mentality to a cost-cutting one.

I, personally, focus on who's getting promoted and who's leaving. If a company is promoting internally and retaining people, then it's typically in a good place; if a lot of people are getting hired above others, and new employees aren't staying long, then it's in poor health.

shimon 22 hours ago 4 replies      
One simple thing missing in most of these replies: ask questions. Ask your boss, ask your peers, ask the CEO now and then.

 - How is the company doing against its goals for the year? - What does our runway look like? - What signs of product success are we expecting? What are we seeing?
Note that in any company, and especially in a startup, all of these questions are rife with uncertainty and stress. You should expect these to touch a nerve, and request brutally honest answers. Leaders experience existential fear on these topics frequently, even in great companies.

In the responses, be wary of blithe positivity more than bad news. Bad news is normal; a healthy organization learns from it and improves. Optimism disconnected from reality is either an attempt to mislead you or a sign of blindness to results.

corobo 22 hours ago 1 reply      
I generally work for smaller companies, < 50 total staff. Most of my variables and data pieces others have said. My main "rats, sinking ship" is in regards to others working there;

Health note: Employee churn when churn is not the norm.

Health warning: Certain people leaving with enough business knowledge it's noticeable they're gone

Health crisis: Multiple health warnings in quick succession (within 2 years).

At warning level I make sure my CV is updated and start setting up job alerts. At crisis I'm actively applying for jobs to keep my options wide open.

Edit: Ooh reading another comment - I watch the public docs of the company I'm working for. It's a year or so out financials-wise but you can get some info from it.

pgt 22 hours ago 2 replies      
Cutting of catered lunches is a strong signal that the company is in a cash crunch. You can try to propose a weekly catered lunch at your company to "encourage communication" and watch it is a signal. In the past I instituted weekly catered lunches at a company, which were halved from weekly to bi-weekly the moment finance knew there was trouble.

Other indicators: delayed salary reviews, senior staff leaving (and not being replaced, because money) or minority shareholders trying to sell their stakes.

VLM 22 hours ago 2 replies      
Many answers are negative assuming decline, or provide an extremely complicated answer to a simple problem. I'd propose based on decades of observation that you model the behavior and personality of all of management as if it was one person. Now is that imaginary merged individual person a lunatic deep in cocaine addiction psychosis? That might be a bad sign. Is that imaginary merged person a reasonable good leader? Sounds like a good sign. Is that one merged person in a civil war with its large number of multiple personalities? Run like hell.

This is what "real" culture fit actually is, whereas what culture fit means in 2017 as currently deployed is "we only hire young white ivy-league(-ish) males" which is a totally different concept or problem.

gwbas1c 21 hours ago 3 replies      
TLDR: You assess health by if you're getting paid what you think it's worth to stay in the job. If you're okay with the pay, and you like the job, be a pro and stay as long as the pay comes in.

A big warning sign was that my employer interview great candidates, make offers, and then the candidate didn't accept. The problem was that we weren't paying competitively.

I tried to express this to upper management, and then instead of fixing the problem, they just gave me a raise. (From below market rate to below market rate but able to start putting money in the newly-offered 401k.)

Shortly afterwards, I interviewed at one of our major competitors. The next day I looked at one of the founders and said, "if there's a chance to exit via acquisition, we need to take it."

Turns out there was an acquisition deal in the works, but we couldn't know due to how US law works. One of the higher-ups asked me to investigate "a bug," and when I looked at her logs, all I saw were references to an upcoming acquisition. I then knew to stick around and give the new owners a chance.

There's a lot to be said for sticking through a few months of uncertainty when it works out to be a great job in the long run.

pawelkomarnicki 22 hours ago 0 replies      
My dad used to say: "Son, when assessing the company's health, look for two things: coffee, and toilet paper. If the coffee is not refilled, it means nobody cares, and the company soon will start having serious trouble. If the toilet paper is not refilled, it means there's no money whatsoever, and you should nope out". Worked for me ever since.
angelofthe0dd 22 hours ago 0 replies      
A key indicator I've seen in past companies was when "top skill" or "top manager" level people suddenly submit their resignation and then spend two weeks calmly walking around the office with an ear-to-ear grin. Not too long after that, whisperings of "Why?" start circulating. And shortly after that, I got an upbeat email from HR about "Exciting new company direction" and "Rethinking our core strategies for better customer alignment." In all seriousness, shake-ups and re-alignments are frightening and kill everyone's morale with fears of uncertainty.
draz 23 hours ago 1 reply      
- Employee turnover: a large layoff- Retention: some many know something you don't, especially at the high levels. - Restructuring/reorging: there are companies that view this method as a panacea for all ailments (rather than treating the underlying issue(s)).- Projects funded: a concentrated focus on projects that "reduce cost" or "introduce efficiencies" rather than on growth and R&D may be indicative of either a contraction to make a company more palatable for a buy-out, or a simple general state of the money in the bank.
scarface74 21 hours ago 3 replies      
I've given another answer, but on the meta level, it shouldn't matter to you if a company is doing well. The only thing that should matter is are you learning skills for which there is a market? Getting in the mindset that your "job" does not determine your well being but your skills do.

That mindset presupposes a few things:

A) that you always have your finger on the market and the skills that are in demand

B) your network is strong - including recruiters.

C) You live below your means and have enough in liquid savings to survive a job loss and getting a new job.

blowski 22 hours ago 0 replies      
It's a bit subjective, and the more general the statement, the less meaning it would have.

Say a company is becoming corporate and dull, but at the same time becoming more profitable. Are they in good or bad health? As a short-term shareholder you might see them in good health, but as an employee you might see them in bad health.

That said, my experience is to look at team meetings. If they are full of conflict that is resolved respectfully by the end of the meeting, that's usually a good sign. If the same person is dominating and everyone else is quiet, that's a bad sign. If the same arguments keep repeating themselves, that's a bad sign. If there is no conflict at all, and people just stare out of the window while others are talking, that's a bad sign.

At bad companies, everyone knows the real story, but nobody says it out loud. Good people leave, bad people stay, and the problem gets worse.

erikb 22 hours ago 1 reply      
Also relevant should be the question how to act in different phases. An unhealthy company is not necessarily dying. And even a dying company is not necessarily bad for you. It's like with real people. When someone dies some others start to check out the valuables to get the best for themselves. If you are working in a brilliant team inside a dying company, you may all get picked up, get a raise, and be welcomed into new arms. That's one way to get into Google for instance.

For figuring out the current health status, I'd check:

the product line - is it understandable? is it modern? is it efficient?

the customer base - do they have customers that wouldn't easily change to alternative options?

the management team - do they have visions? are they cooperating? are they lying psychopaths, ambitious inventors, calm survivors (thinking Merkel here), idiotic burocrats?

HR - HR is managements comm channel to the employees. Does the promo material look good? How close is the promo material to the actual day-to-day work?

People - are there smart people you like to work with? How many of them are currently joining? How many of them are currently leaving?

Hiring - you are either new and just got hired or there for a long time and probably at least hear things about the hiring process at the water cooler. how reasonable does it sound? does it filter out idiots? does it assess quality attributes like culture? Does the feedback from the interviewers have influence on the hiring decision (more often than you think they actually just hire anybody, if they are hiring at all).

logingone 19 hours ago 0 replies      
Employee experience. The biggest problem at the company I recently left was inexperience. The company thought they could hire cheap and simply cross train and up-skill everyone. A FTSE 100 company. Eg a dev manager was a js dev now managing half the 200 odd dev dept. Hired mostly PHP devs who were all going to be cross trained as Go devs. My last manager had no management experience and was also the dept's Go tech lead, with no Go experience - a PHP dev, now starting at amazon, should be entertaining. Another Go dev on the team an ex-lawyer with two years dev experience as a ruby dev. The place was disorganised, frustrating, and not delivering. Toward the end of last year people started leaving, then more, then more - exodus. The dept has effectively collapsed as it's now a fraction of the size and a significant proportion of the remaining devs are new. It won't absolutely collapse because like all big corps they'll just keep hiring replacements and eventually paper over the cracks. They're now "restructuring", but the same rookies are still running the show so they're probably just going to botch it all over again, just in a different way.
kevinmannix 22 hours ago 2 replies      
When growth numbers are consistently not hit. Always push for transparency at a smaller company - if there isn't one already, attempt to implement an all-hands meeting at least bi-weekly that reviews goals for the quarter / year and the company's progress. If direction is constantly changing at a 1 or 2 month cadence, it's likely that there may be a shakeup coming sooner rather than later.

It's wise to have a bit of cynicism when discussing company goals, progress, outcomes - things may not always be as bright as they seem. It's a good exercise to take these numbers and reduce them by a certain percentage, and see if those numbers are still good for company growth & stability.

booleandilemma 22 hours ago 4 replies      
I've read that a good way to get an early indicator of future health is to pay attention to the spending on the small things.

Does your company have paid lunches?

Does it have a snack vending machine or something similar?

A coffee machine with k-cups?

Other little perks that seem insignificant but are nice to have.

If these things start to go away, the company is experiencing financial stress.

ryankennedyio 22 hours ago 0 replies      
This is a handy pocket guide. Quite seriously, start looking around if your gut is telling you to.


beaker52 22 hours ago 0 replies      
I look at a few things. Company structure is quite telling. The relationship between teams, how teams work together. I usually get a good feel for any potential dysfunction in an organisation by this. The more splitting up and dividing there is going on, the more unhealthy it usually is. If the company is small enough, it should be self organising to some degree of success.

Other questions to consider:

- Are staff able to be honest?

- Is the company able to be honest with itself?

- Does the company have a vision that actually sells itself?

- Is the company actually pursuing that vision with it's actions?

- Does the company leverage the intelligence of it's employees, or does it just hand them work to perform?

Taylor_OD 20 hours ago 0 replies      
When the CFO or high performing sales guys leave. They know what they money situation looks like and are going to be the first to leave when it get's rough.
awinter-py 22 hours ago 0 replies      
If you can't get a straight answer from your manager, or your manager doesn't know, then the company isn't healthy.

Managers (a) love to brag about success and (b) it's their job to retain you, and part of retention is informing you about the company's financials.

It's totally okay to ask questions like 'how long can we survive if we don't grow' and 'how long does this continue before we close our doors or fire people'.

The good news is if you don't know about the health of the company you're probably too junior to be first on the chopping block.

If you're asking the harder question of 'are we going to be #3 in our sector in 5 years', you can't trust your managers on that one. They're too optimistic. Do serious competitive market research like you'd do when starting a company -- find a way to measure comparative sales, marketing activity, team strength. Read the linkedin pages of the leadership and key players and look for missing skillsets.

jdavis703 22 hours ago 0 replies      
* Late payments to employees (checks, expense reports etc)

* Banker-looking people coming by

* Drawn out fund raising periods with promises every month that next month something will be announced.

* Churn in the C-suite or at VP level.

* Plants being carted away

chrismealy 8 hours ago 1 reply      
I'm reading a lot of these answers and they could be describing companies that are hugely profitable and growing. Profitable companies cut back on coffee, have high turnover, cynical employees etc.

It really doesn't matter. Any company can blow up at any time due to fraud or mergers or whatever. You might get fired because your boss might want to replace you with their old college roommate. Or the CEO decides to kill your whole division because they're chasing some dumb fad.

bennyp101 22 hours ago 2 replies      
The last company I worked at before it was acquired went through a phase of making everything 'legit' - which looking back on it now makes sense.

- Making sure that everybody had their work laptops/phones properly secured, requiring RSA tags for VPN access etc.

- Lots of new policies, mainly things that we did anyway, but just fully documented and meetings to make sure that everybody understood their roles in them.

- Lots more focus on 'customer satisfaction' and making sure that deadlines were met

- Rewards for helping to clear the backlog of things that needed doing

Basically, a lot of dotting the I's and crossing the T's. Oh, and a lot more visits from the head guys over in the US.

Edit: Not a startup, just a company doing well.

dreamcompiler 13 hours ago 0 replies      
One indicator I use is the bullshit level and its derivatives. You can define bullshit any way you like; my definition is "activity that adds no value to the company, or (worse) actively impedes people who are adding value to the company."

If the bullshit level is high, I think about leaving. If the first derivative of the bullshit level is also positive (bullshit is increasing) I lean heavily toward leaving. (If the first derivative is negative, the company might be healthy and pivoting after a setback.)

If both the first and the second derivatives of bullshit are positive (bullshit is not only increasing but accelerating) it's time to leave immediately.

jasode 22 hours ago 0 replies      
Availability of information to analyze will depend on whether it's a public vs private company.

If it's a public company, an employee can look at the health in many of the same ways that Warren Buffet would look at it. Look at it's profit & loss statements for the last few years. If it took on debt, try to find out what the debt was used for. Look at the credit agencies' bond rating for the company. If it's not AAA, research why. Look at the company's major customers. Is it a growing marketplace?

If it's a private company, intelligence gathering is going to be harder and you often won't have good info until you actually work there. You can try to synthesize information from glassdoor, Google News (e.g. lawsuits, settlements, etc), and other sources.

>I mainly meant "startup" (i.e. not Fortune 500)

In this case, I would ask the hiring manager (often the founder) if the company is cash-flow positive. If not, ask how much "runway" is left before the company runs out of money. Some founders may push back with "I can't disclose financials, yada yada" ... maybe because of his paranoia about competitor espionage. You then have to ask yourself if you're willing to join a company with limited information. You can join a not-yet-profitable company because sometimes, it all works out. That said, the idea of concrete financial dialogue is to make the risks transparent to the employee.

NirDremer 9 hours ago 0 replies      
When evaluating startups there are few key matrices- financial stability - most notably runway. Taking funding and # of employees can give you a rough sense of things

- key people churn

- business traction graph - depending on the market you are in you can get some sense through similarweb and the likes

We took it to the next level at Yodas and provide detailed analysis. We help individuals make better, more informed career decisions.

robhunter 23 hours ago 1 reply      
"Company" is a broad word, and can include a wide variety of different types of organizations - but if you're talking specifically about startups, look at the following:

Cash in the Bank / Burn Rate - How much cash does the company have? How much of that cash is it spending each month? How long until the company reaches profitability? Could the company be profitable now if it wanted to be?

Headcount - LinkedIn actually tracks this now. How has the total headcount of the company changed over time, particularly recently? Headcount is certainly not a measure of success, but a significant decrease in headcount may be a red flag.

Growth Rate - How fast is the company growing? Ideally you're looking at this in terms of revenue.

Unit Economics - Even if the company is growing, is it making money from every sale? Or is it "spending $1 to earn $0.95" ? Getting a handle on the bottoms-up unit economics of whatever the company is selling is important to really getting a picture of its overall health.

Grit of the Founders - This may be more important than everything else on the list! Every startup is going to feel - frequently - like it's in "bad health." Founders with determination, grit, and the ability to fight through the tough times will overcome a lot of the problems presented by other items on this list.

bsvalley 23 hours ago 0 replies      
It's all about the money. Cost cutting such as layoffs, no annual bonus, no more free snacks, shutting down promising projects.

When a company is doing well, it's usually the opposite.

indigochill 23 hours ago 2 replies      
My company's CEO says he looks at the survey answers to "Would you recommend Company X as a good place to work" as a health indicator of how the company's doing. Which makes sense to me, since if the employees overall would recommend it as a place to work, it's probably reasonably stable and rewarding, has reasonably trusted managers, etc.

I've never delved deep into actual statistics on this, though, so consider this just an anecdote.

champagnepapi 23 hours ago 0 replies      
I guess it would depend on the size and status of the company. What I mean by that, you would judge a startup 1-10 people that is privately held substantially differently than 1000+ employee publicly traded company. These indicators that you are looking for are going to be vastly different along the size spectrum of companies.
wolfi1 22 hours ago 0 replies      
it does not directly state the health but it indicates if it is a good employer: number of interns : if the ratio is roughly 1:1 I would quickly look for another company
ethbro 21 hours ago 0 replies      
I think employees are a lagging indicator. If the product is being offered at all, look at customers.

If you're not customer-facing, talk to a customer-facing engineer or even account manager. "How's the X account?" "Tell me about a customer we've made successful." Don't accept "The account is fine." Drill down and ask for details; they're the only things that matter.

You're internal, so unless your company is really $&#+ed up and silo'd, you shouldn't have a problem getting a feel with a modicum of social skills.

If you're not making customers happy, and management is proceeding with business as usual, start looking for a new job.

perlgeek 21 hours ago 0 replies      

If there's none at all, then people likely are afraid to talk openly. When there's cynicism about everything (revenue goals, vision, hiring, retention, ...), that's a sign that most everybody has lost hope.

le-mark 22 hours ago 1 reply      
One company I was at shipped a hardware product. The hardware would come in from the manufacturer, the techs on site would flash the firmware, apply stickers, and ship to customers. When I started they were shipping 10-15 boxes a day (this was easy to judge, they sat by the entrance and the UPS guy would come in and get them). Then a few month later, the senior sales guy left, and a new vp of sales was brought in. Over the course of a year, outgoing devices went to near zero. That's when I started looking. A year later the company was still alive, but limping with a skeleton crew of devs and techs. Most who stayed were fired.
acesubido 22 hours ago 0 replies      
I do a simple version of a balanced scorecard:

1) Financial/Stakeholders - Are we raking in revenue? What type of revenue (high-touch, low-touch. high-volume/low-margin or low-volume/high-margin)? Are we consistently making this or is it totally dependent on the connections of 1-2 people? Can it be recreated? A bad sign is if people are being shifted to different projects all the time without one being totally completed/closed.

2) Customer/External Relationships - #1 is dependent on this. You can't make money with people giving you money. Do we have sufficient customers/market to provide the type of revenue needed? Do customers like us? What's the market feedback? A bad sign is if sales is overcommitting through the teeth about the products/services just to get them onboard.

3) Activities/Internal processes - #2 is dependent on this. You cant continually create things to sell and build customer relationships without a proper cycle of operations. Do we have processes? Does the process last long enough to get feedback? Or are the activities fickle and do not have solid implementations? A fishy sign is if there seems to be a totally new sales/engineering process every month, or isn't implemented rigidly and the org chart changes every 2 quarters.

4) Learning and growth (People-aspect) - Most important. #1, #2, #3 is dependent on this. You can't have processes/services/products without people. Based on the product/value that the company is providing to customers, are they valuing the people that creates this value? (training, leadership roles, ownership of product/services, etc.). Is there career growth for people that create this value? A fishy example would be: leadership positions in a product-based tech startup where there isn't at least one person with a history of software-engineering/operations and is instead filled with a group of salesmen. That startup would probably best be a consulting business, since the way things would be led hampers any kind of effort in building an effective product development pipeline/operation. Another bad sign for that type of startup is when key staff engineers are leaving, their positions are left empty and more managers are hired instead.

JensRantil 14 hours ago 0 replies      
I work at a startup and every second week we run an anonymous https://www.menti.com where all emplyees get to vote between 1-9 how happy they are at work. It's a simple metric that gives management some insight about how the company is going.
danpalmer 22 hours ago 0 replies      
We have a weekly all-hands where major issues (good or bad) would be mentioned, and where we get an overview of all core metrics. We have a monthly all-hands where we go into detail on all the metrics and how each team's metrics build up to the overall company performance. We know how much we're targeting/getting in funding rounds. We can ask questions about any of this in one-to-ones with managers that happen fortnightly.

Basically we're pretty good at transparency, so most people just know all of this. It's a nice environment to work in!

awshepard 19 hours ago 0 replies      
Some other warning signs:

- When you get rid of your QA team in the name of "quality" with everyone being responsible for testing, but then never provide adequate testing resources or environments. And when quality and velocity inevitably drop, and everyone claims they want to improve quality, but it's never actually prioritized.

- More generally, when your company is saying one thing and doing another.

- When your executive team flat out lies, and doesn't even blink when questioned about it.

michaelgburton 21 hours ago 0 replies      
One tip I have from years in a company that was undergoing major changes in its business model is to pay attention to other workers. In my case, the shop floor guys at an automation company smelled the shift in the wind long before anyone else, and weren't afraid to call it out. When the vast majority (maybe 500-1k machinists) were let go in rapid succession, it was shocking...except if you'd paid attention.
TuringNYC 15 hours ago 0 replies      
For public companies, it can be an easier task:

- If executive insiders are buying stock: a good sign!

- If executive insiders are selling stock: could be a good or bad sign (e.g., they might sell because they are purchasing a house.)

- If executive insiders are selling everything: very bad sign

Maro 17 hours ago 0 replies      
A simple one is growth. If you're at a startup, it needs to grow. If growth isn't what it should be, it's decelerating, or it's zero, that's trouble. Wait for 6-12 months (depending on size and stability of company), if it's not improving, start looking for other options.
alex440440 21 hours ago 0 replies      
Me and people close to me been a witness to a startup demise several times. In a startup it's really easy to tell - the product falls short of revenues/active users expectations, the funding starts to run out, the management starts to act frantic and invents all kinds of "creative" ways to "revive" the product, core team members start departing :)
31415 22 hours ago 0 replies      
Treat it as a learning opportunity. Three buckets to triage employees into: (o) the oblivious employees, (i) employees who step up and show initiative, and (ii) employees who decide to goof off and do nothing since some of the management chain is likely missing and not being replaced.

Companies that are successful are often unwilling to risk any element of their success and can be rigid/inflexible.

blahyawnblah 19 hours ago 0 replies      
At my last couple of jobs my raises and bonuses were getting smaller over the last year or two I was there even though the company was supposedly taking in more revenue. We weren't expanding or hiring anyone so I started looking for new jobs. Both went under within a year of me leaving.
BurningFrog 14 hours ago 0 replies      
No news is bad news. If you stop hearing about new developments, the reality is almost certainly bad.

Looking back to a few layoffs, that was a common sign. I think I can spot it next time.

HeyLaughingBoy 16 hours ago 0 replies      
Generally, when a paycheck bounces, it's a bad sign. Now, in my experience, the company didn't die for another year after the bounced paychecks, but it was definitely writing on the wall!
goatcurious 20 hours ago 0 replies      
The free-food patterns don't apply on a company which is frugal by nature, e.g. Amazon
tmaly 20 hours ago 0 replies      
Communication, how well are groups within the company communicating? Do groups tend to re-invent the wheel because they do not know about what other groups are doing?

Learning, what types of opportunities are employees given to develop skills and learn new skills?

jaymzcampbell 21 hours ago 0 replies      
My main thing is are they at all organised as a whole - if everything is in disarray and departments have no idea (or interest in) what the others are doing then it's likely going to be very painful. A company that is pulling in one direction is an exciting place.
0x4f3759df 21 hours ago 0 replies      
How fragmented is the industry? A fragmented industry is waiting for a well capitalized player to consolidate small companies into a industry leader. How close the founder is to retirement... As the founder approaches age 65, he might be looking to cash out.
coldcode 19 hours ago 0 replies      
One company I worked for (international) had the new CIO visit our office. He said "don't worry there will be no layoffs". Two week later they started and shortly the whole office was gone.
a3n 19 hours ago 0 replies      
When senior people that you have a personal relationship with, who are no higher than first level managers and not necessarily managers at all, tell you that the company is dying. Been there twice.
Apocryphon 15 hours ago 0 replies      
Cutting vacation days was mentioned. I'm wondering if switching from fixed vacation days to unlimited is also a sign of penny-pinching.
tyingq 22 hours ago 1 reply      
Make friends with whoever does accounts payable. In many companies, paying vendors later than agreed terms would be the first sign of trouble. Companies will often do that before anything directly visible to employees.
bpyne 19 hours ago 0 replies      
A good bellwether for a startup is the sales force. They leave when there is no more money-making opportunity.

(Of course, a startup can still pivot to uncover opportunity.)

vimarshk 18 hours ago 0 replies      
Sales = Company healthWhen the company is not able to make $$ due to bad product, employee turnaround, Sales or culture it is in bad health.
swalsh 22 hours ago 1 reply      
The usually open CEO suddenly starts having closed door meetings.
just4themoney 22 hours ago 0 replies      
Usually the biggest indication is cutting salary and benefits, I'm including not giving raises as a salary cut. Cutting vacation days is definitely a salary cut.
Spearchucker 21 hours ago 0 replies      
Look at churn (staff turnover). It's actually a question I ask in interviews. If churn is either extraordinarily high or low I want to know why.
INTPenis 22 hours ago 0 replies      
In my case:

 * Stock price * Attitude of employees * Attitude of management * Statements and sometimes rumors heard around the office

dgcoffman 20 hours ago 0 replies      
Users and revenue.

User and revenue growth rate.

One bad sign is if the CEO is replaced. Another bad sign is if the company can't figure out how to make money.

inthewoods 22 hours ago 0 replies      
Status of accounts payable - is the company stretching out payments to vendors? Are vendors getting angry or lawyering up?
if_by_whisky 22 hours ago 1 reply      
Quality of snacks
wiz21c 22 hours ago 0 replies      
marketing team slices its customers pool into : customer-we'll-soon-contact, potential customers, potential leads, short-list-customers, customers with who we have very good relationships, customers who'll introduces to even bigger customers. You get it, many types of customers except the paying-type...
dev360 17 hours ago 0 replies      
I would look at Culture and Financial. A lot of other things are fixable.
hammock 22 hours ago 0 replies      
Executive engagement, number of open job reqs, revenue goals (not necessarily growth or metrics of past)
peterkelly 22 hours ago 1 reply      
If you find yourself asking questions like this, that's a sign something might be awry.
gagabity 15 hours ago 0 replies      
They ask you for a list of all the passwords you control.
throwawayJPHK 21 hours ago 0 replies      
I work for a fairly large manufacturing company in Japan (about 15k employees). I don't think it will go bankrupt, but I think it is unhealthy and will eventually be automated with most people being made to leave, or it will lose a fairly large chunk of its market share and be dismembered and rebuilt by the American office.

Some things I observed that led me to doing a job search.

> Insurmountable Recruiting difficulties

I was promised a team of 5 junior devs under myself, but that never happened. There was always a new process, or a new form that had to be filled out; they got filled in and nothing happened.

Eventually the company started projects to hire people with disadvantaged career histories (Chinese / Korean residents, women who had left their previous job after pregnancy, et cetra). I felt this was a great policy but I was eventually clued into the real origin of the policy and why I never got the team I was promised.

Apparently, we had (and still have) an excessively poor reputation. Not criminal; just in terms of leadership (at all levels), salary and work load. Successful mid-career job seekers could not be expected to join. As such, disadvantaged workers and the lowest level of university graduate comes (the kind who has "Tennis Club" as a prominent part of their university "experience"). My lack of experience at large Japanese corporations is also why I didn't have the foresight to check 2chan or Vorkers (glassdoor-like company in Japan)

> New Emmanuel Goldsteins on a regular basis.

"We would be great but... is terrible" is a constant refrain at these sorts of companies. You can fill in the blank with a C-Level executive, a new employee, or a clique in the office. If you are assigning real people in a capitalist enterprise the role of "villain", then the environment is not going to improve. It is like saving a marriage after you tell friends to take sides.

> Inappropriate focus on loyalty

I have literally experienced a C-level officer making these statements in a work environment, about people who are so low in rank so as to be below his level of concern. If a junior accountant leaves for a better position at another company, one with less stress and better pay, it is the obvious and correct decision, not an act of "disloyalty".

> No objective source of truth or success

While I ran a business previously, I could be convinced by objective measures of truth (profit being #1). At my current office, there is no single source of truth, nor a single measure of success. This creates a difficult spiral of wasted time and effort when starting projects; in the end, calling in "outsiders" to resolve the issue (by giving them superuser access over the project structure) simply delays the hard questions (who is in charge / gets credit & blame / by what measure are we doing something), and further infantilizes the office.

> Senior people left and were never replaced

Literally the second most senior person in my part of the org left and wasn't replaced for more than 2 years. Junior managers reported straight to the C-suite. His eventual replacement lacked his depth of knowledge and greatly damaged the collegial atmosphere that existed within the Japanese team before her hire.

> Easy things are difficult

There are X (where X is a number greater than 5) different approval processes for me to pay a vendor who has already finished the work.

afdfabdcfaadfcc 22 hours ago 0 replies      
Glassdoor reviews.
golergka 22 hours ago 0 replies      
If you're moving to a new open space office that looks for a visitor to be fantastic but is a pain to actually work in; if your company hires like crazy without a good idea of what new people will actually be working on; if a CTO that has been on-hands becomes distant and hires a level of middle technical managers all that means that the company is trying to inflate it's value and be bought. Not necessarily a bad thing, but you can count on the culture shift pretty soon.
afdfabdcfaadfcc 22 hours ago 0 replies      
Glassdoor reviews
SFJulie 15 hours ago 0 replies      
turn over.

A "normal turn over" in IT is 10%

In normal companies it is less.

If more, flee.

scarface74 22 hours ago 0 replies      
Simple answer: Any startup that isn't profitable isn't healthy.

More importantly, any company that has negative marginal profit, is definitely not healthy (i.e. Uber)

UseofWeapons1 22 hours ago 2 replies      
The easist method is by trend in employee count. If headcount is rising, that's a good indicator, if it's falling, that's generally bad. Stable can be perfectly fine, or bad, depending on the company. You may have concerns about the magnitude of growth, or claim lay-offs were justified or turnover is natural, but the trend generally holds.

You should also pay attention to other employees; ask yourself why folks who leave are leaving. This seems easy, but I know one start-up well where a small trickle of occasional high-level departures turned into an eventual flood and bankruptcy.

Beyond that, it's the usual. Anything you can tell about sales growth, competitive intensity, leadership, etc. are all helpful and good data points.

Ask HN: What are the best resources to learn computer vision?
202 points by ameyades  1 day ago   51 comments top 31
wyc 20 hours ago 0 replies      
This is pretty old school, but I recommend Multiple View Geometry by Hartley and Zisserman (http://www.robots.ox.ac.uk/~vgg/hzbook/) to get through the fundamentals...it's really good to understand the geometric foundations for the past 4 decades. Along the same lines, you have Introductory Techniques for 3-D Computer Vision by Trucco and Verri (https://www.amazon.com/Introductory-Techniques-3-D-Computer-...), which also goes over the geometry and the fundamental problems that computer vision algorithms try to solve. It often does come down to just applying simple geometry; getting good enough data to run that model is challenging.

If you just throw everything into a neural network, then you won't really understand the breadth of the problems you're solving, and you'll be therefore ignorant of the limitations of your hammer. While NNs are incredibly useful, I think a deep understanding of the core problems is essential to know how to use NNs effectively in a particular domain.

After getting a grip on those concepts, Szeliski's Computer Vision: Algorithms and Applications (http://szeliski.org/Book/) had some really amazing coverage of CV in practice. Mastering OpenCV (https://www.amazon.com/Mastering-OpenCV-Daniel-Lelis-Baggio/...) was very useful when actually implementing some algorithms.

rsp1984 1 day ago 2 replies      
I think the question is a little too unspecific for there to be a good answer. The field is vast and depending on which thing in computer vision you want to tackle the best learning paths may vary greatly. Just to give a bit of an overview:

Before the Deep Learning Craze started in 2011 more classical Machine Learning techniques were used in CV: Support Vector Machines, Boosting, Decision Trees, etc..

These were (and still are!) used as a high level component in areas like recognition, retrieval, segmentation, object tracking.

But there's also a whole field of CV that doesn't require Machine Learning learning at all (although it can benefit from it in some cases). This is typically the area of geometrical CV, like SLAM, 3D reconstruction, Structure from Motion and (Multi-View) Stereo, anything generally where you can write a (differentiable) model of reality yourself using hand-coded formulas and heuristics and then use standard solvers to obtain the model parameters given the data.

Whenever it's too hard to do that (for example trying to recognize many different things in images) you need a data-driven / machine learning approach where the computer comes up with the model itself after seeing lots of training examples.

As for resources the other answers are already giving a great overview. Use Karpathy's course for an intro to Deep Learning for CV but don't expect it to be comprehensive in terms of giving you an overview of CV.

Learn OpenCV for more low level, non-ML and generally more "old-school" Computer Vision.

A personal recommendation of mine is http://www.computervisionblog.com/ by Tomasz Malisiewicz. It's an excellent resource if you want to get an overview of what's happening in the field.

stared 1 day ago 1 reply      
For a full course, Nothing beats CS231n: Convolutional Neural Networks for Visual Recognition http://cs231n.stanford.edu/ by Andrej Karpathy et al.

Also, for a general and high level introduction to neural networks, I wrote a Learning Deep Learning in Keras http://p.migdal.pl/2017/04/30/teaching-deep-learning.html, focusing on visual tasks.

lightbyte 22 hours ago 2 replies      
Surprised nobody has posted http://course.fast.ai/ yet. I've been following along with it so far for the first 4 lessons and it has been extremely helpful in understanding how deep learning works from the perspective of someone who did not have much of any related baseline knowledge except how to program. Jeremy is an excellent practical teacher.
rjdagost 1 day ago 0 replies      
A lot of real world computer vision is implemented on embedded devices with limited computational resources (ARMs, DSPs, etc.) so understanding how a lot of commonly used algorithms can be efficiently implemented in embedded systems is important. It is possibly a way for you to jump the gap from "embedded software developer" to "computer vision engineer". Also keep in mind that in many companies a "computer vision engineer" is fundamentally a different beast from a "software developer". A CV engineer creates software but the emphasis tends to be more on systems and is not 100% about software. This will vary a lot by company but if you're working with prototype hardware you will need to get at least a working knowledge of optics.

Fun and trendy though it may be, I would not focus on deep learning / convolutional neural networks to start off. Deep learning is a small subset of computer vision. I would focus more on understanding the basics of image processing, camera projection geometry, how to calibrate cameras, stereo vision, and machine learning in general (not just deep learning). Working with OpenCV is a good place to start for all of these topics. Set yourself a project with tangible goals and get to work.

abhinai 1 day ago 0 replies      
I once created a list of 20 problems in CV. If you solve them in order, you will know basic CV. Here goes: https://gist.github.com/abhinai/b6eebecb4d19c57cfb1ee64c2b53...

A good online reference is: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tu...

sphix0r 1 day ago 3 replies      
OpenCV and http://www.pyimagesearch.com/

disclaimer: not related to any of these

maffydub 1 day ago 1 reply      
I found Computer Vision: Algorithms and Applications really good. You can download it for free (for personal use) at http://szeliski.org/Book/.
fest 1 day ago 0 replies      
I started by getting a webcam or two and trying out various projects: marker tracking (made an optical IR pass filter and tracked an IR LED with two cameras), object segmentation (e.g measure geometry of certain-colored objects).

Measure the speed or count the number of cars passing by your street. Try to implement an OCR for utility meter. There are lot's of applications you can train yourself in, and I guarantee that you will learn a ton from each and every one of them.

mattfrommars 1 day ago 1 reply      
Does anyone know if tech like OpenCV is used at companies developing their own "computer vision" product, maybe at Tesla? Or do they build their own technology from scratch which isn't available to public domain? Or do they say fork OpenCV and build upon it and heavily modify as OpenCV could be seen as 'outdated' technology.

Disclaimer: Never worked with any technology related to Computer Vision, just a bloodboy beginner Python programmer.

RobertDeNiro 21 hours ago 0 replies      
Suprised no one has mentionned it, but Udacity has a very good very course on computer vision.


trwoway 1 day ago 2 replies      
cs231n by Andrej Karpathy : http://cs231n.github.io
gmiller123456 16 hours ago 0 replies      
It's a really broad field, so don't expect to get up to speed very quickly. A lot of people have recommended a lot of books already, and I could add to that list. One thing you might think about is Safari Books Online. You'll notice a lot of the recommended books are there, and even though it's a bit pricey, I think you'll find you'd save money by the time you get enough of the books that seem useful to you. You'll also loose nothing by jumping from book to book because they're too advanced/not advanced enough until you find one that's at your level.

I would recommend starting with one of the many OpenCV tutorial books, and maybe work your way through a few of those. Then move into books that cover more of the algorithms behind the library like "Multiple View Geometry" by Hartley and "Machine Vision" by Davies, among many others.

indescions_2017 22 hours ago 0 replies      
Grad-level CV courses, all recently offered:

Princeton CS598F Deep Learning for Graphics and Vision


Stanford CS331B: Representation Learning in Computer Vision


UVa CS 6501: Deep Learning for Computer Graphics


GaTech CS 7476 Advanced Computer Vision


Berkeley CS294 Understanding Deep Neural Networks


Washington CSE 590V: Computer vision seminar


UT Austin CS 395T - Deep learning seminar


Berkeley CS294-43: Visual Object and Activity Recognition


UT Austin CS381V: Visual Recognition


And best of luck to you!

visarga 21 hours ago 0 replies      
You don't specialize in surgery before learning biology. Similarly, you don't specialize in CV before learning basic ML and DL. The fundamental concepts are the same no matter if the modality is text, image or video (for example: regularization, loss, cross validation, bias, variance, activation functions, KL divergence, embeddings, sparsity - all are non-trivial concepts that can't be grasped in a few minutes, and are not specific to CV alone).
zelon88 21 hours ago 1 reply      
PyImageSearch by Adrian Rosebrock. http://www.pyimagesearch.com/
lauritz 1 day ago 0 replies      
I learned OpenCV using the O'Reilly book by Bradski and Kaehler (back when it was OpenCV 2). I found it well-structured and it worked for me. They have an updated version for OpenCV 3.

However, I can't tell you if OpenCV is still the framework of choice and/or widely used in the field you want to go into.

nikivi 1 day ago 0 replies      
We made a mind map for learning computer vision :


Nodes with a map will go to other mind maps with resources. :)

supernumerary 1 day ago 0 replies      
There is a processing library with opencv bindings here:https://github.com/atduskgreg/opencv-processing
peter_retief 1 day ago 0 replies      
https://github.com/biometrics/openbr these guys are amazing, see what they are doing and you will have a good start
madhadron 22 hours ago 0 replies      
For classical (non-machine learning) material, there's the nice text by Ballard and Brown: http://homepages.inf.ed.ac.uk/rbf/BOOKS/BANDB/bandb.htm

Even if you end up using neural nets, understanding how to think about the problems is useful.

KaiserPro 1 day ago 0 replies      
OpenCv is a great start, and is where I began.

this book: http://shop.oreilly.com/product/9780596516130.do has a number of worked examples that explain things well.

It does touch on Machine Learning, but it focuses much more on the fundamentals of computer vision, like feature detection, that allows things like SLAM to exist.

graeham 1 day ago 0 replies      
I learned mostly from MATLAB documentation. Good if you want theory and implementation, and most capabilities can be done with open source equivalents if you don't have MATLAB.


a_d 1 day ago 2 replies      
Is OpenCV (traditional CV technique) better to use or Deep Learning based approach? Has anyone done a comparison of the two approaches? The obvious flaw with deep learning is that it requires large labeled data sets - but assuming that is available, which one is more accurate at object detection (hotdog or not), detecting features on an image (faces, manufacturing defects)?
nurettin 1 day ago 0 replies      
Try reading the samples that come with the predominantly used programming library/framework. Works with pretty much everything. I know a thing or two about statistics because I study R examples at night. I know a decent chunk of winapi and windows ipc because of delphi, I know some CV because I studied samples from opencv and tried to solve problems with it, etc.
nycode 1 day ago 0 replies      
ux 21 hours ago 0 replies      
coursera has some; I typically have locally the images-2012 one, but you also have things like dsp-001 which is a bit more advanced. Generally speaking, coursera has some good material in many related domains.
mendeza 20 hours ago 0 replies      
Here is a guide I have developed over 6 years when I dove into copmuter vision around 2011. My path has been self taught until recently I took a graduate course.

I started from wanting to develop AR apps during my undergrad, Here are the best resources I have found to date:

Computer Vision is very theoretical and experimental, so the more hands on, the better! My approach has been to go top-down, overview the landscape and slowly progress deeper.

Begin with the best library for CV in my opinion: OpenCV. The tutorials are amazing!

Python tutorials: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorial...

C++ tutorials: http://docs.opencv.org/3.0-beta/doc/tutorials/tutorials.html

Immerse yourself in these and build any apps you think of!

Then go into: pyimagesearch tutorials http://www.pyimagesearch.com/ and aishack.in http://aishack.in/,

tons of great tutorials to learn different topics of vision with coding walkthroughs. Understand the examples and rewrite applications.

Then Dive Deep:

Get the new OpenCV3 book, a nice deep overview of many topics in computer vision. https://www.amazon.com/Learning-OpenCV-Computer-Vision-Libra...

And watch this course on youtube:


I feel like then, you will have so much exposure that when you dive into formal classes and textbooks, you will really understand and be enlightened.

This was the general way I learned computer vision, and recently I completed a cv internship for nanit.com . I was not hired for my formal knowledge, but they were impressed by all the various projects ive done and knowledge I had on many vision topics.

I also recently took a formal course of vision at Cornell: http://www.cs.cornell.edu/courses/cs5670/2017sp/

All the assignments have starter code in python and opencv.This was an amazing class as it dove deep into 3D computer vision, which is so relevant to augmented reality!

Also, here is a link opencv examples for iOS: https://github.com/Itseez/opencv_for_ios_book_samples

here are links for opencv example for Android: https://web.stanford.edu/class/ee368/Android/

Hope this helps! Shoot me a dm if you or anyone has more questions!

rhlala 1 day ago 0 replies      
Opencv documentation
tanilama 1 day ago 0 replies      
Tensorflow tutorial
Ask HN: Where should I keep my recovery codes (Google account for exemple)?
7 points by asadlambdatest  15 hours ago   11 comments top 8
bblough 3 hours ago 0 replies      
I keep mine in my password manager, which is sync'd across all of my devices. That way, if I lose access to my 2FA device, I can still get into my accounts, even if I'm traveling.
seanwilson 12 hours ago 0 replies      
On paper somewhere you keep in several places? You never know when your mobile or laptop is going to break or get lost for 2FA. It's not likely an attacker is going to steal your note of these and know your login.
kasey_junk 13 hours ago 1 reply      
Physically secured storage. Either a safe deposit box or a fire safe in your home.
drunkenmonkey 9 hours ago 0 replies      
Convert the code to a numbering using modulo arithmetic. Take a movie file, and encode black frames for a full minute for every number in your set. Burn the movie to a DVD and add it to your household collection.

If you need to recover the recovery code, watch the movie with a notepad handy.

gregjor 14 hours ago 1 reply      
Written in my passport, mixed in with visa stamps. Hard to tell what they might mean if you don't know what to look for.
kuroguro 5 hours ago 0 replies      
Crypted archive stored in an unrelated backup service?
ioddly 7 hours ago 0 replies      
I wrote them down, put them in an envelope and in my safe deposit box.
fiftyacorn 14 hours ago 0 replies      
keepass or similar
Ask HN: Did you succeed after struggling to build something people want?
13 points by hoodoof  9 hours ago   2 comments top 2
sras-me 6 hours ago 0 replies      
I made this reader that you can use to read both HN and reddit, after seeing people ask for a better interface for HN, and ofcourse ended up with no one else using...


EDIT: I know this was not much of a journey. But ultimately, what I have learned is that you need to come to terms with failure even before you start. But at the same time, work like failure is not an alternative...

abstractspoon 4 hours ago 0 replies      
I started writing this free task manager (http://abstractspoon.weebly.com/) in 2003 and it proved to be quite popular. I still work on it on a semi-daily basis because I enjoy it but users can be soooooo demanding. I've received some emails that I've allowed to spoil my day, and some people have tried to ride on my coat-tails but overall it's been a very rewarding experience and it kept me sane after my divorce. I wish you luck in your adventures.
Ask HN: What's your process for building a community around your product?
33 points by scapecast  1 day ago   6 comments top 6
19eightyfour 1 day ago 0 replies      
Go read Tribes. The following is my advice, not from that book.

Same as with creating a community around anything.

1. Define a group of outsiders, explicitly (politics) or implicitly (privilege).

2. This scaffolding sets up the emotional payoff necessary to motivate people to be involved and belong. The nature of community is also the essence of how you create it. Tap into people's reward circuitry. Their tribalistic instincts. If you find such notions repellant, you could be in the wrong business.

3. Apply optimizations, such as letting people advertise recognition and status (reputation), develop mastery ("my skills are improving"), and act autonomously ("I got this").

4. Make a safe space for them to congregate. You need boarder control / bouncing / moderation. You can take an editorial stance yourself, or work with the community to develop it collaboratively.

5. Let them communicate.

Do you really want to do this? A community is like a ginormous multiheaded baby. It will suck you dry and lay waste too all your other plans. But maybe it will also be among the most beautiful and amazing things you've ever helped create. Your call, buster.

mattbgates 1 day ago 0 replies      
I started a website, http://www.confessionsoftheprofessions.com, years ago. It now gets a few thousand visitors a day so usually I'm able to market my products there or whatever I have. I don't have success or fail numbers, but I've had plenty of repeat contributors, so something must be working.

As far as putting my own products on there, I did put a link up which is on every page of the website, and I do get clicks that lead to it. For my more prominent products, I tend to write an article about the product or find similar products and write comparisons. Pretty much rather than selling.. I'm just trying to "make known" that this product is here for you.

alazoral 1 day ago 0 replies      
Wrong question.

Community is your market, and crucially, you.

You should have found the community first. Then, if you're truly part of it, you'll know what your product should be.

If you're asking the question you're asking, it means you built a product without a market which is going to be... challenging.

tmaly 1 day ago 0 replies      
Right now, I am just going person to person telling them about my food project. I enlisted a dining club to help me test. I have not really found product market fit, so its hard to say if my methods will ultimately be successful.
philippz 21 hours ago 0 replies      
Building a community mostly consists of three parts:

1. Creating value for a specific target group. An early product/market fit lets word-of-mouth spread.

2. Let people participate. Giving people the feeling to be heard is crucial. A proper feedback management / cycle, helps.

3. Inform people what is happening. Let's call it "content marketing".

4. Start becoming an expert / create a personal brand

For step 1) you need to reach out to those people. Do things that don't scale. Go to meetups or wherever you find your target group. Talk to them, build relationships, ask for feedback, identify influencers. Try to understand the market, their problems, identify their needs, build relationships and build on that.

For step 2) have a proper feedback solution in place. Facebook Groups, an on forum are some options. We developed a platform exactly for this part. It's called STOMT (disclosure: i'm the founder). But we used our own product to build our own community. We invited anyone to checkout the product and leave us feedback on our profile: https://www.stomt.com/stomt - That way you can easily collect wishes, discuss, vote, manage and react on them.It works great and from time to time more and more people started using us. Have a public dialog and people get a community feeling. The question is which tool you are using and if you can efficiently combine it with feedback management. As this can create a huge overhead. Another example which works even better than ours: https://www.stomt.com/empires-of-the-undergrowth - just check out the stomt/reaction ratio. And those guys are not on the market with their game yet.

For step 3) This costs time. But to get feedback/engagement/participation and to get people excited you need to share your status on certain aspects from time to time. I like how Taylor Otwell (Laravel Founder) does it on Twitter. Bloggig is great.

For step 4) Share your knowledge, use your relationships to speak on a stage, be the expert. This works great for me => for us and let people follow you.

Edit: It is important to mention to start early. Be the expect (step 4) from the first second on. Talk to your customers (step 1) from the first second on. Invite them to a place you define (step 2) as soon as possible. And share if you have something to share (step 3).

dahoramanodoceu 1 day ago 0 replies      
That is the big question, isn't it.

It depends on so many things it's hard to define specific things, as each combination is distinct. It's like striking up and holding a conversation. How do you do that? That is what you are doing with the community.

Find out who they are.Find out what they want.Find out what they likeFind out what they need.Try a bunch of combinations of these 4 observations that makes them happy enough with you to engage.

ask HN: Jobs that work somewhat like Uber/lyft for cs students?
4 points by symon  13 hours ago   3 comments top 2
marcell 9 hours ago 0 replies      
Try gigster.com. It's a bit hit and miss but it works kind of like you are describing.
sethyr 13 hours ago 1 reply      
There are services like Upwork
Ask HN: Why are credit card chip readers so slow?
272 points by dv35z  3 days ago   321 comments top 51
redbluff 2 days ago 3 replies      
Some of the answers are close, but no cigar. The main reason for the time delay is the offline authentication of the chip, combined with generation of the ARQC cryptogram. Additionally the EMV protocol is very chatty if there are multiple applications on the chip card, although the latency involved in the customer interaction far outweighs the protocol timings.

As mentioned in many comments online transactions will be an order of magnitude slower, as they need to be sent to the issuer, have their cryptogram verified and the challenge response returned if the card does host authentication - which most do these days.

The entry mode generally does not determine how a transaction is authorised - chip, PayPass (NFC) and stripe can either be off or online. In fact stripe transactions are invariably online unless you want your business to be overrun with fraudsters. One of the prime reasons in the early days of EMV was to have it so safe that offline transactions were fraud proof - or close to. Naturally this noble goal was shot full of holes the moment real fraudsters got to it. However, the card is personalised with various limits and counters and with the possibility of using an offline PIN, which combined with the static authentication does give reasonable protection for low value offline transactions. Fun fact - in the initial spec this offline PIN was communicated between the terminal and the card in the clear. What could possibly go wrong :-). These days it is encrypted.

Anyhow enough blather - hopefully this has given a bit of insight.

nstj 3 days ago 3 replies      
You might want to qualify this with in the US as chip+pin cards are pretty fast in other countries by comparison.

Also there was a great episode of the podcast Planet Money a while back which goes into detail on your question [0]:

> Today on the show, we bring you a brief history of what's in your pocket. It's a story of convenience vs. fraudand it also includes a hippie inventor, the origin of the last great upgrade on your card, the magnetic stripe, and why it takes so long to "dip the chip."

[0]: http://www.npr.org/sections/money/2016/04/13/474135422/episo...

cocoa19 2 days ago 2 replies      
This is partly perception.

With a magnetic card, after you slide your card, you can put your card immediately in your wallet, while the Point-Of-Sale solution authorizes with the electronic payment host in the background.

With a chip card (EMV card), the EMV spec required the Point-Of-Sale solution to write an authorization number to the chip card. This means you need to leave your card inserted in the PIN pad until the payment host authorizes. Authorization usually takes 2-3 seconds.

To improve this perception, the industry came up with Quick Chip, which Point-Of-Sale software companies started to work on recently. With Quick Chip, the POS software doesn't need to write the payment host authorization number to your card chip anymore. You insert your card, account number is read, you take your card from the PIN pad immediately without waiting for payment host authorization.

-Software engineer working at a Point-Of-Sale software company.

db48x 2 days ago 2 replies      
Interesting fact: the best card terminals, if they are connected to a phone line rather than the merchant's broadband internet connection, use a 1200-baud modem. You would think that this would be slower, but the amount of data to transfer is relatively small. This means that the transaction time is dominated by time it takes to dial the modem and establish a connection rather than the time it takes to send the data. A 1200 baud modem takes much less time to negotiate a connection than a 56k modem, because it doesn't have to check the quality of the line as thoroughly. Reliability is better on noisy phone lines as well, and I'm sure they're cheaper. It's a win all around, but it's not something they mention on the spec sheet because it looks terrible.

Of course that has nothing to do with the chip-based authentication.

ca12et 3 days ago 7 replies      
Additional question: why is it faster in other countries? The first time I used a chip card in the US I was astounded by how long it took. I had been using chip (and pin) cards in Canada for years and it was never as slow as it is in the states.
richardknop 3 days ago 2 replies      
In Europe processing cards with chip & PIN at POS is quite fast. It usually takes 2-3 seconds for me before "Approved" appears on the reader screen. This might have something to do with US retailers still running legacy POS terminals / tech.
sofaofthedamned 3 days ago 2 replies      
I was a user in the Mondex card trial in 1995. This was like modern chip cards, but a stored wallet instead of online auth to an account:


The banks outfitted buses, bars, pretty much everywhere with readers but even after inducements to use it such as half price beer(!) it still failed. Why? Because it was soooo slow. Waiting for ~45 seconds at the bar for a payment to go through got old really fast. It barely lasted a year.

I'd have thought the friction of the payment would have been a lesson learned, but here we are 22 years later and it's still a pain.

asciimo 3 days ago 2 replies      
There's an express Target in the San Francisco Financial District that gets around this by assigning cashiers to two registers. They start the chip payment transaction on one register, and the slide over to the second register to start another customer's checkout. Then they slide back to hand the receipt to the first customer, etc. Absurd but effective.
phlo 3 days ago 1 reply      
As has already been pointed out, EMV transaction flows go through many steps. From what I understand, the protocol was designed with a focus on flexibility, and little attention was paid to low latency.

Until some years ago, most terminals would mirror that. Most prominently, they used to have separate "enter pin" and "verify transaction amount" steps, and included longer delays for displayed status codes. Recent devices have started combining these steps ("Amount: xy. Enter PIN to confirm") and status messages.

Newer use-cases like the contactless qVDSC application have been tuned for better performance, limiting the amount of communication between reader and card.

For more details, have a look at this guide from VISA: https://www.visa.com/chip/merchants/grow-your-business/payme...

vasusen 3 days ago 1 reply      
Here's a good blog post from a WePay engineer that explains some of the slowness - https://wecode.wepay.com/posts/supporting-chip-cards-at-wepa...
Tepix 3 days ago 4 replies      
Here is Germany it usually takes a few seconds (less than 5 I'd say) - I noticed however that paying at Aldi Nord is very fast. They really do tweak the cash register speeds at Aldi...
bericjones 3 days ago 5 replies      
Because with the swipe readers there is only one call to the payment processor.

However, with chip transactions there are multiple calls for different payment processing flows. For example, a transaction could require 5 round trip request responses from the chip to the payment process meaning 5x the time required.

Taylor_OD 2 days ago 3 replies      
My question is why chip readers flash like 6 or 7 screens that all say DO NOT REMOVE CARD in one way or another before giving you a noise that could be described as, "transaction failed" before finally being successful. I wouldn't mind waiting the extra couple seconds if the process was a little more customer friendly.
arethuza 3 days ago 2 replies      
Here in the UK I'm generally amazed at how fast they are - slowest part is typing my PIN in if that is required (some places still require it or if the transaction size is over the limit for contact-less).
exabrial 3 days ago 6 replies      
And why on earth do you have to SIGN still? Seriously. I draw a picture of Shammoo most of the time, to the delight of many cashiers
welanes 3 days ago 1 reply      
This guide from N26 bank is informative:


Each time you use your card for a payment (which is almost instant), you receive a realtime notification within 0.5 seconds.

exelius 2 days ago 1 reply      
In many cases (RiteAid pharmacy terminals are the absolute worst about this, but far from the only offender) it's just crappy UX design.

I have an American Express card and a RiteAid rewards card. Here's my checkout flow at the pharmacy:

1. Punch in phone number for rewards card

2. Get prompted to use my "Plenti" points; which require PIN entry

3. Swipe/insert card (most RiteAid terminals used to work with Apple Pay, but had it disabled)

4. Get prompted to use my American Express points. Say no.

5. Enter relevant pharmacy details (DOB, verify pharmacist reviewed prescriptions for you)

6. Remove chip card

7. Sign paper receipt

This UX flow is simply too complicated for a checkout process. It's got way too much friction, and they disable contactless payments to ensure you can't circumvent that.

Making these payments process more quickly is great; but Apple basically already solved that problem with Apple Pay. But it's not effective because it seems that some retailers want more friction in this process.

_wmd 3 days ago 1 reply      
Note this isn't true in all countries. My UK cards within the UK all follow some apparently online process in any UK merchant, however during a stint in Finland a few years back, I didn't find a single example of a merchant where their reader didn't instantly approve my transaction as soon as I correctly entered my pin.

Never received a (note: I know, we can all make guesses) conclusive answer explaining the difference.

userbinator 3 days ago 1 reply      
Smart cards (ISO 7816), used for credit cards and SIMs, among other things, communicate through a relatively low-speed serial protocol. The secure microcontroller they contain is also quite slow, especially if you consider the cryptographic operations they're required to perform. I suspect part of it is due to power constraints, and also somewhat tamper resistance.
Humphrey 3 days ago 1 reply      
This post explains why I was so frustrated using my card in the USA the other month. I figured it was super-slow because I had an international card, and it was confused.

Back here in Australia, almost every retailer (including those on 3g eftpos machines) takes < 4s from when i tap my card, to when I can start walking away. So much quicker than cash :-)

the_mitsuhiko 3 days ago 1 reply      
I can't talk about the US but over here (Austria) the slow chip readers typically are GRPS based and connect for every single transaction. There is one nearby in a lunch place where I really consider telling them how to hook it up with their wifi :)
leejo 3 days ago 1 reply      
I suspect it's because a lot of merchants are using terminals that are connecting over PSTN, or they don't hold a connection open between transactions so they have to do the connection dance for every transaction. Or they have connections that are just plain slow.

From my time writing backend banking integrations for a PSP, going on 5 years ago now, the time to authorise a card transaction (that's IP to BT gateway to X.25 network to acquiring bank to issuing bank and back again) would take anything between 0.2 and 1.0 seconds. So I don't believe it's actually down to any complexity in the authorisation steps if the transactions are done online.

rawland 3 days ago 0 replies      
It depends on the card you use. The transaction suffers under several communication latencies and most importantly fraud checking takes up a significant amount of time. A lot is implemented utilizing legacy technologies (I implemented a system once), as the initial systems were setup in these and the banking/payment sector moves quite slowly. Anybody remembers the Y2K problem [0] ? ;-).

[0]: https://en.wikipedia.org/wiki/Year_2000_problem

cdibona 3 days ago 0 replies      
Do you mean the actual chip back and fourth? The inherent problem is that the 7816-d standard is a mess. It requires extremely small data exchanges on the order of seconds to get a cert out of the card.

This has been a mess since the mid 90s, when I first worked on these things.

Here a cruddy not at all usefule link to the standard:


cmurf 2 days ago 0 replies      
The time varies widely. The remove card notice comes as fast as 3 seconds, I find 6 seconds more typical, and up to 15 seconds for the local grocery, and nearly 30 seconds for small pizza, sandwich, liquor stores.

There is no possible way it was taking this long for swipe authorizations; or even NFC authorizations which seemed faster than swipe but were probably the same, but more secure.

I still think the U.S. did this exactly wrong. 1. we were late to the game; 2. had started adopting better NFC technology; 3. instead of building on that, regressed to an old slow contact chip-based system; 4. instead of moving directly to PIN entry, retained signing, hence chip & sign, rather than chip & PIN. It's idiotic.

And that's just the customer size idiocy. The merchant idiocy is even worse. They paid for this transition. Not the banks, the processors, or EMV who ensure they make money hand over fist no matter what. If a customer has a chip card, and your POS does not support chip reading, the liability for fraudulent transactions is shifted to the merchant.

YeGoblynQueenne 3 days ago 3 replies      
Edit: this is not entirely correct; transactions may go online or stay offline, depending on amount and connection speed. See comments below.

It might depend on where you are. Where I am, in the UK, chip card transactions are quite fast. Fast enough to use contactless (tap and go a.k.a. "pay by bonk") where you literally just tap your card on the pinpad and go on your merry way [1].

The difference is that in the UK, transactions are not immediately sent online. I repeat: they're not immediately sent online. So you don't have to wait for the merchant to contact the acquirer, for the acquirer to respond and so on and so forth.

Instead what happens is that you dip, or swipe, or tap your card; the pinpad and the card figure it out between themselves whether you are the rightful owner of the card; the pinpad makes a record of the transaction; and you're told the transaction is "approved", then pick up your goods and go home. Later in the day, the merchant (i.e. an automated process at the store) sends an overnight "batch" of transactions to the acquirer, (i.e. the bank or credit network etc) and the acquirer either transfers the funds directly to the merchant, or blocks out the funds so you can't use them again and they can be transferred to the merchant later.

That's the EMV standard in a nutshell and entirely from memory, with a distance of a good few years from the time I worked for an EMV vendor (we sold a bit of EMV software that went on the Point-Of-Sale machine and handled all of the above). I might be misremembering a few things but I believe the above is mostly accurate.

tl;dr: having to go online for each and every transaction takes forever.


[1] Or of course sometimes do a double take, realise the transaction hasn't gone through, tap again, eyball the pinpad, then possibly insert or swipe etc. Sometimes it doesn't work.

toast42 3 days ago 0 replies      
Planet Money did a story on this last year.


jaclaz 3 days ago 0 replies      
It depends not only on the POS itself (old models vs. new ones) but on the kind of connection.

Here in Italy, besides "portable" POS that have a SIM card and go through GSM/GPRS (and are "good speed, but not that much fast") now also 3g/4g, the "corded version" can be:

1) Dial in (analogic)

2) Dial in (ISDN)

3) IP connected

The difference between #2 and #1 is like 4/5 times faster ISDN vs. analogic, and the IP (provided that there are no network issues) is instantaneous.

I would say:

1) 5-20 seconds

2) 1-5 seconds (and GPRS is roughly the same, 3g/4g is on the lower side)

3) 0-1 seconds (really, the sheer moment you press the green button, the receipt starts being printed)

andy_ppp 3 days ago 0 replies      
I mean worldwide Monzo (UK challenger bank) get's a buzz in my pocket from their app in < 5 seconds to say accepted/declined.
Confusion 3 days ago 1 reply      
I have no idea what you consider slow, but the latest improvement here is contactless payments for anything under 25 EUR, which only requires holding the card close to the terminal for about a second. After which the payment is confirmed after another second.

Payments for which a PIN is needed are confirmed in the same amount of time and entering the PIN is the slowest part.

sundvor 3 days ago 0 replies      
Using Samsung Pay which uses NFC on my S8 / Gear S3 here in Australia and it's pretty much instant. And I get a digital receipt on my device straight away, which is awesome. Protected by fingerprint, or code, so feels more secure than the Mastercard plastic with embedded NFC pay wave.

Tap based pay has become ubiquitous in Australia, and I love it.

Beltiras 3 days ago 1 reply      
It seems to differ between implementation. In Iceland the readers have usually been superfast. We just had a Costco open and the readers there are superslow. Goes through multiple handshakes and notifies you of the process. They might be hooked up to a different payment processor than the local ones, hence higher latency.
zeep 2 days ago 0 replies      
I don't know why but there is a convenience store around here that is faster than everybody else... I need to ask them what their trick is. I think that it is as fast as magnetic strip readers (not as fast as McDonald's strip reader, but as fast as most).
callumjones 3 days ago 0 replies      
I believe Index was working on speeding up EMV transactions: http://www.index.com/payments-and-security/emv/

I thought it now depends on the firmware in the card readers, which it seems companies like Index control.

astrostl 2 days ago 0 replies      
My hot take on them:

- my wait is annoying, population person-hour waits are breathtaking to consider

- all of my breaches are internet-based anyway, so I don't see how it helps much

If all my CC transactions had an optional, on-the-spot second factor, now we're talking.

twothamendment 2 days ago 0 replies      
Just two days ago I wondered how Costco was so blazing fast. I have the same hardware on my desk for development, but whatever they are doing is very different than what our partner is doing. I was only guessing - but they only have one bank to deal with?
FrostAlot 2 days ago 0 replies      
Came across this article which talks about what goes on in the background: https://tech.affirm.com/deep-dive-payments-60f5d17f6c71
pbreit 3 days ago 1 reply      
Previously the mag-stripe conducted your card number to the merchant and they could charge essentially whatever they wanted (but there were various reasons they would likely charge the amount you owed). With chip, they have to compute the final amount while your card is inserted and cannot deviate.
IgorPartola 2 days ago 0 replies      
And how come Apple Pay is so much faster than the chips + signature or chip + pin method?
dbg31415 3 days ago 0 replies      
So you think they are bad in the US? Live somewhere else for a while... you try the system in Australia and you'll REALLY think they are bad in the US. Ha. But yeah, compared to other places the US is lagging. By a fair bit.
jimjimjim 3 days ago 0 replies      
The workflow can be quite quite complicated.

card<->reader<->pc/terminal<->transport (ip/phone line/gprs)<->financial switch<->financial institution.

Add to that emv, tripledes etc and it all adds up.

randomfool 3 days ago 2 replies      
FWIW, Square's chip reader seems to be much faster than many others.
cozzyd 3 days ago 0 replies      
All I can say is it was very slow at the McMurdo gift shop
tomerbd 3 days ago 1 reply      
could it be on purpose? to have it more secure? like, wait before you can retry?
jimjimjim 3 days ago 1 reply      
also,other countries have completely switched over to chip/pin for security reasons with little or no problems but due to not wanting to confuse US tourists the terminal software must allow pin-bypass so they can still sign instead of using a pin.


m3kw9 2 days ago 0 replies      
Network latency
sds111 3 days ago 1 reply      
ronpeled 3 days ago 1 reply      
just another reason we'll move faster into blockchain and decentralized crypto currencies...
Figs 3 days ago 0 replies      
I don't know what the reason actually is, but I assumed it was slow by design to make it harder to compromise, similar to bcrypt.
Mandatum 3 days ago 1 reply      
Bad internet speeds, WiFi or business skimping on internet. It's never usually the terminal, it's the connection to their payment provider, or their payment provider reseller's connection to THEIR payment provider.

It's very common for bars and restaurants to have a dedicated line for the terminal, but usually they'll skimp on tech (have seen dial-up over POTS or in a fibre-capable premises). Also very common to use 3G or 2.5G.

It'd take a tech all of 5 minutes to diagnose and suggest a fix for 98% of these slow terminals. It's strange seeing businesses not look to fix these issues. If I was a payment provider I'd probably run diagnostics against my customers terminals every day and force poor performing customers to have someone come in and fix it.

Ask HN: Why doesn't Google provide an option to open .txt files in Google drive?
16 points by rpathangi  1 day ago   2 comments top 2
accordionclown 1 day ago 0 replies      
nobody seems to want to serve files.

dropbox once offered, but has stopped.

github is about the only place that'll do it nowadays.

just avoid the middleman and get your own site.


lwlml 1 day ago 0 replies      
Or Markdown for that matter. Or YAML.
Ask HN: What's your process for learning?
209 points by mysterpaul  2 days ago   93 comments top 52
danielvf 2 days ago 2 replies      
The biggest test of what I've learned about learning was the day I had to learn embedded programming in twenty four hours.

A customer called me at 5 pm. They had a possible six figure hardware sale, but a key aspect of their hardware was too slow, their only embedded software/hardware guy was no longer working there, and they had to have the new code in 24 hours for a demo.

The software component to be sped up was three cores running handwritten assembly, and had been optimized by several people over four years.

The total of my embedded software experience was fooling around with an Arduino. I'd never written assembler before and never see this processor or its family before.

This was going to be good.

I wrote down the problem, and did the math to find out what the solution would have to look like.

It's hugely important to define the problem, and constrain the solution as much as possible. Nailing these down is probably the single most important "trick" problem solving.

With the problem defined, and the solution constrained, I printed the entire processor manual, and read/scanned it through in one sitting. I then went back over the memory and instruction timing sections, since that was going to be the hardest part.

I at least, learn much better by first scanning through a paper book on a subject. This lets you get the big picture all in your head at once, and see how things connect. Unlike just reading an overview, you also get to see the hard details that make up the way the system works. Then go back through later for the sections that matter for the problem you are working on.

I hooked up the customers hardware to the computer, flashed code the existing code to it, then changed the code to turn a status LED off. This was just to verify that I had the code to hardware toolchain working.

I've learned to bite off a small piece at a time, and then build up, rather than trying to solve everything at one go. The first code I ran on the processor just changed a status LED. This let me focus on as small of a chunk as possible, and deal with getting the new IDE configured, etc, without having to worry about the whole class of problems that would come from running my new algo.

I know I need X amount of sleep to solve problems. Even with a crazy deadline, knew I'd do still come out ahead. I went to bed at my usual time.

When I woke up, I knew how to solve the problem. The solution was similar to drawing a diagonal line on a computer screen - which is a really easy problem.

I've found that you can think in your sleep. Maybe this is just me again, but I've learned that as long as I clearly layout a problem, solution, and tools before I sleep, I wake up with the answer. I don't even wonder anymore if it's going to happen. Perhaps this is just the result of a lot of experience, but it never fails. If I'm stuck on something during the day, I just take a shower or a nap and know the answer afterwords.

Because the algorithm was going to be the most important part of this, I coded a JavaScript/HTML 5 canvas visualizer that gave me a live slider for the input variable and showed me a single view the output over many thousands of time steps. The JavaScript version of the algo worked great.

In optimization, the algorithm usually matters far more than anything else. It wasn't that I was the king of assembly language programmers, it was just that I was doing an entirely different thing than the previous programmers had been optimizing. I started with "what would the ideal solution to this problem be", and they started with "let's translate a hardware concept to software".

The second biggest trick to working with a new problem is visualization. I've learned that I can hugely increase my speed of understanding by building tools to visualize the problem and what my code is doing to solve it. For example in the recent, awesome, Halite programming competition, I built a tool that would let me output annotated html5 game maps and documents from within my code. Here's an example visualization output, straight from source code http://braino.org/thoughts/halite_the_simple_way.html OODA loops really do matter, and really are constrained by how much you can see how fast.

After breakfast, I worked out the assembly instructions I'd need, tracking the timing and register values on graph paper. I read up carefully in the docs on each instruction I'd need.

By lunch time I had a paper version that should work, and by 3pm I had it running in the product and had learned how to use an oscilloscope. The customer picked up the hardware and got the sale. The new version used one core instead of three and was measurably, literally ten thousand times improved.

I was now a carded member of the Real Programmers Society.

adamnemecek 2 days ago 4 replies      
For books, you have to generally read them like 5 times. The first pass might take me like an hour, it's mostly to establish a general mental framework for what's in the book (actually try to read the table of content, and like familiarize yourself with the words you might not know). On the second pass, you will actually try to read the book and retain like 20% of what you read. On the next one try the next 30%.

This approach has the advantage that it lets you decide what's important. I also like to believe that it establishes better connections between the single ideas.

I would say that goals are counterproductive until you are somewhat comfortable but not when starting out. Like yeah sure, you should make some progress but you are in an uncharted territory, the best thing you can do is to walk around a bit and make sure you stay engaged.

If you move to a new city, you probably walk around the neighborhood for a bit, then to the neighborhood next to yours etc etc.

Joeri 2 days ago 3 replies      
I almost always only learn things that I can immediately apply afterwards, because otherwise I find I don't retain enough useful knowledge that I have to go through the same learning resources again by the time I need the knowledge.

I have two learning modes. When I first come across a new topic, e.g. hadoop, I will go broad and skim as many learning materials as I can to get an idea of the lay of the land. Once I feel confident I have a handle on the major parts and technologies involved, I'll switch to the second learning mode and work through the subjects / technologies one by one by searching online for "best way to learn X", figuring out what the common denominator is, and then working my way through that while taking notes in onenote.

The note-taking is crucial for retention as well as keeping track of salient points (it's all in a onenote notebook, so I can find something relevant again even if I don't recall the particular book it was in).

What I wish existed was a sort of wikipedia for learning, keeping track of every subject / technology and giving a reference to the best learning materials in a crowd-sourced way. Right now learning sites focus on their own content, but it's not always the best, and it is not crowd-sourced. The best hits for learning resources are usually stackoverflow or quora links, but neither are the right format for such a thing.

mikegerwitz 2 days ago 1 reply      
My learning falls into a couple main categories: formal study for the sciences (be it math, programming, crypto, etc); and broad research for advocacy and activism. Both of these involve keeping up with current events, the latter moreso than the former; the former can be especially time-sensitive.

I don't have the time to put these in any coherent order, so I'll just list some:

- Bookmarks. I find much of my information online. I make aggressive use of tags, and I found that organizing them into folders is too difficult and a waste of time (unless grouping them for a project/talk temporarily); the tree structure doesn't lend itself well to a graph of concepts. I have ~10k bookmarks. I keep them; you never know when they'll come in handy, even if only for trivia. Figuring out what tags are appropriate forces me to extract key material.

- Maintain a reading list/backlog. I have short, medium, and long-term lists. Go through them on occasion and re-order them by interest/importance. Remove ones you know you won't have time for.

- Learn to speed read. I find it difficult on a screen, but easy on paper.

- Hands-on experience: if you're programming, go hack on your favorite project, look at bug reports, or write your own. Struggle through problems before you give up and look online.

- My time is split between many things. I use Org mode to organize my thoughts and agenda. Sometimes I can do the entire project in Org mode (e.g. https://mikegerwitz.com/projects/sapsf/tree/slides.org, but I left my time tracking private). It also integrates with my mail client (Gnus), where I live a good chunk of my life outside of work.

- While I read many articles and blogs and stuff online, for any in-depth material, I buy the book or print the paper and read offline. I have a system with 5 different color pens that I use to aggressively mark up and underline (blue general concepts, red a problem, green a solution, purple a technical detail, black misc.). I have a Bamboo tablet, but I still prefer paper.

- As I mentioned in another one of my comments (and as adamnemecek mentioned), read a book multiple times (http://pne.people.si.umich.edu/PDF/howtoread.pdf). It not only helps with absorbing the information and selecting what is important to you for further study (which is important given limited time), but also helps if you can't often finish books; after a few iterations, you'll have a good idea on all of the concepts and know _what information exists_ and _where to find it later_ when you actually need it. Discovery is the most important (thus my bookmarks)---material is always there to reference.

- I don't have time to watch videos---I prefer transcripts, which I can also search through. If I do need to watch a video (either because it explains a concept better or because there is no alternative), I watch it at 2--2.5x and slow down when I get to something I'm having trouble keeping up with. Some people talk slowly even at 2x. :x

- Get rid of distractions. One of the best things I did was create an agenda in Org mode, because once I complete a daily task (e.g. reading news sites; checking mail; checking GNU Social), I _stop_ and move onto another task. No peering at my e-mail or news sites 20 times while I'm doing another task.

- Similar to the previous: I only work on personal things at night. I have a family, and I want to spend time with them---I feel guilty if I work during the day when the kids want to play, and all the noise is a distraction; it breaks flow constantly. Wait until a calm point.

- Iterate over your system. Everything I do has evolved over the course of many years. The learning curve for some tools will slow you down, but can be very rewarding. The iterative process can slow you down. But that's not always the point: a good system can have returns in the long run, but it also _reduces stress_; you want to enjoy learning, enjoy the tasks you're doing, and not have to worry about other things. This might involve writing scripts, too.

I have more things, but that'll have to do for now.

dizzystar 2 days ago 0 replies      
I think the question is a tad ambiguous. Are you talking about learning from scratch or building on what you already know?

The common thread in both is mastering the foundations. I know this is controversial, but I believe in book learning before playing whack-a-mole around the internet, simply because you aren't at the point where you can differentiate the signal from the noise.

After the foundations, I learn on a need-to-know basis, which is generally more applicative: if you are trying something that's never been done before, then the perspective is top-down instead of bottom-up.

I don't use notes, todos, online tracking, or whatever goal-oriented resources people are using. I don't see learning as a goal-oriented exercise so much as an accidental accumulation of knowledge. Knowledge gained best from a genuine interest in the subject at hand, which often leads into a genuine struggle to learn some topic, either because it is genuinely difficult or it something you find boring but necessary to learn to continue.

I'm an autodidact, and really, the best advice I can give is learn yourself first. Be absolutely honest with yourself about your interests, your limitations, and the answers, via a long journey of trial and error, will eventually come to you. The fact is, we aren't all able to fit into a mold, and no matter how much advice you read... advice reading is pretty much worthless without a grounding on failure.

cher14 2 days ago 1 reply      
I made a tool to help making notes while studying.Aim was to make something which allows you to:

Add text and images quickly, so you can type along with a lecture, or by copying and pasting text, html or pdf from documents you are reading. At the same time it must be easy to add and scale images.

Tidy up and restructure your note. Just typing your notes is not enough. You also need to think about it, and restructuring or tidying up your notes is a great way to do that. The tool you use should not make you redo or rewrite the notes completely. It should just be click and dragging without messing up the formatting.

Show structure in multiple ways (colors, sizes, shapes, connections etc). Making notes in a text editor is limited. You need something that does not just scroll up and down, but also left and right. Something that looks more like a diagram or a mindmap, to which you can also add connections, labels, arrows, and colors. Having notes that look more like infographics helps me alot to remember or retrieve what is in them.

Have overview and detail in the same map without to much clutter. I myself like having notes on a topic in one document, but it must still be easy to show the structure and the details.

I am pretty pleased about how all this works in Breakdown Notes (my project). If you would like to check it out I suggest you take a look at an example map about english grammar:https://www.breakdown-notes.com/makemap/load/grammar

jvanloov 2 days ago 1 reply      

I pick a project that interests me at some point; currently "I'd like to have an internet music player that sits on my cupboard and doesn't require my tablet".


 * decide on platform (CC3200, because it has wifi, enough processing power, and I happened to have one) * build something that decodes an MP3 stream (investigate, pick Helix as the decoder, make it run on the CC) * think about hardware (DAC, amplifier) * think about enclosure (wood, how to do front panel)
I knew next to nothing about many of these things when I started, and I'm making lots of mistakes along the way, and I won't become an expert in any of these things, but the overall goal/"target" provides a guide to decide what to learn next. A search engine then helps me find the resources I need.

For tracking my progress, I've started to use Emacs org mode.

jasode 2 days ago 1 reply      
>Do you focus on one topic/book/course/project/article at a time, or split your time between multiple things?

For me, I deliberately split across multiple topics/books because my brain has different thresholds of concentration depending on time of day. The early mornings are best for more challenging subjects (e.g. math, deep learning algorithms, etc). At night, it's easier to read softer topics like history and politics. I think it's important to pay attention to your brain's energy levels and when/how it gets distracted. With that knowledge, you optimize your learning schedule around that.

>- Do you use any tools to track your resources, todos, notes, or goals?

Since learning time is finite, I think it's a important to put together a little curriculum of all the topics you want to learn. Prioritize them.

>Are there any pain points you have while learning

Another piece of advice that nobody ever seems to emphasize (but I wish I had known early in life) is that there are topics that will be a waste of time to learn. In my case, I regret I spent hours on PowerBuilder, IBM DB2, and DOS batch scripting with VBScript. It doesn't mean those skills are bad for others but a little research would have made me realize there were other more important skills to spend precious hours on. (Time spent learning X is time not spent on learning Y.) The tldr is that people will often evangelize things for you to learn that you really don't need to learn. They have good intentions with their advice but they don't know the complete picture of your life's goals.

goshx 2 days ago 1 reply      
I usually focus on one goal at a time and dedicate all the time I have available to it.

The key is that I must have something I want to accomplish as a reason to learn something new. For instance, if I just decide to learn a new programming language, I will lose interest very quickly. But if I decide I wan't to create a new app, I can then use that same programming language for the job and I will consume every information I can in order to make it happen. Usually using google and youtube to find the resources. I start from the basic I need to start and go on from there.

I've used that method to learn new programming languages, surf fishing, technical analysis/investments in the stock market, grow plants, electronics, cooking, etc.

TLDR; focusing on a project makes it easier to learn as you need the information in order to make it happen

ellius 2 days ago 0 replies      
I read whatever interests me until it doesn't interest me any more, and I quit reading things that don't interest me. I don't say that to be flipit's actually what I do, and it has allowed me to consume an enormous amount of material over the years. The only trick to this method is not to confuse difficulty with boredom. There are times when I learn to code, for example, or when I read about obscure financial wizardry or mathematics, where my mind drifts and it feels like boredom. But the reality is just that it's hard. Sometimes when things are hard you do have to change your track until you've developed prerequisite knowledge to come back to it. Just make sure in those instances not to decide the thing was boring because you couldn't handle it on the first go.
sghiassy 2 days ago 1 reply      
I'm surprised nobody has mentioned Anki cards. It's a scientifically proven method to learn any topic through spaced repetition.

Any time you find some thing you want to learn - add a card to Anki. Anki will make sure you never forget and truly understand the topic.

I highly recommend AnkiApp: https://www.ankiapp.com

Or: https://apps.ankiweb.net

Top19 21 hours ago 0 replies      
I would look at Timothy Kenny's courses on Udemy for a really good explanation on this.

There is also a book called "Cognitive Productivity" by a professor at Simon Fraser university I recommend you check out.

Sadly there is not a lot on this subject. A good example of this is the fact that right now, the only traditionally published book on this topic is literally called "How To Read" and was published in the 1940's.

- - - - -

To directly answer the question though, you should: 1. Read a book and use a pen instead of a highlighter. This allows you to not only underline but also write in the margins insights 2. Type up your raw notes 3. Take your raw notes and the synthesize them into a higher level summary of the main points 4. THEN, THE MOST IMPORTANT STEP, take your synthesized notes and create a "concept map" of them, something visual. Mind Maps are a good example of this, but they're only 1 type of concept map. This is extraordinarily easy to remember, and ideally you want to create a visual diagram for each book you read. These pictures or patterns are incredibly easy (comparably) to store in long term memory than recalling say 3 pages of notes. Also they are far easier to draw and convey to another person.

hypertexthero 2 days ago 0 replies      
Work on projects that you are passionate about. Work together with peers, get help when you are stuck and help when they are stuck. Be playful, do not be afraid of making mistakes and do not focus on perfection.

I warmly recommend Pragmatic Thinking and Learning by Andy Hunt and Alex Martellis lecture Good Enough is Good Enough! from EuroPython 2013: https://www.youtube.com/watch?v=gHG9FRSlPxw

More notes on learning: https://www.simongriffee.com/what/learning/

edanm 2 days ago 1 reply      
Depends on what I'm trying to learn, but for things like Math and other technical topics, I'll try to find textbooks/video lectures, go through them, while adding them to Anki.

If you don't use Anki - you really, really should. I'd be lost without it - it's one of the greatest life-hacks I have. Without it, I don't really feel like I've learned something "for life", only just for a moment.

Also, reading multiple textbooks on the same topic is in general much better than just reading one, preferably in slightly increasing complexity.

danielbigham 2 days ago 0 replies      
I work in the field of natural language understanding and in the last few years I've figured out how to use that very advantageously wrt learning.

Here's the approach I use:

- Every time you come across a new term or concept, you create a new "notebook"/document. That's right, one notebook per concept. The title of the notebook is the name of the concept.

- You create a summary for the concept using bullet points. What you're trying to maximize with this set of bullet points is the speed at which, in the future, you can re-read them and achieve a similar brain state to what you had when you originally learned the concept.

- You can then obviously have extended notes below that where you go into more detail.

- Then, crucially, you create something akin to a regex that will allow you to quickly and unambiguously look the concept up in the future. If you just learned what a rectified linear unit is, your pattern might simply be:

rlu | (rectified linear unit)

- You then have a hotkey on your computer -- I use Ctrl-Q, that brings up a text box where you can type the name of the concept you want to bring up (ex. "rlu"). When you press ENTER, it doesn't give you search results if there's an exact match, but instead directly opens the document and makes it instantly viewable / editable.

- As your concept graph starts to grow, you have links within your notebooks to related concepts as they're referenced.

- Each time you read an article that is important to your understanding of a concept, you quickly open up that notebook and add that article, and perhaps one or two bullet points that contain the key things you learned that expanded your sense of that concept.

- This same system can be used for more than learning text book information. You can use it if your a project manager to keep tabs on the millions of things you have to juggle, you can have notebooks for people, for lists, and you can have "regexes" for "programs"/scripts, for web pages, for files/directories, etc, etc.

- More general than "regexes" are context free grammars. In this context what that means is the ability to have named "subroutines" for your regexes. For example, if you end up using RLU as a sub-part of a lot of other notebook regexes, then you might define $rlu to be a short form for (rlu | (rectified linear unit)).

themodelplumber 2 days ago 0 replies      
> focus

For casual learning, I split my time across various subjects and do whatever feels interesting. For serious learning like a certification, I set goals based on e.g. time spent studying.

> Tools

I use plain text files, either a single file or a folder full of them. I try to develop a sort of learning system for the subject in question.

> Pain points

I was too reliant on outside sources before and did not spend enough time creating "my own" knowledge through hypothesis, testing, measuring, etc. Nowadays I realize I have very little need for most of my books; it's more fun to see what I can come up with on my own.

I also wrote up a "learning ladder" that ranks various forms of study; for example before opening a book or a browser tab on a topic I will check to see if there's a short YouTube video available. After that I might look for an ELI5 on Reddit. Then eventually you get to books.

While that may seem obvious, it represents my taking responsibility for my own learning and I am a more motivated person because I created the ladder by myself and continually work on it. I have hundreds of these systems in areas from learning to fitness to work operations to finances, etc. When I go on vacation it's the #1 "book" I enjoy reading and pondering (I save all the .md files to Dropbox for reading on my phone).

nikivi 2 days ago 1 reply      
I actually started using a search engine I built for choosing what and how to learn things.


As for learning I usually mind map concepts I thought were interesting and then review the mind maps and create flash cards. It depends on the content however.

If it is something actionable like learning a programming language, I try to use the knowledge straightaway and build things. :)

neovive 2 days ago 0 replies      
It depends a lot on the topic. For coding/tech, I find working through an "organized collection" of video tutorials by rewriting the code locally and taking notes along the way, works very well. It's time-consuming, but I tend to retain more concepts after watching, listening and practicing, since it engages more senses (vision, sound and touch).

Prior to learning a new topic, I try to make mind/concept map of the material based on my initial understanding from reading articles or browsing books, docs and examples. It also helps to have an end goal or project in mind to connect concepts to actual outcomes. You can also try explaining what you just learned to a non-technical person; forcing you to "make sense" of a concept while converting to non-technical jargon.

Overall, it just takes time. After years as an autodidact, I haven't found many short cuts around hard work. There are many great techniques out there--some will work for you and others won't--but consistent practice is usually the underlying theme.

munificent 2 days ago 0 replies      
1. Read a little until I'm itching to try to apply what I know.

2. Try it.

3. Reflect on what went wrong.

4. Go to 1.

lojack 2 days ago 0 replies      
Usually, when learning something, I have a project to work on to apply my knowledge to. I find that I'll start by searching for some good resources. This is typically books, blogs, subreddits, screencasts, awesome-X, etc. Then I'll spend an hour or two a day learning from whatever resource I'm using, and spend the rest of my time working on the project, applying what I've learned.

Sometimes I don't have a project to work on, but I'm interested in something. For these things I'll push to use on new projects at my company, and will read a book or two about them prior to convincing people its a good idea. This isn't always ideal because the knowledge doesn't really stick without applying it to projects, but it scratches my itch to a certain extent.

hyfgfh 2 days ago 1 reply      

[ ] Define a subject, and a goal

[ ] Get resources

[ ] Create a topic list

[ ] Filter the resources and assign resources to the topic list

[ ] Think about possible projects

Study- For each topic

[ ] Collect data in a reference note

[ ] Create flashcards

[ ] Search and create questions / exercises

[ ] Explain the subject in a piece of paper (Feynman's technique)

[ ] Apply the knowledge in quizzes and practical projects

[ ] With notes, explanation, quizzes and flashcards create a KL


- Do you focus on one topic/book/course/project/article at a time, or split your time between multiple things?

> I focus on topics, not resources. But I split my time into multiple disciplines.

- Do you use any tools to track your resources, todos, notes, or goals?

> Yes. Evernote(Premium)

- Are there any pain points you have while learning, or are there any tools you wish existed?

> Yes, a good markdown 'platform' compatible with Linux/Windows/Android

matthewvincent 2 days ago 0 replies      
My favorite way to learn a new topic (which consistently works well for me) is to read several books about the same topic back to back.

I find that if I read three books by different authors on let's say React for example, which are all meant to cover the basics, I learn much more than by reading one book three times. The difference in the authors voices and inevitable variability of emphasis and style throughout, really helps me stay engaged and pick up the things I might have missed in the last book.

I'll usually do this first, then move on to tutorials and deep dive type books which are mostly a breeze by the time I get to them because of the very solid fundamental foundation provided by the initial book set.

closed 2 days ago 0 replies      
Other people have covered in detail different approaches to learning, so I figured I'd mention a weird thing that's been helpful for me, in case it's useful.

While learning, I try to split off a little piece of myself into a sort of adversary, whose job it is to get me to do basic problems / tasks, in order to demonstrate that I don't remember as much as I think I do.

This might happen in the form of spending an hour one morning leafing through older material, and setting aside things for me to solve / re-prove. It's pretty simple, and I take some kind of perverse joy in finding areas where I thought I would remember much better.

jgamman 2 days ago 0 replies      
Two classes of problems: something related to what I'm already well versed in is different to something that I'm a noob.

For noob stuff, I make and quiz myself with physical cue cards. The act of writing the card and the answer seems to be 75% of the memorisation i need but i forget quickly... related to that, i write myself 'guides' that I wish i had read weeks/months before when i didn't know anything. something about writing the subject down as if i'm teaching it let's me anchor the beginning at a level that i can treat as a given and then baby steps all the way to the end. it's a bit Feynman-ish in that it really does force you to acknowledge when you're skipping over something and just rote-memorising.

Also, treat black boxes as a known unknown that you can always go back to. You often have to link up a dozen black boxes to get anywhere and if you go down each rabbit hole, you'll never get to the end. Better to play with them, get a feel for how they are behaving and dive in if/when they aren't doing as expected.

Quiz yourself. After a while it gets quite relaxing to glide over problems that stumped you when you first thought your should write them down. helps remind you that you _are_ learning.

Lot's of books/articles etc covering the same topic and re-reading them. You're different each time and you never know when you are _ready_ to learn that particular thing.

WheelsAtLarge 2 days ago 0 replies      
Here's a quick clip on learning and knowledge from Richard Feynman one of the greats in physics. I suggest you watch the whole video, it's good but at the last minute or so he summarises learning and knowledge in his view. It's GOLDEN!!

Here it is:


beat 2 days ago 0 replies      
Try to get learning working in multiple aspects of your brain at once. One of the best "learn about learning" lessons I ever had was studying jazz theory. My teacher used a four-way method of learning chords - say the name of the chord, visualize it on the keyboard, feel the shape your hands make to play the chord, and listen to the sound of the chord. I've applied this sort of approach to all sorts of skills since then.
agitator 2 days ago 0 replies      
I take the most practical approach possible, because it allows me to get to my goals as fast as possible.

Usually, I want to learn something because I want to do something with that knowledge. So as an example, if I wanted to develop an app on a platform or in a language I have never used before, I would start by reading some general knowledge about the language or platform, to get my mind going. Maybe grabbing a book or finding some good online basic tutorials. I usually never finish the books, because I often get to a point where I understand enough to start asking specific questions that I need answered in order to make progress on my project. So I stop with the general knowledge, as I have enough understanding to actually start implementing things, and I start researching the specific questions I have for making progress on my app. And I just start executing and working on it, and researching answers as I go. This way, I learn as I go, and I keep myself motivated by actually having deliverables at the end of each "lesson" I set for myself.

amorphid 2 days ago 0 replies      
I learn best by doing. I imagine how something might work (I am usually wrong!), and try building it. When I discover that I need to learn something, I try to communicate what I'm trying to build, why I am trying to build it, and where I got stuck. Then I ask around a bit (StackOverflow, Quora, Reddit, coworkers) to see if someone has insight how I might succeed. The depth and quality of answers I receive hint at the quality of my question, or the familiarity others have with the problem I am solving.

If I get no answers, I usually grind away at the problem until I lose interest, can ask a better question, or make enough progress that I can answer my own question.

Useful answers include offering:

- a suggestion to use alternative solution with acceptable trade-offs

- a different approach to how I solve my problem

- a specific answer to the question I asked

- to collaborate with me in finding a solution

- a supportive comment (the cutting edge can be lonely!)

- understanding about a trade-off or consequence of how I am approaching the problem

- a suggestion on improving the quality of the question

- a referral to someone who knows the answer

garysieling 2 days ago 0 replies      
I built a tool to hep me find good talks, https://www.findlectures.com. I've been curating some of the best of these and sending them out in an email (http://www.findlectures.com/emails), which has forced me to push a lot further exploring available topics.

I split my time between multiple topics, generally aiming for variety over depth, and collect recommendations for books / speakers from various places (friends, Hacker News, the evening news, etc).

I've found that having multiple simultanous books or project s is helpful, because they can interact in interesting ways E.g. one author has accidental insight into the topic of a second book, for instance, or a footnote to a problem in one project solves a major problem for the other project.

megamindbrian 2 days ago 0 replies      
I use the app I made studysauce.herokuapp.com for memorization. Google calendar for tracking progress and lots of personal analytics. I spend about a day on little set up projects such as connecting to Watson, or adding up calendar events using Google API, or learning the basic of some new framework. I'll do one of these little projects 1 to 4 times per month. Reading other people's research is a good starting point for me. I wish API's weren't so expensive. That is cost prohibitive of my turning a little app I write in a weekend in to a product. No one wants to pay 30 dollars on top of my 20 dollar monthly expense. If my use case ends up costing more than about $5 per month, I try it out and then shut it down. Usually there is no output from my adventures except self-improvement, which is pretty disappointing, I'll admit.
startupdiscuss 2 days ago 0 replies      
Here is the key insight (from, in my mind, Gilbert Ryle originally):

There is a difference between knowing that, and knowing how.

When you want to learn that something is the case, read.*

When you want to learn how something is done, do.

If you want to learn how to do something, and you are not doing the thing, then you might find yourself not learning.

* You can take notes, summarize, and repeat.

sunwicked1 1 day ago 0 replies      
I wrote a summary of a Coursera course, which I highly recommend, " Learning How to Learn " and a book " Deep Work: Rules for Focused Success in a Distracted World ". You can find the first draft here https://goo.gl/mfNhp1
JeSnuster 2 days ago 0 replies      
Head. Wall. Repeat.

Persistent effort. Work it out yourself. Don't just read it, think it, play with the concept until you can generate examples and explain them to others.

aalhour 2 days ago 0 replies      
I have different processes and strategies depending on what I am learning and how familiar I am with a topic. For example, if I would like to explore a brand new topic that I have no clue about then this is how my thought process looks like:

1) Look for verticals/lists of resources. These exist in all fields, awesome-lists are just an engineering example, universities keep lists of open courses, list of book recommendations or lists of open-sourced books.

2) Look for key figures in that field. PhD Researchers, Conference Presenters, TEDx Talkers, Professors, Founders of Companies in that field. Follow their pages/blogs/twitter accounts and ask them what resources do they recommend for beginners. Compile your own vertical of resources based on cross matching the resources here with the ones you found in other verticals.

3) Look for courses, new ones are usually offered on MOOC Platforms, archived ones can be found on university websites. Check the reviews of such courses and pick the most beginner friendly one. Depending on the field, if it's not technical then you will have to look for courses elsewhere, for example: The Great Courses.

By now you should know, roughly, the best resources (Books, Articles and Courses) and how to find more (verticals and people in that field).

4) Learn the terminology. One way to learn the terminology of a field is to pick the book you decided is best to start with using the previous 3 steps, open it and go to the index section, read the index and start googling terms as you come across them, for example: If I am exploring Data Engineering and I come across the word or term "stream processing" then I will start googling that term. Familiarise yourself with as much terms as possible.

5) Commit to reading at least 1 book, going through 1 course and trying to apply as much of what you learned as possible. Technical subjects are the easiest to apply this step to, since you can start a side-project at anytime.

P.S. you can always ask for guidance in this, you don't have to repeat all the steps for all fields, for example, you can submit an "Ask HN" post asking for resources about X topic or a question on a related Subreddit such as: /r/PostgreSQL.

Best of luck!

EDIT: typo

ssivark 2 days ago 0 replies      
In my experience, understanding theoretical concepts is challenging because the process of learning is often not legible [0].

What has worked for me is having multiple periods of immersion into a concept or topic, while referring to multiple sources, with notes [1] summarizing small bits as I learn them. I keep refactoring those notes as my understanding grows, to include coherent maps of larger and larger chunks. On short time scales, my learning is not measurable, but experience indicates that my understanding grows over time. Looking back, my periods of immersion range from a few hours/days, while I tend to revisit topics every few weeks/months. I guess this falls under the umbrella of spaced repetition methods.

Since my interests and pursuits are very diverse, and I'm seldom "finished" with something, I don't like the psychological weight of todo lists [2]. I maintain lists of interesting stuff [3], and several hundred browser tabs [4] but they're mostly not things to be checked off, and languish peacefully for long periods. That said, I'm on the lookout for better knowledge/idea management workflows and software. What I currently use is organically grown, and very messy.

That was for theoretical understanding. Practice helps, for things one "does".


[0]: Venkatesh Rao: A Big Little Idea Called Legibility -- https://www.ribbonfarm.com/2010/07/26/a-big-little-idea-call...

[1]: Markdown files, or scribbles/diagrams on scratch paper

[2]: Scott Hanselman: It's not what you read, it's what you ignore -- https://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIg...

[3]: Zim Wiki notebook -- http://zim-wiki.org/manual/Help/Notebooks.html

[4]: I <3 Firefox and the TabGroups extension

clarry 2 days ago 0 replies      
Learning what? Welding? Practice, practice, practice.

I focus on the thing that I'm most interested in at the moment. That is rarely an entire book, though I've done that too.

If I feel like I need to take notes to keep track of what's going on, I will do so. I might also leave a note about things I've skipped or glossed over and should want to (re)visit again later.

The biggest pain point is usually scattered information, or information that assumes some background you don't have and doesn't give you enough clues to fill in.

dyarosla 2 days ago 0 replies      
I think this question can be best answered by first looking at what research tells us about learning (otherwise your question attracts only anecdotal responses which will be less universally applicable). Here's what research says, followed by how it applies to your questions in particular.

1) Mastery based learning is generally the most effective process (learning each axiom of a topic to 100% before moving onto the harder topic)

2) Spiral based learning is an effective add-on to mastery based to keep you remembering the things you've learned (coming back to a topic just at the point of forgetting keeps you retaining knowledge)

3) The content you learn off of (video, text, etc) has different attributes which may correlate to better transferring of knowledge: Shorter videos, hand-written visuals, enthusiastic voice, have all been shown to correlate with better learning outcomes.

4) The motivation you have for the topic you're learning and how much closer it exists to intrinsic/extrinsic motivation dictates how well you'll absorb a topic. The closer to intrinsic, the more effective learning will be. Project-based learning generally falls into this category: projects that interest you motivate you to learn more.

Now with all of that in mind, to answer your questions:

> Do you focus on one topic/book/course/project/article at a time, or split your time between multiple things?

(1) would suggest that you should not split your time, at least at first, unless you are trying to find a better explanation (3)

> Do you use any tools to track your resources, todos, notes, or goals?

Most of the suggestions sound like meta work. I wouldn't suggest tracking todos so much as perhaps writing down the things you've learned to prove to yourself of (1) mastery or to come back to later for (2) spiraling.

> Are there any pain points you have while learning, or are there any tools you wish existed?

Sounds like you are trying to make a tool to help people learn/track learning at a high, abstract level. Because there is no one right solution to everything because of (3) and (4), whatever tool you create may not actually help anyone unless it's more domain-specific and less abstract.

VoodooJuJu 2 days ago 1 reply      
Several comments mentioned that the best way to learn is by doing - applying the knowledge. How would you go about learning-by-doing something like particle physics or advanced chemistry without access to labs? Are you reduced to creating homemade soap and rote memorization of theory? Could you ever make a meaningful contribution or get a job as an autodidact in either field?
Dowwie 2 days ago 0 replies      
I'd like a desktop app that, when engaged, would monitor browser usage and lightbox my screen after 3 minute of browser use with a simple question "Are you solving a problem or taking a break?". If I choose "taking a break", I'd like a 1 minute countdown timer engaged with a suggestion to focus on breathing instead.

Please? Pretty please? :)

pgbovine 2 days ago 0 replies      
If you're doing needfinding for a project idea to enhance learning, my suggestion is to focus on a single DOMAIN of learning first rather than trying to make something to help learning in general, since it's such a vague and broad problem. e.g., "how do you learn to do your taxes?" or "how do you learn basic home maintenance?"
ivm 2 days ago 0 replies      
No videos, taking notes in Scapple, searching for the most simple explanation in multiple articles at the same time, implementing what I need as soon as possible.

Focusing if the topic I learn is focused itself or not focusing if it's very broad.

mindcrime 2 days ago 0 replies      
I use a mixture of approaches, but w/r/t development I'd say one of the main approaches I use is to just start building something that requires me to learn something new, and then learn as I go. The actual learning is a mix of trial-and-error (in the case of programming), reading books, watching videos, taking classes, reading papers, etc.

For non-development topics (say, math) it's again a mixture of reading books, watching videos, working exercises, etc. And I try to attack problems from multiple angles, by using different books and resources. Just to illustrate with an example:

Last night I started working through How To Prove It by Daniel J. Velleman. I got to the Chapter 1 exercises, and hit a point where I needed to know if a given number was prime or not in order to verify my answer. It was a number larger than the list of primes I have memorized, and I didn't feel like testing all the possible factors by hand, so I just fired up R on my laptop, loaded the matlab library and used the isprime() function.

Later in those same exercises I got to a point where I had an answer, but wasn't sure if it was correct or not, so I just googled until I found a guy's blog where he posted his answers to the same problems. My answer matched his, so I felt fairly confident that it was right (of course, we might have both made the same mistake).

Had I not found that guy's blog, my plan was to post a question to math.stackexchange.com or one of the reddit.com math forums, asking if somebody could verify my answer.

So I started with a book, and eventually used a number of other resources as part of my overall learning experience (a scientific calculator was mixed in there somewhere as well, before I pulled out R).

This might lead one to ask "well, how did you learn R?" First of all, I wouldn't yet rank my R skills very high, but to the extent that I know some R, it was from (again) a mix of sources:

1. A bunch of Coursera classes, including several of the ones in the Johns Hopkins Data Science track, and the Duke "Probability and Statistics with R" track.

2. Working through parts of several R books, including R In Action, Learning R, Using R For Statistics, etc.

3. Trial and error, playing around, using the built-in docs, etc.

That's kinda it. I take notes using pencil and paper, sometimes a plain text file, occasional an OpenOffice Writer document, and sometimes a wiki (I keep a MediaWiki instance running locally).

sevensor 2 days ago 0 replies      
For self-study, I like to dip my toe in the water a few times over a long stretch of time (I've got lots of other things on my plate), and if I decide I'm interested in going further I'll dig into a real project.
elchief 2 days ago 0 replies      
I read books backwards (by chapter) as the end is where the interesting stuff is. I generally read only the section titles and first sentence or two of paragraphs

I find it helpful to type examples as I read too (for programming stuff)

cgag 2 days ago 0 replies      
Multiple books, rotating between them relatively quickly (interleaving), usually 20 minutes.

Make anki cards for key points.

If I'm actually dedicating time to studying that's how I do it, haven't had that session in a while though.

viiralvx 2 days ago 0 replies      
For programming languages.

1) Read the documentation2) Sometimes, do a tutorial.3) Build a small project and ask questions via Twitter/IRC/Slack along the way.

pavlakoos 2 days ago 0 replies      
I need to write things down myself, then read them over and over. It doesn't work if I read over and over what somebody else wrote.
killjoywashere 2 days ago 1 reply      

 def learn(thing, max_time=0, max_attempts=1): while run_time < max_time: while attempts < max_attempts: attempts =+ 1 if do(thing) = 0 break else learn(thing)
Always set a time limit or a maximum number of attempts. Default to at least try (you may already know it).

Edit: I don't write code very much, and certainly don't claim to earn my living on it.

navyad 2 days ago 0 replies      
- pick a topic.

- find reliable resource/book to read from.

- read and make notes.

- refer notes to make things stick.

manikiran24 1 day ago 0 replies      
I am a newbie and want to learn angular js, where can i learn angular the easiest way?
learngr8now 2 days ago 0 replies      
i use a text (word file) template i made - if you want to see, visit


Ask HN: How can I get better at bash?
278 points by cocolos  3 days ago   179 comments top 76
SEJeff 2 days ago 6 replies      
As silly as it sounds, when I was a new Unix SysAdmin, I read the entirety of "man 1 bash", which includes all bash builtins. I found that it improved by bash-foo 100x simply by knowing about so many of the utilities. I also took some cliff notes for things that seemed generally useful.

I did it for an hour or so a night for a week or so.

That being said, a few of my personal favorites to memorize:

* Parameter expansion: https://www.gnu.org/software/bash/manual/html_node/Shell-Par...

* All of test(1) as you can use them in any if statement (/usr/bin/[ is a real command!): https://linux.die.net/man/1/test

* Knowing most of the bash internal variables: http://tldp.org/LDP/abs/html/internalvariables.html

* Keyboard shortcuts and how they are useful. A few example: CTRL-l (no need to ever use /usr/bin/clear), CTRL-k, CTRL-u, CTRL-e, CTRL-a, CTRL-w, CTRL-arrow left, CTRL-arrow right, CTRL-r (history reverse search with find as you type autocomplete)

The best way you can learn the shell is by using Linux as your primary desktop for at least a few months. You'll get very proficient very quickly by doing that.

seorphates 2 days ago 3 replies      
Most of the responses here so far that do not include some sort of a guide are not the responses you're looking for (imho).

Mind your pipes and quotes. Guard your variables with braces. Do not export everything, test for and (try to) handle return codes and conditions and keep it simple (emphasis simple) but most of all just write it.

BASH (or Bourne) is ubiquitous when dealing with systems (vs programs). You don't need to be on the fashionable lang of the day by any measure. BASH, for most cases, will always be there, always ready and, in most cases, is the default human interface for deployed systems. As scripting languages go you don't need "better", you need dependability, zero dependencies with no requirement for modules or any other whizbangwoohoo plug-in. Language Fashionistas and personal preferences aside at least some level of fluency with BASH should be mandatory for anyone interfacing with a system.

soheilpro 2 days ago 1 reply      
I have written a simple tool called mann (https://github.com/soheilpro/mann) to help me remember little things that I learn when working in Bash/Zsh.

Basically, every time I learn something useful about a command, I add it to its mann page and then whenever I need it in the future, I simply run 'mann <command>' to find it.

Here's the current output of my 'mann sed', for example:

 # Add char to beginning of each line sed 's/^/#/' # Replace with newline sed 's/<oldvalue>/\'$'\n''/g' # Replace newline sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/<newvalue>/g' # Plus sign sed -E 's/foo+/bar' # Digit sed -E 's/[[:digit:]]/bar' # Inplace sed -i'.bak' -e <pattern> <file>

koala_man 2 days ago 2 replies      
If you're not already familiar with it, I would suggest learning about the basic Unix process model -- fork, execve, wait, open, pipe, dup2 and friends.

Bash is essentially a DSL for these. A lot of the weirdness you see in the language is due to these abstractions leaking through. For example:

* Quoting is building execve's argv parameter. It's hard to quote correctly if you don't know what exactly you're working towards.

* Redirections are opening and copying file descriptors. It explains their scope, order and nesting behavior.

* Variables are modifying and passing the environment, and their weird scope is due to forks imposed by the process model.

Once you know how you can do whatever you want in C through the basic syscalls, Bash is an extremely efficient and far less surprising shortcut to do it.

agentgt 2 days ago 0 replies      
Besides the obvious answers of just reading the manual, looking up howtos, and stackoverflow I can recommend some habits that might increase your uptake of bash.

1. If you are not running a unix as your default OS switch to one (ie Linux or Mac).

2. Create a bin (~/bin) directory in your home directory of all your shells scripts and source control it. Any script you ever write put in that directory. Even if its not bash (ie python, perl). I find that it is critical to look at how you did things previously to help you learn as well as it saves time.

3. Any command that is complicated one liner that you create or see on the internet... create script and put in the bin directory mentioned above.

4. Optimize your personal bin directory and review frequently.

5. If you run Linux build your system from scratch (ie read Linux from scratch).

6. Bonus to the above: Automate the creation of your personal system through Packer and Bash!

7. Find where things are not automated.

8. Bash is more than just the shell. A knowledge of GNU coreutils as well as tmux/screen is worthwhile and highly recommended.

9. Learn the readline shortcuts. Particularly "ctrl-r".

nunull 3 days ago 2 replies      
Not the first thing to look for, but I've found ShellCheck[1] to be pretty helpful when it comes to correcting typical mistakes.

[1]: https://github.com/koalaman/shellcheck

aMayn 2 days ago 1 reply      
Read Greg's wiki - BashGuide:http://mywiki.wooledge.org/BashGuide
bhaak 3 days ago 8 replies      
How about you don't? Bash as scripting language is rather mediocre.

Anything that is not simple in bash gets hard to read and debug and probably is wrong on some subtle levels.

I have a rule of thumb that any shell script that grows beyond a screenful of lines gets redone in a proper scripting language.

felixschl 2 days ago 1 reply      
Read the manual front to back and install shellcheck. Doing both things has paid off for me a thousand times over. The rest is practice. Complete the bash exercises on Hackerrank. Bash is fantastic in it's domain but it does require serious study in my experience
fergie 2 days ago 2 replies      
Train yourself to take the 20 minutes required to learn to "do it the right way" every time you need to. Its so easy not to bother because you are busy but in the long run you will save time.
rajeshmr 3 days ago 1 reply      
Figure out a problem and try solving it in bash - bash for beginners guide on tldp site can get you started. You get better as you use it.


EDIT : Additional links -

Advanced - http://tldp.org/LDP/abs/html/

Bash programming - http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

soveran 3 days ago 0 replies      
For scripting, I recommend the rc shell from plan9, which is the one I use for my shell scripts. It is only when I want to share a script with other people that I consider using /bin/sh, and even then more often than not I've gone for rc.

I invite you to read about it: http://doc.cat-v.org/plan_9/4th_edition/papers/rc.

I find the control structures simpler and more elegant, and overall its design feels more consistent.For example, consider an if statement in bash:

 if [ condition ]; then ... else ... fi
And now in rc:

 if (condition) { ... } else { ... }
Or a case statement in bash:

 case $1 in "bar") ... ;; "baz") ... ;; esac
And expressed in rc:

 switch ($1) { case "bar" ... case "baz" ... }
In the past, I've used it as my shell too, but now I use it only for scripting. I think you can install it in most platforms.

benjamincburns 3 days ago 0 replies      
I recommend starting w/ Gary Bernhardt's excellent "Tar Pipe" blog post.


From there, move on to using the shell as your IDE. How? First, understand the Unix philosophy. I think Ted Dzubia describes this pretty well in his Taco Bell Programming blog posting:


Great, so now you understand that there are a bunch of useful tools out there and you can string them together to do great things. Now you need to discover the tools themselves.

If you're a "read the dictionary" kind of person, go ahead and start off w/ the Gnu Coreutils documentation. https://www.gnu.org/doc/doc.html

However, if you're like me you'll learn fastest by watching other people work. In this case, I have to point back to Gary Bernhardt again. Specifically, his "Composing a Unix Command Line" screencast will open your eyes wide and very quickly introduce you to a range of incredibly useful coreutils programs in the context of solving a very specific problem. This content is $29/mo, but I'd argue it's money well spent. https://www.destroyallsoftware.com/screencasts/catalog/compo...

kusmi 10 hours ago 0 replies      

I like bash for the same reason I like emacs, in that no matter what the environment is like, I can usually count on my bash scripts to work. I keep them in emacs org-mode files where I store them in src code blocks. I can tangle multiple code blocks into single executable scripts to different directories. Check out org-mode babel, tangeling, and noweb. Keeping all my bash code in a single file solves my issue with having to dig for that one script I wrote that one time because I forgot how to do this one thing ...

If you aren't running Linux on your desktop yet, consider it. Full immersion is a fast way to learn.

brianon99 3 days ago 1 reply      
Flame war between bash/fish/zsh/powershell is almost meaningless to beginners, because the basic skills are common to all shells. (That said, you will love zsh once you use it)

I learned to use shell, about 7 years ago, by reading O'Reilly "Classic Shell Scripting". It is well written, and teach you something that you can hardly learn from google. But don't try to remember everything, especially those advanced string manipulation syntax, because one would usually use a scripting language such as ruby for advanced job.

wingerlang 3 days ago 1 reply      
Helping you how? If you actually have a problem you are trying to solve, then do just that. My experience with command line came from solving problems I had. Today I do a lot in the command line and I am learning new things all the time. However if I just wanted to get "better" at it, then I don't even know where to start because there is no clear goal.
fiatjaf 3 days ago 0 replies      
I wanted to get better at bash too, but instead I ended up getting everything[1] done at fish, which is cool, much better as a language, but no environment has fish pre-installed nowadays.

[1]: https://github.com/fiatjaf/react-site

antirez 3 days ago 0 replies      
The Tcl programming language is what shell scripting should be, basically. It is not just a language with all the features you need, it has explicit Unix shell alike scripting capabilities and strong DSL abilities. An example two-liner:

 set files [glob /etc/*.conf] foreach f $files {file lstat $f file_info; puts "$f: $file_info(size)"} /etc/asl.conf: 1051 /etc/autofs.conf: 1935 /etc/dnsextd.conf: 2378 ... and so forth ...
Also there is an `exec` command that supports pipes, redirections, and so forth:

 set result [exec cat /etc/passwd | grep Directory]
The pipe has no special meaning in Tcl, but because of its DSL capabilities you can do things like that. Exec is a DSL basically.

peterwwillis 2 days ago 1 reply      
From a 14+ year Linux/Unix admin:

Get a very brief reference book of every common UNIX command. Read all the commands, what they do, what options they take. Start using them.

Shells are most useful when they are used to tie together other programs. In order to do this, you have to know what all the command-line tools you have at your disposal are. Learn the tools, then start writing examples using them. Keep the examples and the docs somewhere to reference them later.

For quick reference, the command 'whatis' will give a blurb from the top of the command's man page. `whatis ls' "ls (1) - list directory contents". View many at once with "(cd /usr/bin; whatis * | grep -v noth)". Many often-used commands come in "util-linux" and "coreutils" packages. Read man pages completely when convenient.

It may also help to have a VM or desktop which has no GUI, where you will be forced to use the command-line. When I was starting out I used a desktop with no X server for months. You can get a lot more done than you think (and 'links -g' provides a graphical browser if you need images)

To learn more about Bash itself, you can look for server installation software packages made with Bash, or in the "init" tools distributed with big distros like RedHat, SuSE, etc before they used systemd. But it's better to get used to more shell-agnostic scripting using UNIX commands than it is to use Shell-specific language/syntax.

moondev 3 days ago 1 reply      
I used to lean on python for much of my scripting needs, mainly because the more advanced bash syntax was pretty daunting. Getting better at bash has a trickle-down effect, especially in this container age. ENV var scoping + loops and various var expansion methods really made it click for me. Shelling out to various tasks (and grabbing the results) is effortless via bash scripts. With bash on windows now it's pretty much ubiquitous. My advice is to consider why the task at hand can't be done in bash, because often times it can, with much more portability.
brad0 2 days ago 2 replies      
Don't listen to the guys who are saying not to learn bash. In the right circumstance bash is much better than any verbose python script.

I'd say learn the following topics:

pipe grep sed awk find

Once you feel comfortable using and combining these tools you should be able to find out the rest by yourself.

3pt14159 3 days ago 1 reply      
I'm ok at bash, but I do not default to complicated bash scripts for my needs. I make little reusable tools. For example I have a tool aliased that makes it easy to apply quick ruby code. For example

echo "345.44

544.50" | rg "#{l}: #{(l.to_f * 3).to_i}"

Produces the following output:

345.44: 1036

544.50: 1633

Based on this code:


I find it's much faster to be productive like this than it is to try to do the same with ruby -e because I really only want to manipulate single incoming lines. I don't want to have to write the looping code or the code that sets variables or what have you.

Also, sometimes it gets confusing what tools are just bash functions or alias and which are scripts, so if you ever forget what a tools definition is just type:

type toolname

As for actually answering your question, look at your friend's dotfiles on their github account to learn which tools and tricks they use and when you don't know how something works ask them questions. People will usually point you in the right direction.

jaymzcampbell 3 days ago 0 replies      
One thing I would say is first check that you are running the latest version! There has been a lot of development to bash over the years. If you feel like customizing things a lot I'd check out zsh and http://ohmyz.sh/. It has a lot compatible with bash with (IMO) some saner scripting support.

Aliases are something I use a lot - it's very basic but just having "big long command with options" aliases to something easy to remember makes it much more likely I will not make mistakes, can repeat it easily in loops.

Another thing that complements using bash effectively are using other applications config files. As soon as I have a new host to interact with I add it to my ssh.config file - then any scripting I need to do I don't need to deal with any special files. Other files like ~/.netrc or ~/.pgpass make my shell sessions that much more productive. For some reason many people don't bother ever updating these and rely on the shell history to do anything more than once.

CommandlineFu (http://www.commandlinefu.com/commands/browse) has some nice one liners and there's often some gems on ServerFault (https://serverfault.com/questions/tagged/bash) - just browsing those for topics matching your workflow can be very fruitful.

I've found the more I do anything at the shell of any complexity I end up writing a small python command line client to do any heavy lifting. Argparse (https://docs.python.org/3/library/argparse.html) makes this trivially easy and then I can use regular shell "glue" to combine a few commands together.

majewsky 3 days ago 2 replies      
In addition to what others said, I can recommend just reading through the manpage once (probably in multiple sittings). Even if you don't remember the exact syntax, you will have an idea what bash can do, and know enough of the jargon to find it again in the manpage when you need it. For example, when I need to replace a substring, I used to do

 FOO="Hello World" ... BAR="$(echo "$FOO" | sed "s/World/Hacker News/")"
until I remembered that bash can do string replacement by itself. A quick search for "pattern" and "substitute" in the manpage turned up the right syntax,

 BAR="${FOO/World/Hacker News}"

alexpetralia 2 days ago 0 replies      
I learned bash primarily for practical reasons (ie. navigating in Linux, parsing files, searching for text) and nothing more. Definitely not from a DevOps or SysAdmin point of view as I'm sure fits the background of many commenters in this thread.

If your use case is pragmatic in nature, I would recommend my post on the topic: http://alexpetralia.com/posts/2017/6/26/learning-linux-bash-...

andai 2 days ago 0 replies      
I was about to post:

> Add, "#! /usr/bin/python" to the top of your scripts, it will make your life easier.

However, after reading the rest of the thread, it seems Python and similar langs are not actually great for the kind of things people use Bash for, and Perl is the way to go!

Great, another language to learn...

edit, re: python:

fiatjaf suggested xon.sh:

"shell language and command prompt [..] based on Python, with additional syntax added that makes calling subprocess commands, manipulating the environment, and dealing with the file system easy.


rogeruiz 2 days ago 0 replies      
If you're interested in getting better at the terminal, I recommend you learn how to customize it. it'll really help you learn by doing and figuring out what it is you want to learn how to do first.

It's what worked for me, though. There are also some workflow ideas that have really helped a lot. Autocompletion and being about to look through your history for commands is super helpful too.

```cat $HOME/.bash_history | grep -E 'command|argument'```


I just finished a guid on my site about my terminal setup. I hope to read yours once you've customized the pixels out of it.

Aside from things to get your interested in the internals of your shell via bash scripting, you should also consider writing more shell scripts specifically around your workflows. I keep mine in a .files repo on GitHub. Take a look at the install script. It took me over a year to get really fluent in bash scripting enough to make it possible to get better and better at it.

Good luck on your journey!

yamaneko 2 days ago 0 replies      
Take a look at this tutorial [1]. It will teach you some shortcuts, a bit of shell expansion, and help you set sane defaults in bash. One that I'm particular fond is to set

 "\e[A": history-search-backward "\e[B": history-search-forward 
in your ~/.inputrc. So, if you are typing a command which begins with "git", it will only search in history for commands that start with git (instead of returning all commands that may include the string 'git' like Ctrl+r). Having trouble trying to remember that option you passed to `git log`? Just type in `git log` and press the up arrow to find your last usages.

I think it is also helpful to learn Emacs or vim keybindings. I use Emacs keybindings in bash a lot (enabled by default). I have summarized the ones that I used more often in a previous comment [2].

[1]: https://www.ukuug.org/events/linux2003/papers/bash_tips/

[2]: https://news.ycombinator.com/item?id=13404262

chingjun 3 days ago 0 replies      
Just like how you learn any other programming language: use it to solve your problems.

Anyway, here's a few steps that I would recommend:

1. Go through http://tldp.org/LDP/abs/html/ and http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ , or at least go through the table of contents so that you have a feeling of what bash is capable of. A few important things are: if, while, for, switch, functions, string manipulation, pipe, subshell, command substitution

2. Understand the execution model. Variables in subshell cannot be accessed from the parent shell, this is a common mistake

3. Learn to avoid common pitfalls. I always recommend my colleagues to always quote the variables in double quote, always use "$@" instead of "$*", always use double square bracket instead of single square bracket for testing, use echo to pass return value from functions instead of assigning to global variable

4. Learn awk, sed, grep. Bash can be quite limiting when it comes to data processing and these tools can be quite powerful. You can use bash to glue different filters together at a higher level.

Bash is a fantastic language and there are quite a lot of things that can be much more quickly in bash than in other "proper" languages. A lot of people says that it's too difficult to maintain a shell script beyond a "critical mass" but I believe that if you follow good practices and write modular codes, shell scripts can be very manageable.

lcrisci 2 days ago 1 reply      
Bookmark the following url and come back to it as often as you need:


Also this one to learn some cool tricks:


oddly 1 day ago 0 replies      
Do some puzzles(wargames). For example: http://overthewire.org/wargames/

It will make you search for several special use cases and will give you some experience with the command line.Basically, you SSH into a box, solve a problem and the solution for that problem is the password for the next SSH connection for the next problem.

This one is for beginners: http://overthewire.org/wargames/bandit/

madhadron 2 days ago 2 replies      
First, if your bash script grows beyond about ten lines, it's time to consider rewriting it in a cleaner language. Python's a common one. I used to use Haskell for that kind of scripting as well, which was astonishingly good at it.

Here's my study suggestion:

0. Learn to use variable interpolation and backticks.

1. if blocks and the [ built-in function. Go read about the grammar and look at the flags that [ takes. Memorize the most common couple (file exists, is a directory), and know how to look up the others when needed. Find examples of variable interpolation tricks needed to make this function.

2. for and while blocks. Learn the grammer. for is mostly useful with `seq ...` or a file glob.

3. Learn some of the options to make bash fail early and loudly like pipefail.

4. Most of the power of bash is in the programs you call, and they aren't always the same ones you use interactively. Other folks have mentioned some of these. find, xargs, wait...

tehwalrus 2 days ago 1 reply      
Set your default shell to bash, and every time something annoys you, look up how to fix it (stack overflow is basically complete at this point, if you know what to search for) and put it in your dotfiles.

I used to rely on fish, but after a couple of bugs (either in fish or my fingers, not sure) I switched back to bash at my job (on a Linux desktop).

After a few months I had built up a good set of aliases and functions (my most used function is rgrep, see below) and was confidently ^R reverse searching and so on. These things are great because as you jump systems (e.g. to macOS) they continue to work.

TLDR: Practise practise practise!

 # the rgrep function # recursive text file search from the current directory. function rgrep { if [ -z "$1" ]; then echo "please supply a search string." return 1 fi grep -rn $1 . }

vram22 2 days ago 0 replies      
This script can be useful to save man pages (not just the bash man page, any man page) as text - removing all the control characters which are used for printing with formatting (bold, etc.):

m, a Unix shell utility to save cleaned-up man pages as text:


I've been using it from earlier Unix versions, where these formatted man pages (nroff/troff-formatted) were more of an issue. Also works if you want to open the text form of the man page in vi or vim, for reading, searching, etc.

sethrin 2 days ago 0 replies      
I wrote a thing for this! People should read it! Focus is on usage, not scripting.

What Kai Thinks Every Developer Should Know About the Shell


base698 2 days ago 0 replies      
Learn to move around efficiently: End of Line, Beginning of Line, Move by word so you aren't just abusing your keyboard.

Knowing how to reverse search (Ctrl-R) and run last command !vim or !curl to rerun last instance of vim or curl command with args so you don't have to search every time.

gexla 3 days ago 0 replies      
As an alternative, you could also look into PowerShell. it's open source and cross platform. I use it because it's really powerful on Windows.

In any programming language, you learn by practice. Given that your shell does so much, that's the easiest place to find tasks to practice on. I have been leaning on my shell scripts to do a lot of automation. The list is long and I just pick something from that list to work on for most days.

If you don't have system automation that you want to work on, then you probably have a lot of personal data that you can work with. I have scripts setup to manipulate data exports from the various services I consume and then remix that data in my own database. My shell scripts can get the data, operate on it and then shove it into a DB. Then I'll use something else to display that data.

kazinator 2 days ago 0 replies      
Forget the Bash man page (just temporarily, that is) and read this:


The POSIX specification of the Shell Command Language.

Also, don't overlook that there is a GNU Info manual for Bash, not just the manual page:


dredmorbius 3 days ago 0 replies      
1. Use it.

2. Conceive of use-cases you can't already solve, and see if you can find a way to do them using Bash.

3. Consider that perhaps Bash isn't the best tool for every job. (It most certainly isn't, though you can abuse it frightfully.)

4. Books. Jerry Peek's guides are getting rather dated, but they're still a good introduction.

5. Read the manpage. Frequently. Find some part of it that doesn't make sense, or that you haven't played with before, and play with it. Shell substitutions, readline editing, parameter substitution, shell functions, math, list expansions, loops, tests, are all high-payoff areas.

6. Take a hard look at zsh, which does a great deal Bash doesn't.

kingmanaz 2 days ago 0 replies      
Some suggestions:

Direct your focus to plain Bourne sh as much as possible, moving on only after you understand what enhancements over vanilla sh Korn or Bourne-Again actually offer.

Pick up Manis, Schaffer, and Jorgensen's "UNIX Relational Database Management" and work through the examples to get a feel for the philosophy behind large, complex applications written in shell.

Join a Unix community (sdf.org) and try to do useful things with shell (e.g. cron-schedule stock quote e-mail notifications via shell scripts, etc).

tinus_hn 2 days ago 0 replies      
In my opinion the most important thing to know about shell scripting is when not to use it. The shell is very powerful but also clumsy for tasks that exceed the basics.
onion2k 3 days ago 0 replies      
Depending on your level, there's https://terminal.training/ (by the same chap who runs jsbin).
raboukhalil 2 days ago 0 replies      
A while back, I wrote a quick Bash guide called "Adventures in Data Science with Bash" (https://gumroad.com/l/datascience).

It covers basic Bash commands (head, less, grep, cut, sort, uniq, curl, awk, join), but also pipes, for loops, variables, arrays, and command substitution.

yellowapple 2 days ago 0 replies      
The best I can really recommend is practice. A lot of "bash" skill comes not from bash itself, but rather from the tools around it.

If you're not already comfortable with input/output redirection (including pipes, as well as reading from / writing to files via <file / >file, respectively), then that's where I'd start.

TheGrassyKnoll 2 days ago 0 replies      
Its considered kind of a security risk, but I like to save ALL of my commands: (put this in .bashrc)

 export PROMPT_COMMAND='echo "$(history 1)" >> $HOME/.basheternalhistory' 
Now you can search it later for arcane commands you've forgotten how to use.

chasil 2 days ago 0 replies      
GNU BASH is a branch of the Bourne-shell family.

Korn shell is a much more complete and capable variant of Bourne. BASH partially implemented many Korn features, but not everything.

The standard reference is the Korn and Bolsky book (2nd edition). I'm not aware of any free/online resources that are profoundly good.

Korn is the very best for scripting.

lottin 3 days ago 0 replies      
The shell language itself is pretty simple and featureless. It relies on the system utilities for most things so once you know the basics of how the shell works you should probably focus on learning those rather than bash. Also I find that when it comes to interactive use having good key bindings and some nice aliases makes a lot of difference.
INTPenis 3 days ago 0 replies      
Use it daily. Use it instead of your graphical file explorer options.

Everything will take longer but imho it's the only way to get better.

boona 2 days ago 0 replies      
I'm not sure if this answers your question since I'm not sure what the implications of your workflow are, but I got a huge jump in productivity with Oh My Zsh. It has a bunch of features like tab completing past commands, it includes various shortcuts, etc. It's also compatible with bash.
marypublic 2 days ago 0 replies      
I found this useful for getting deeper with using bash: "Pro Bash Programming : Scripting the GNU/Linux Shell, Second Edition." It is kind of a brain dump type of book but it called out a bunch of little things I had missed in looking at other information sources.
delinka 2 days ago 0 replies      
I recommend also learning a different shell's quirks and syntax. I started using fish a couple years ago, but I still have to write any 'production' scripts in bash. Learning fish cleared up lots of misunderstandings I had with bash and has made my bash much improved.
nikivi 3 days ago 0 replies      
I made a search engine to show the best learning paths for learning any topics.

Here is the path for learning bash : https://learn-anything.xyz/operating-systems/unix/shells/bas...

elchief 2 days ago 0 replies      
If you like learning by doing, play along with this:


(text analysis in bash)

tejasmanohar 2 days ago 0 replies      
1) Force yourself to do as much as possible from command-line2) When you Google for help and find a solution, keep Googling until you understand what you're doing

That worked for me. You could also read the man pages, but step #1 is crucial regardless.

snarkyturtle 2 days ago 0 replies      
Check out ShellJS if you want to build scripts. For me at least it made things a lot less archaic: https://github.com/shelljs/shelljs
jdorfman 2 days ago 0 replies      
Anytime I'm stuck with a script I usually end up on https://bash.cyberciti.biz

Vivek (founder) has been writing these tutorials for 17+ years, he knows his stuff.

shmerl 2 days ago 0 replies      
Bash has tons of quirks, but as others said, reading man bash helps quite a bit.

There is also this great resource: http://wiki.bash-hackers.org

robschia 3 days ago 0 replies      
This covers 90% of bash:Learn Enough Command Line to Be Dangeroushttps://www.learnenough.com/command-line-tutorial
itomato 2 days ago 0 replies      
Understand and utilize functions in your scripts.

If there is one thing I wish I had understood sooner, that would be it.

Top to bottom programmatic flow is one thing. Conditional execution and branching are on another level.

runjake 2 days ago 0 replies      
Pick up a copy of UNIX Shell Programming by Stephen Kochan. Very approachable and lots of good practical examples. Augment it with 'man bash' and Googling.
taylodl 3 days ago 0 replies      
I have a couple of resources for you:



joobus 2 days ago 0 replies      
One of my most common uses for shell scripts is writing completion functions for my aliases and custom commands. Hitting tab for a list of all options for a command is a huge timesaver.
olalonde 2 days ago 0 replies      
I really enjoyed http://guide.bash.academy/ but it's not completed unfortunately.
molsson 3 days ago 0 replies      
Help develop and test this:https://github.com/exercism/bash
syngrog66 2 days ago 0 replies      
man bash. read, digest, apply, repeat. you can also look at existing scripts, figure out what they do, why, make copy, alter, see the changes in behavior. there are also books on bash.

larger point: how do you learn more about X? or get better at doing X? figure that general pattern out and you can re-apply it for anything, not just bash.

ilaksh 2 days ago 0 replies      
If its really about helping you with the command line then use fish.

If you need to automate something use your favorite programming language.

psychometry 2 days ago 0 replies      
Give up? Seriously.

I used to force myself to do all of my ad-hoc scripting in bash, but I got sick of the clunky way of parsing arguments, dealing with arrays, looping over data objects, etc.

I got pretty good at it, but at some point I decided just to stick to a language I knew well (R) to string together various pipelines and construct commands. Any high-level language would work, though. I'm much more productive now.

matttproud 2 days ago 0 replies      
$ help fc

Using ${EDITOR} to build command lines is awesome. 'nuf said.

ben_jones 2 days ago 0 replies      
Write and distribute tutorials targeting a wide audience with varied amounts of experience.
burnbabyburn 3 days ago 0 replies      
learn about how return from functions and echo behaves, this often bites many.

learn from this wiki that has many tutorials and good examples http://wiki.bash-hackers.org/bash4

bouh 3 days ago 0 replies      
hackerrank has various challenges in bash : https://www.hackerrank.com/domains/shell/bash
saurik 3 days ago 0 replies      
Have you read the manual?
gumby 2 days ago 0 replies      
among other things make sure you know how to use ! and ^ -- they will save you tons of time compared to searching or editing
znpy 2 days ago 0 replies      
Can't wait to see this thread commented on n-gate.
jlebrech 2 days ago 0 replies      
ctrl-r is my favourite.
Ologn 2 days ago 0 replies      
As you're focused on the command line, I won't mention things I generally use in shell scripts like compound commands (if, for, while) or shell parameters. I will also skip things I don't often use.

First, there is moving around in bash - the arrow keys, or backspace/delete to remove a character, or ^A to go to line start, or ^R to search command history, or tab to complete a command. ^L clears the screen, although from habit I still type clear.

I use shell/bash builtins cd, and pwd often enough. Sometimes export, umask, exit, ulimit -a, echo.

I use shell variables like PS1, HOME, and PATH. I set them in $HOME/.bashrc, which sometimes references files like $HOME/.bash_aliases. I often set a larger than default history file size. I use ~ tilde expansion as an abbreviation for $HOME. For long commands I type regularly, I put an alias in the run control (or run control delegated) file.

I use job control commands like bg, fg, jobs and kill. You should know how bash job control complements and diverges from the system process commands. & starts a process as a background process, and preceding it from nohup tells it to ignore hangup signals.

You should know how single quotes work, and escape characters for them if they are needed.

Then there are pipes (| - "pipelines"), and redirecting of stdin, stdout, and stderr. I use this a lot. Also redirecting or appending output to a file (>, >>). I don't use tee often but sometimes do.

Then there are commands used with the shell a lot. Such as parallel, or xargs.

Also nice which modifies process scheduling.

Script, or typescript, keeps a log of your shell session.

Screen allows for multiple shell sessions. Useful on remote hosts especially (tmux is an alternative).

Then there are the standard file and directory commands I often use like pwd, cd, ls, mv, cp, df, chmod, du, file, find, locate, mkdir, touch, rm, which, and wc.

I manipulate these with commands like awk, sed, tr, grep, egrep, cat, head, tail, diff, and less.

I edit with vim or emacs -nw.

Command like htop, ps, w, uptime and kill let me deal with system processes.

Then there are just handy commands like bc or cal if I need to do some simple addition or see which day of the week the first of the month is.

Man shows you manual pages for various commands. "man command" will show the manual page. For a command like kill, the default will show the command kill - "man kill" which specifically is "man 1 kill". But "man 2 kill" would show the kill system call. You can see what these different manual sections are with "man man" - 1 is executable programs, 2 is system calls etc.

All of it is a process. I mentioned awk. It is one of the commands handy to use with the shell. I have seen entire programs written in awk. Some parts of awk I can use from memory, some I use occasionally and have to look up the flags to refresh my memory, some parts I have never used at all. As time goes on you pick up more and more as you need it.

Ask HN: Which services should we know store sensitive data without encryption?
3 points by arikr  18 hours ago   1 comment top
How do you keep track of work tasks
6 points by neekb  19 hours ago   5 comments top 2
twobyfour 18 hours ago 1 reply      
This is the one thing I find Asana effective for. Another option might be to repurpose issue tracking software - after all, it's basically just a to-do database. I've also known people who use plain text files on a remote machine plus vim plus SSH.

But software is just a tool. What it sounds like you really need is a system for keeping all these balls in the air. Without a system, no software is going to solve the problem of failing to remember you need to follow up on things.

This type of work is something I find Getting Things Done very effective for. You don't have to rigidly implement everything the book prescribes, but it does offer a philosophy and a toolkit of processes that you can mix and match to keep your work organized.

Once you have a process, you can implement it in OneNote or index cards, or whatever the heck else feels ergonomic to you.

hnruss 11 hours ago 0 replies      
If I were doing consulting, I'd look into using JIRA Service Desk to interface with clients and using JIRA internally to track tickets (JIRA integrates with Service Desk). I'd manually enter any external communications into Service Desk as a way to both log and confirm the communication with clients. My favorite feature of Service Desk is that it provides a clear "status" so that participants know whose court the ball is in.
Ask HN: Does Google Index Secret URLs Only Shared Through Gmail?
3 points by macinjosh  19 hours ago   7 comments top 4
mattbgates 15 hours ago 0 replies      
Go into Incognito and see if they are showing up there. Google might show you files from Google Drive and other places because you are logged into your Google Account, but it may not show up for anyone else.
ravigupta 4 hours ago 0 replies      
Am also facing the same problem.Anyone, know the answer?http://emailsupportnumber.org/yahoo-mail-customer-support-nu...
ParameterOne 15 hours ago 1 reply      
Google definitely reads your email (gmail). As an example, if I have the word attachment written in my email and then attempt to send the email without any attachments, google will tell me that I used the word attachment in my email but didn't attach anything.
claudiulodro 19 hours ago 1 reply      
You should put a robots.txt file in the S3 bucket if you don't want things in it indexed.

I (kind-of) doubt that they found the files through your e-mail, but the files in your S3 bucket are technically available for indexing since you don't have a robots.txt.

Ask HN: Best PHP Framework? Drupal? Laravel? Codeiginiter?
6 points by chad_strategic  19 hours ago   16 comments top 11
chad_strategic 16 hours ago 1 reply      
I made a mistake in asking this question. I guess there was a limit to the question length, which for some reason I didn't see.regardless hear is my full question with a little bit of detail.

I have been assigned to build a Drupal 8 "CMS" system. After working for sometime with mild success there is a possibility to use another framework to build a more flexible and robust platform.

The scope of the project is not defined which is part of the problem, but I digress. (Basically, I working with people who don't have clue as to what they want) I think it's time to move away from Drupal and build a custom CMS. As the project will have a variety of non Drupal feature in the months to come. Now what I need is some facts to back this up. Wappalyzer used to provide charts of usage of certain frameworks.

I was wondering if there any site or articles out there I could use to prove to a non-technical person, why we should move away from Drupal. Website usage, security concerns, or hiring trends, etc.

Although I don't mind Wordpress, it has such a bad security reputation, the sysadmin won't consider it.

I would like to use Laravel or Codeigniter but need some evidence as to back it up.

guinness74 17 hours ago 0 replies      
Laravel is a terrific framework, and if you're building the project from scratch it's my suggestion purely from a maintainability standpoint. It's widely adopted and is decoupled nicely.

Drupal is a fine off the shelf CMS that is very extensible. I'd argue it has framework like features, but with the goal to extend CMS capabilities.

I don't know enough about your use case to suggestion one over the other.

seanwilson 12 hours ago 0 replies      
I would avoid Codeiginiter personally in terms of momentum and community. It's fallen behind the more modern frameworks and when you find plugins for it on GitHub they've regularly not been updated for at least a year. I've helped on a Codeiginiter project for a while where we have to keep reinventing the wheel because there's no decent solutions compared to e.g. Drupal or Laravel.
gregjor 14 hours ago 0 replies      
This isn't a technical problem a framework choice will solve. You need to have a better idea of what you're building first. If there's a leadership vacuum, step up.

If you're in the position of choosing between Drupal, Laravel, etc. you are probably in the position to evaluate other solutions not based on PHP.

smt88 19 hours ago 1 reply      
Drupal is not at all similar to Laravel or Codeigniter. Drupal is a CMS, while Laravel and CI are frameworks.

If you just need a CMS, there are tons of open-source CMS already built that you can use commercially for free. Why spend time/money building a new one?

At this point, Laravel is so widespread in the PHP world, you might as well just use it. They have a smaller version (Lumen, I think?) that is probably faster to learn and much lighter-weight.

tomascot 13 hours ago 0 replies      
I would go with Symfony, has a great community, it's very robuts and lot of developers behind it.

I'm probably wrong and it's just my opinion, but Laravel feels like it's a one man show.

ebcode 17 hours ago 0 replies      
It really depends on your needs. I think you would get more helpful responses if you included more information about the purpose of your project in the question.
iDemonix 16 hours ago 0 replies      
I learnt PHP and avoided frameworks for years, but Laravel is a dream. Watch the Laracasts and you'll be up to speed in a weekend
drupallover 16 hours ago 0 replies      
Drupal 8 is based on symphony and is pretty robust. Alot of what you would build by hand is already built and easily configurable via the web interface. I believe that modules can be symphony bundles or pretty close.
savethefuture 19 hours ago 0 replies      
Laravel was excellent to work in, much better than the other ones I had tried.
zuzuleinen 19 hours ago 0 replies      
Laravel or Symfony
Ask HN: How do you stay creative?
23 points by skidding  2 days ago   16 comments top 12
_qwerty_ 2 days ago 0 replies      
Sorry, based on personal experience, I don't agree at all.

1. I believe that there is a link between ego/confidence and being creative/innovative. To consider or suggest doing something different --whatever the domain-- takes self-belief - the confidence that your ideas are better than the prevailing status quo that the rest of the world is satisfied with.

2. Mostly, in addition to #1, I see being creative/innovative as just a mental habit. Some people examine the world around them critically, and want to improve some aspect or other, while others don't. Practise this sufficiently often, and you'll improve, as with most pursuits.

(1 & 2 would become a virtuous cycle - you believe that you can improve things; you more regularly look for opportunities to do so; you [get better at] find[ing] them; you [or others] provide positive reinforcement.)

3. Personal belief: there may also be correlations with certain personality types. For example, people with certain traits may be more prone to noting imperfections in their experience of the world, leading directly to the thought processes which result in ideas for possible improvements.

4. I think you're conflating being creative with actively pursuing generated ideas or opportunities. The difference may just be circumstantial: that someone lacks the financial wherewithal to pursue an idea, or for personal reasons (e.g. conflicting responsibilities) can't dedicate the time or energy to pursuing that idea. Action creativity. In fact, the opposite may often be true: it's well noted that creative people need to be teamed with people that can/do execute their ideas fully (e.g. 'implementers' and 'completer-finishers' in Belbin's team-roles).

rl3 1 day ago 0 replies      
As other commenters have said, ego is central to creativity and I tend to agree with them. Especially in context of hyper-ambitious ventures.

However, I'd say the first step to being creative is not being depressed. While history has numerous examples of tortured artists producing masterpieces, most people (myself included) are much more creative and productive when they're dreaming of their ideas on a whiteboard and not their grey matter.

How to mitigate depression is of course another topic entirely. It does however tie neatly into ego via way of self-esteem. Startups are a rough ride, so having a healthy reserve of ego, self-esteem, or whatever you want to call it does come in handy. That isn't to say you must be some egotistical prick, just that being self-delusional to some degree can be advantageous.

Personally I prefer belief in extreme conflicting dualitiesregarding oneself as dirt while simultaneously believing in your capacity to execute the most crazy of ventures. Big thinking with extremely low expectation, in other words. The former keeps the spark alive, and the latter keeps you going when the ride gets bumpy.

owebmaster 1 day ago 1 reply      
> Ask HN: How do you stay creative?

Smoking marijuana

I like to plan my stuff when I'm high because it put me in some of the most interesting adventures I've been. If you are a daydreamer, it is also good because you will have more fun with your wasted creativity.

tmaly 1 day ago 0 replies      
for me, if I exercise well and keep my circulation going, I tend to have better ideas. I try to fast walk every morning for 2 miles. This gets my mind thinking.

trying lots of stuff even if its just throw away small stuff really helps in the initial stages.

you need time to focus on the bigger projects. If you are in a job or some other situation where you are always putting out fires, you will have less of a chance to build things.

19eightyfour 1 day ago 0 replies      
No. I'm creative and I have a lot of ego. I find ego helps with belief in myself so that I can take risks. When things don't work out, I can use my self belief to spin it in a way that works for me. Elon Musk does the same thing. Ask his wife.

I disagree with your notion. I think that having an ego is necessary to deal with the slings and arrows of failing when from taking outrageous risks.

Take risks. But take calculated risks. If you don't believe in yourself, and trust your own vision, someone might talk you out of it. Or your metric of safe will include acquiescing to or acting with the advice of others.

There's not really a way to rationalize courage in my opinion. And it's not a case of you have it or don't I've found. At some point in my life I feel brave, other times no. What makes courage in my experience is just saying, 1,2,3 do it, and making yourself do it. If there wasn't fear it wouldn't be courage. You have the vision or desire, you're afraid to take the step, then you take it. That took courage.

Ego helps me believing enough in myself to dream up outrageous ideas. I find that if I'm low confidence or not freed from cares and worries plaguing doubters, my mind isn't free enough to dream up, and my heart isn't free or strong enough to take risks. So have ego and believe in yourself (for me, they are the same thing). Having ego lets me enjoy myself, and makes me happy. And enjoying and being happy helps my creative process.

Have ego. But be rational and strategic about your ego and keep it in check. Use it in a way that works for you, not against you. Is my advice.


twobyfour 1 day ago 1 reply      
After years of working in an extremely left-brained field, I find myself longing to engage in right-brained activities outside work - but it's almost as if the right brain has atrophied. It's kind of depressing.
autotune 1 day ago 0 replies      
Creative pursuit is about the release of ego, freeing yourself of it imho. I have spent almost 3 weeks for example, 2 hours a day or so minimum, just to reach the point where I can play a 4 minute song on guitar at 1/3rd of the bpm needed. It is not just so I can look like I know what I am doing for 4 minutes eventually, it is to prevent myself from letting ego grab hold and focus on unhelpful wants and desires during this process of self development.
drdeadringer 1 day ago 0 replies      
I expose myself to the creative works of others. Reading, museums [art, history, armories, scientific//technological...], talking with or listening to others about their hobbies [building arcade machines, older cars...], going to conventions where I shall encounter cosplay [and I bring my camera and subsequently ask permission to click], and like this.

I myself create, be it a dribble-out or starburst of output depending on the tides. I went through a lamp phase two years ago; last year, I went through a clock phase; 3-4 years ago I went through a sculpture // 3D-scenery type phase. I tend to do this by coming across debris and considering how I can turn that into something I wouldn't want to throw away. Probably a hand-me-down from my Depression Era grandparents, but I'll take it.

I make effort to keep my imagination alive, even if on only life support. Many years ago I started writing short stories to put threads in my head out onto paper. I'm not very good, and my genres have shifted as they are want to do, but I do it. Certain circles think me a writer more than anything else, which I can't blame them for, but I know better yet still do it.

I've been in and out of photography over the decades [sweet jesus, I'm halfway through my life already], and am currently in and In Phase [in part thanks to my current job where by day I take pictures for money and by night I take pictures for myself]. I find myself in a place, oh hey this is a cool angle, click. I see something different or mundane, click. I turn to the right and see something cinematically cliche but pix or it didn't happen and it's lost like tears in rain, click. I then go to my extortion-priced URL and upload what's not the worst.

I explore. This might port into your "curiosity" angle, e.g. "I've not been down this side street" or "I've always wondered what this empty courtyard was about". "Say 'yes' to Life" as a certain recent sequel proclaimed. Repeat until dead.

I remind myself that I have no excuse to be bored. I then allow myself to be bored and do boring things.

You mention Risk. Sure, there can be risk. But how big does something have to be in order to register as Creative? The things I create, make, build, your thesaurus here... I die and nobody but the guy cleaning out the overpriced apartment will care. I was still creative, and it didn't matter to The World. You know what did matter? How my creativity rippled through the rest of my life -- e.g. into my work, my relationships, my enjoyment of life, and so forth.

TLDR: I keep the fire alive via various avenues I find fits my life and personality.

pedrodelfino 1 day ago 0 replies      
Interesting. I read the comments and I did not see anyone saying "read a lot". For me, reading and taking your time to digest the stuff you read is the key to stay creative. Making bets in risky projects and trying to execute them too.
err4nt 1 day ago 0 replies      
I think the key to growing long-term creative ability is getting in the habit of daily creation. For me I build a lot of HTML + CSS demos, so that means starting my day by experimenting and looking things up in the spec, then building some demos with what I learn. :)
teapot7 1 day ago 0 replies      
Get plenty of sleep. Eat well. Exercise. Don't read articles about creativity.
mapster 1 day ago 0 replies      
creative people create / practice a lot, and yes, you get more confident the more your practice and experiment. you stop copying and start creating.
Ask HN: What are some small scripts you use daily?
59 points by poiuz  1 day ago   56 comments top 34
macNchz 1 day ago 0 replies      
I wind up making lots of interim files when importing/exporting/munging/analyzing datato help keep track of these things (CSVs, scripts and miscellany that I may or may not want to revisit in the future) I have a function I call today to auto-create daily scratch directories:

 TODAY_DIR="$HOME/today/" DATE_DIR=$(date +'%Y-%m-%d') if [ ! -d $TODAY_DIR$DATE_DIR ]; then mkdir -p $TODAY_DIR$DATE_DIR fi; echo $TODAY_DIR$DATE_DIR
So you can do stuff like this with less thinking/typing:

 cp somefile.csv $(today)
I've been using this for a few years and continually find it handy, both at the command line and in keeping files clustered when I want to dig something up later. It is slightly less helpful if you regularly work past midnight, though!

davidbanham 1 day ago 1 reply      
I call this blingle. I call it after any long running operation that I want to be notified of. It pops a desktop notification and sends a push message to my phone.

eg: make deploy; blingle


MSG=${@:-"Job complete"}

notify-send "$MSG"

curl -s \

 --form-string "token=TOKEN" \ --form-string "user=UID" \ --form-string "message=$MSG" \ https://api.pushover.net/1/messages.json

mod 1 day ago 0 replies      
Not exactly a script, but I work at home and sometimes I need to drown out the kids (or the wife!). I have this in my .bashrc:

alias whitenoise='play -q -c 2 -n synth brownnoise band -n 1600 1500 tremolo .1 30'

It plays some fuzzy whitenoise, which drowns them out and lets me keep focused (music is often distracting to me).

tedmiston 1 day ago 1 reply      
I have letters like r and b aliased in my bash profile to check for and run a bash script, if it exists, in each project directory (r = ./run.sh, b = ./build.sh).

In each of those scripts, I typically have a one liner depending on what the project requires. A simple build one is:

 #!/usr/bin/env bash make build
And run:

 #!/usr/bin/env bash docker run foo/bar
Or maybe:

 #!/usr/bin/env bash python manage.py runserver
I might also add (source) environment variable settings, etc. Sort of like my own personal decentralized makefile.

Then I add each script to my .git/info/exclude for each project. It saves so much time switching between projects to not have to remember any particular one's build or run commands.

luord 15 hours ago 0 replies      
Something that I added to my bash profile is this simple `cd` override that triggers `workon` from `virtualenvwrapper` if the folder I'm accessing has a `virtualenv` with the same name.

 cd() { command cd "$@" [[ "$OLDPWD" == "$HOME"/Work/* && ! -z "$VIRTUAL_ENV" && "$OLDPWD" == *"${VIRTUAL_ENV##*/}"* && "$PWD" != *"${VIRTUAL_ENV##*/}"* ]] && deactivate [[ -z "$VIRTUAL_ENV" && "$PWD" == "$HOME"/Work/* ]] && next="$(sed -e "s/^.*Work\///" -e "s/\/.*$//" <<< "$PWD")" && [[ -d "$WORKON_HOME"/"$next" ]] && workon "$next" && unset next }
Yes, too many one-liners and short-circuits are usually a no-no, but it's not like anyone else is ever going to use this and I like these shortcuts.

ggm 1 day ago 1 reply      
This is awk which emits the stream of unique things, as they are seen. it doesn't require sorted input. It runs at the cost of building the obvious hash in memory so can drive you to swap over large inputs, but its portable, does not require post-install s/w typically not on small systems and it delivers outcomes fast.

I use it all the time when I have some UNIX pipe emitting things and I want to "see" the uniques before I do sort | uniq -c type things.

#!/bin/shawk '{ if (!h[$0]) { print $0; h[$0]=1 } }'

hboon 1 day ago 0 replies      
I wrote https://github.com/hboon/genie which lets me run create directory-specific aliases such as:

push -> git push origin develop; git push origin master; git push origin --tags;terminal-notifier -title "Pushed to Git" -message "Project X"

In another directory, push may push different branches. Ditto for pull, release, keep, etc

Use them daily.

charris0 21 hours ago 0 replies      
My thinkpad running Linux is a bit temperamental when changing displays, often enumerating an existing display port as a new one.

I use the following script to switch to dual external monitors at a standard resolution, and a counterpart script to switch back to the internal hidef monitor.

If only I could reliably fix xfce4's panel placement all of the time...and not have to restart chrome and pycharm/intelliJ on each display change!

 #!/bin/bash EXT1=`xrandr --current | sed 's/^\(.*\) connected.*$/\1/p;d' | grep -v ^eDP | head -n 1` EXT2=`xrandr --current | sed 's/^\(.*\) connected.*$/\1/p;d' | grep HDMI | head -n 1` INT=`xrandr --current | sed 's/^\(.*\) connected.*$/\1/p;d' | grep -v ^DP | head -n 1` xfconf-query -c xsettings -p /Xft/DPI -s 96 xfconf-query -c xfce4-panel -p /panels/panel-1/size -s 28 xrandr \ --output VIRTUAL1 --off \ --output ${INT} --off \ --output ${EXT2} --mode 1680x1050 --pos 0x150 --rotate normal \ --output ${EXT1} --mode 1920x1200 --pos 1680x0 --rotate normal --primary

nonsequ 1 day ago 1 reply      
I run an AHK script with a little over 2000 abbreviations (e.g. typing 'abbn' expands to 'abbreviation'). It helps me type 100+ WPM without too much strain.
KJBweb 1 day ago 1 reply      
I created a Perl script called anyconnector which allows me to jump around between different Cisco Anyconnect VPN's using details stored in KeePass entries.


 To connect: anyconnector -c env-name Disconnect: anyconnector -d Get status: anyconnector -s
It gets used by my team all day, every day.

stevekemp 1 day ago 0 replies      
I created a git-repository of the scripts I use often:


That seems to be somewhat popular on github, but I rarely receive feedback so I'm not sure if people star because they use them too, or just because they suspect they might.

hilti 1 day ago 0 replies      
Syncing current dev directory to my webserver using rsync multiple times a day:

rsync -rlptvDC --progress --rsh="ssh -l username" * myserver.com

aynulhabib 1 day ago 0 replies      
I'm in sales for a surveying/feedback SaaS co. Before demos I brand the survey/account with the prospect's company's colors & logo. During the demo I send custom branded, inline email surveys to a test gmail account to help my prospect understand the survey respondent POV. I also have to delete that test-survey email every hour so that the next prospect I demo isn't privy to who is exploring us. I often have to do 4-8 demos a day so as you can imagine that got old fast.

I wipe the inbox for my test gmail account every hour at the :45 minute mark using a ruby script. I don't automate the sending because it's part of the education of the prospect.

david-cako 1 day ago 0 replies      

Biggest timesaver in the world for someone who listens to as much music as I do and doesn't want to deal with manually transcoding FLAC files.

iTunes and Apple Music will soon support FLAC natively, though -- previously it was out of necessity, space, and not wanting to use VLC and lose my main/single use of my Apple Watch. It's still about the latter two.

I recently also set it to output a manifest that I can feed into rsync on my work computer to pull my library from my backup server.

nicwolff 1 day ago 0 replies      
This Bash function rebases and pushes all my feature branches on the upstream "develop" branch:

 rebase-all () { old=`git rev-parse --abbrev-ref HEAD`; stashed=`git stash`; for b in $(git branch --format '%(authorname) %(refname:short)' | sed -ne "s/^`git config --get user.name` //p" | grep -- -); do git checkout $b && git rebase origin/develop && git push --force || ( git rebase --abort && echo Could not rebase $b ); echo; done; git checkout $old; if [ "$stashed" != "No local changes to save" ]; then git stash pop; fi }

tmaly 1 day ago 2 replies      
I have a small perl script I wrote called helpme

by default it shows a list of topics. Then if you run it with the topic, it displays the details about the topic. I use it to remember how to do less frequent stuff at my day job.

sprobertson 1 day ago 0 replies      
`watch-reload [watch dir] [reload domain]`, which watches for changes in a directory and triggers a reload for tabs matching a certain domain using a Chrome extension.

`watch-copy [copy to dir]`, which watches for changes in the current directory and builds and copies to another directory.

`set-lights [group name] [on/off/high/low]`, which posts commands to a Hue bridge.

bitshepherd 1 day ago 1 reply      
I wrote a Docker helper script, which resets it to a baseline state when I need to clear out cruft post-restart. I call it harpoon, so I can harpoon the whale when I go to restart my dev machine.
davewasthere 1 day ago 0 replies      
I have a deployment script that is part of my one-click deployment to the customer's webserver. It's kind of a legacy to having really crap interwebs though, as my upload used to be in the 700-900 kbit/sec range, so it strips out anything from the deploy package that isn't absolutely essential to create sort of a delta of changes.

Makes deployments blistering fast now that I've got 30 Megabit/sec up though... :)

bilalq 1 day ago 0 replies      
bash functions:

 # Helper function for running command in each subdirectory under current one. function each { if [ -z $1 ]; then : # If no command is given, then this is a no-op. else find . -maxdepth 1 -mindepth 1 -not -path '*/\.*' -type d -exec sh -c "(echo {} && cd {} && $* && echo)" \; fi }
zsh functions:

 # Helper function for navigating tmux sessions export WORKSPACE_ROOT=$HOME/workspace ws() { if [ -z $1 ]; then if [ -z $TMUX ]; then tmux attach-session else cd $WORKSPACE_ROOT fi elif [[ $1 == 'ls' ]]; then tmux list-sessions else tmux attach -t $1 || cd $WORKSPACE_ROOT/$1/src; tmux new-session -s $1 fi } # Helper function for running command in each subdirectory under current one. each() { if [ -z $1 ]; then # If no command is given, just exit else find . -maxdepth 1 -mindepth 1 -not -path '*/\.*' -type d -exec sh -c "(echo {} && cd {} && $* && echo)" \; fi }

qubyte 1 day ago 0 replies      
I wrote a docker-wrapped script to create keys and certificates for use with HTTPS for development. These are configured with algorithms which modern browsers won't complain about. It also allows alternate domains.


smpetrey 1 day ago 2 replies      
Over the years Ive taught some of my (macOS user) co-workers the magic of the Automator.app

Its transformed the office. Its the little things ya know.

matt_s 1 day ago 0 replies      
I like using a lot of aliases and chaining them together if I can and it makes sense.

The most common one I use all the time is one that changes the command prompt to show what git branch I'm on when in that directory. Just google it if you'd like.

If you repeat some command a lot or a chain of commands and it takes a lot of tedious typing, then script it.

anotheryou 1 day ago 0 replies      
- a bat to launch some programs as admin on windows on startup

ahk scripts:

- Easy Window Dragging (KDE style)

- Rocker (click left-right mouse button to go forward in explorer etc, right-left to go back)

- hidedesk (hides desktop icons unless I click on the desktop, sadly a bit buggy)

- some custom script to unify hotkeys for the brightness of my external dell monitor and my laptop screen.

browser fixes:

- some drag to scroll js for greasmonkey

- shortcut for bookmarking to pocket with keyboard only (with tags)

tranvu 1 day ago 0 replies      
I start projects very often and find myself using my scaffolding [tool](https://github.com/vutran/zel) for minimal dotfiles (which are downloaded from a repo) very often.

Also use it a lot for syncing dotfiles in my user directory between my work and home computers.

simplyianm 1 day ago 0 replies      
A very unsafe python script to unescape strings.

 #!/usr/bin/env python import sys def unescape(string): print eval(string) if __name__ == '__main__': unescape(sys.stdin.read())

12s12m 1 day ago 0 replies      
I have a simple script called ~/bin/shipit

 web [master=] $ cat $(type -P shipit) #!/bin/bash exec ./shipit web [master=] $
This allows me to tweak every projects deploy script and also maintain it in version control.

koolba 1 day ago 1 reply      
I have a shell alias that creates a temp directory labeled with the current time stamp and suffixed tag then changes to it. Makes it very quick get a new scratch area for shell fu.

Plus all the scratch dirs are in one place so cleanup is a breeze to free up space.

danbolt 1 day ago 0 replies      
I typically have a script that prints out my local IP, instead of if/ipconfig or some OS UI. If I'm hosting a static page with an HTML5 game, it's then pretty easy to access it on another computer or my phone.
bazillion 1 day ago 1 reply      
I use this to do a `git pull` on all of my folders inside of my "sites" folder:


for i in /sites/*/.git; do ( echo $i; cd $i/..; git pull; ); done

pvaldes 1 day ago 0 replies      
Classify digital photographs that I need to review by its content. Import/export data from/to a DB, analyze it statistically and show graphically the info. Pretty standard.
zexodus 1 day ago 0 replies      
my screens are somewhat too bright if i want to do work at night so

 #!/bin/bash xrandr --output DVI-I-1 --brightness $1 xrandr --output HDMI-0 --brightness $1 xrandr --output DVI-D-0 --brightness $1 ~

coinjobber 1 day ago 1 reply      
There's a gui app on top of the script, so not sure if it counts, but I find SelfControl (selfcontrolapp.com) indispensible for staying focused each day.
carapace 1 day ago 1 reply      
I have a lil thing I call "did" that just greps my shell history for a term, sorting and de-duplicating the result:

 $ cat `which did` grep $1 ~/.bash_history | sort | uniq
I also set HISTSIZE=10000000

I don't mind having a large history file laying around because it's so useful.

Ask HN: Looking for programming projects during summer-vacation
11 points by alfredelay  1 day ago   9 comments top 6
itamarst 1 day ago 1 reply      
Not concrete ideas, but some principles:

1. Pick something you will find useful, or

2. Have a hard deadline: "I must build X in 3 days."

This will help you actually finish your project. (Long version here: https://codewithoutrules.com/2016/09/09/side-projects/)

deadcoder0904 1 day ago 1 reply      
Build something that will help you.

Pick up some throwaway projects.

I did something like this - https://100dayz.js.org/

Now I look back at them & I say 'God did I write this' but it might help u with some of ur own ideas

oldmancoyote 1 day ago 0 replies      
Read lots of science fiction. Find something awesome that no one thinks computers can do yet. Pare it down or limit its focus to the point where it might be practical. Don't worry about how much memory it uses or how slow it would run. Then, try to program it. You will push your limits and if it's awesome enough, people will be deeply impressed with your ability.
DCRichards 1 day ago 0 replies      
If you want something that doesn't require any other distractions (HTML, CSS etc) then Node.js is a good choice. How about writing a RESTful API or something else self-contained? A while ago I wrote a thing which tweets train delays in a few days https://github.com/dcrichards/gordon to try out some recent Node.js features and libraries.
leksak 1 day ago 0 replies      
Create an inverse of Tupper's self-referential formula where you can, given a drawing, find the corresponding value of K that draws that image.


SQL practice tool

I find that online tools for practicing SQL queries are inadequate, they suffer from numerous problems that should be addressed by any (new) alternative.

Specific question sets, i.e. a decent collection of division problemsA website that looks like it was rendered this centuryInsight into the dataset being tested against.If I was to build this I could imagine doing it using a Python back-end and I would build in a roll-back feature if the tool ever was to be extended to such a degree that one may practice directives such as UPDATE.

Nice to have the opportunity to load in one's own dataset.

Inspiration http://sqlfiddle.com/http://sqlzoo.net/


The developer app

Get a message (Tip of the day) each day with, for instance, hotkeys for your favorite editor/editors/programming languages.

Let users skip certain tips: "I already know this" so that it doesn't appear again. Use a Bloom-filter.

Let users select "Emacs", "Vim", "Git", etc.


Create a Boolean Algebra interpreter in Common Lisp


Implement an HTTP server with persistent connections in Haskell (look at STM)


Use Markov chains to create lolcats


Implement a Shell in Rust (posix grammar is here = http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3...)


Implement various algorithms and data structures,

A-starActor ModelAVL TreeBinary SearchBinary Search TreeBloom-filterBreath-first iterative searchBucket/Radix sortCircular queueClosest pairHashMapIn-place quicksortK-way mergeMurmurhashPriority QueueSetStackUnion FindVector (dynamic array)

bhchance 1 day ago 1 reply      
This might be a good place to start: https://javascript30.com/
Ask HN: Reminders for long-running shell jobs?
16 points by polm23  2 days ago   15 comments top 13
jerrylives 2 days ago 0 replies      
just add something like `&& echo "Subject: task completed" | sendmail -your@email.com`

if you are running it via ssh you can do 'ssh zerocool@htp.org bash -s' < local_script.sh` and then do whatever you want to do afterwards

running things locally like make or tests i like to put `&& say done` at the end so i don't lose track of it.

pigpigs 2 days ago 0 replies      
I personally curl a slack webhook that sends me a message.

If the task is already running, ctrl + z and run bg. Then i run `wait <pid> && slack 'job done' `

simon_acca 2 days ago 1 reply      
I use this little CLI utility that I wrote to send messages on Telegram via a Bot. https://github.com/simonacca/TellTg

All you have to do is `$ my_long_running_job; telltg "Done"` and you get a notification on all your devices. Very handy also for remote jobs.

The best use case so far has been piping the udev log into it when my laptop is locked in a public place and I'm away. I get a notification on my phone when someone open/closes the lid, unplugs the charger, sticks a USB drive in and so on.

ezekg 16 hours ago 0 replies      
If it's important, I've used https://cronitor.io/ in the past to make sure that it finished successfully (single monitor is free).

If it's unimportant, I'd probably just use a Slack webhook like pigpigs mentioned or a growl notification.

tedmiston 1 day ago 0 replies      
If you happen to be on OS X, you can fire a notification into Notification Center from the terminal.

 osascript -e 'display notification "that thing is done" with title "my awesome title"'
iTerm2 has a similar feature called Triggers [1].

[1]: https://www.iterm2.com/documentation-triggers.html

richardknop 2 days ago 0 replies      
I would probably wrap the shell command in a file and at the end of the file either fire off an email to yourself, or send a text message, or call a notification API - whichever works best for you.
ahoka 1 day ago 0 replies      
The most unixy way is simply using the terminal 'bell':

sleep 10 ; echo -e \\a

Don't forget to set your terminal to notify you on bell. For example putty can flash the task bar icon.

weitzj 2 days ago 0 replies      
I put the job in a separate tmux window. When something/a character changes in the window, its color changes and I know I can look what happened.
atsaloli 1 day ago 0 replies      
I use "; mail" too but if I forgot and need a notification after I've already launched the job "strace -f -p PID; mail" will email you once the job completes. You have to know the PID of the job.
meta_AU 2 days ago 0 replies      
I use zsh, it has a variable called REPORTTIME that will print a report after long running commands. I have a custom report that includes the bell special character.

This way any long running process will bell when it is done and also show the runtime and cpu time of the process.

12s12m 2 days ago 0 replies      
This is an interesting problem :)For my local commands I have a small script called `b` which runs a command and shows a notification when it is done using notify-send.
Davidbrcz 2 days ago 0 replies      
Have a look at liquid prompt https://github.com/nojhan/liquidprompt
MichaelBurge 1 day ago 0 replies      
Sometimes I add a "; mail" at the end of long-running commands.
Ask HN: What are some good practices on remote work?
29 points by in9  2 days ago   15 comments top 8
12s12m 2 days ago 0 replies      
One thing that has been extremely helpful for me is to work in Pomodoro sessions. I use a pomodoro session of 55 minute work + 5 minute breaks. And, I have a rule of not checking email, reddit, HN while I am in the middle of a pomodoro session. I also use a neat python package called pymodoro (https://github.com/dattanchu/pymodoro) to show me the current duration. This has single handedly removed distractions from my work.
bowlich 1 day ago 0 replies      
Been working remote now for four or so years. The big items that I found useful:

If part of the team is remote, then the entire team is remote. Keep this in mind for meetings. If anyone in the meeting is phoning in, then it's best to just keep everyone at their desk and have everyone phone in as if they are remote. Otherwise, the in-house folks just end up tuning out the remote employees and you end up with two meetings. A meeting of the in-house and a meeting of the remotes.

Team bonding is always an issue. Fly people in once or twice a year and really schedule most of their time in-house to be situated around social activities. We do daily stand ups and block out thirty minutes. Wrap up stand up in five minutes, spend the other twenty-five bullshitting about what's going on in your life. When you're not in the office, it can be difficult to really know what's going on in people's lives. If someone has a sick kid, or a grandparent in hospice this isn't going to be readily communicated unless you schedule and encourage some non-work-related conversations.

SirLJ 2 days ago 2 replies      
I have been leading a remote team for past few years and the best tool for me is a long 2 hour call Wendsday afternoon, we start with status and project updates and after that we just chat about everything else including venting against the company, books, sporting events, the weather and I find this to be the best bonding tool for the team... good luck!
tylermac1 2 days ago 0 replies      
I've worked with both a partially remote team and now currently with an entirely remote company (~50 employees).

I find it best to assume that everyone is remote at all times. My experience with the partially remote team was that people in-office would talk face-to-face more often and then would not relay effectively to the rest of the team.

There's still the problem of phone calls having the same effect but we use Slack and Google Docs often enough that most of our conversations are there for everyone to see/search.

Be sure to ask the team what is working for them and if they have any preferences. I find it best for everyone to be up front about these kinds of initiatives. Something that's a minor annoyance can grow into a real problem down the road. Best to lay everything out early and discuss as a unit.

Best of luck! Working remotely is extremely liberating.

deepaksurti 2 days ago 1 reply      
Hardware suggestion: actually true even if you work onsite as well.

Let each team member have a bootable backup drive, preferably it is backed up multiple times a day. You do not want a situation where someone is spending time configuring another machine when his actual machine crashed.

To use the bootable drive, though one needs another machine and giving a backup machine to each team member can get expensive quickly, but the backup machines can have enough configuration to keep moving. But I think it is worth the expense of a basic machine. Eg: I use MBA as a backup machine to my mac mini when working remote and Carbon Copy Cloner to create bootable drive. Become more risk averse and have a bootable drive in the cloud as well. YMMV.

rwol 2 days ago 3 replies      
I'd recommend Slack, JIRA, and daily stand-up calls. Slack is good for general news and messaging people on your team. Daily stand-ups and JIRA are nice for issue tracking, planning, and making sure everyone is on track.
venture_lol 2 days ago 0 replies      
Staff your team with people who are articulate and resourceful. Then, relax :)
acidus 1 day ago 0 replies      
Time-box everything!
Ask HN: How to quit a job
13 points by throwfounder  2 days ago   15 comments top 9
jackskell 1 day ago 0 replies      
My rule of thumb is, if I see a coworker fired for no reason, I will give them no reason when I quit.

I also budget things out so that I am not surprised to be escorted from the building, with the resulting loss of two weeks (possibly) income.

nfriedly 1 day ago 0 replies      
Just being honest and giving them 2-3 weeks of notice is probably enough.

You could also ask about going part-time for a little while, that may turn out to be a win for everyone - you still have a bit more income, and they can take longer to transition your knowledge and workload to someone new.

owebmaster 2 days ago 1 reply      
1. How should I quit my current job where they don't feel used?

You just quit. We live in a capitalist system, not a communist one. You are allowed to "desert" from your position anytime you want.

2. Should I jump into a startup so soon after my bad consulting company experience?


marcell 2 days ago 1 reply      
Just tell them you are quitting and give two weeks notice. It is at will employment on both sides, this is perfectly normal.
atsaloli 1 day ago 0 replies      
If you're not in a huge hurry, give your employer enough time to hire your replacement and to allow you to train them. This will give you more income and you will leave on very very very good terms. That's how I quit my last job, and it took three months. Three years later they brought me in for 3 months as a consultant.
mattbgates 2 days ago 0 replies      
Just be straightforward and let them know you have another opportunity elsewhere. They might offer you more or let you go. I had an experience, where I had feared letting the tyrant boss know I was putting in my 2 weeks, but I went ahead and just got through with it. Best decision of my life. You can read all about it here if you want: http://www.confessionsoftheprofessions.com/the-opportunity/
gnicholas 2 days ago 0 replies      
Have you considered consulting on the side while launching the startup? I know folks who have successfully done this.

The key is to set a very high rate, to ensure that (1) your time is not fully occupied with consulting, and (2) the time that you do spend consulting is very financially rewarding. And depending on the elasticity of demand for your services, you may find that you can make 70% of your full-time consulting wage, but work only 30% of the hours.

JSeymourATL 2 days ago 1 reply      
> since I had a family to support...

Assuming you still need the income, keep hustling at both gigs Vaynerchuk style. Spend the next 12 months proving your model and building up cash reserves.

SirLJ 1 day ago 0 replies      
Best to explain to your boss exactly why you are quitting and give the official two weeks notice or if you are critical for a delivery even longer - this way you'll part on happy terms and wont burn any bridges, at the end your boss should feel happy for you... If for some reason your boss would not understand, then there is no point of worrying about this relationship anyway...
Ask HN: Can you truly lead engineers without being an engineer?
28 points by uptownfunk  4 days ago   26 comments top 20
akg_67 4 days ago 1 reply      
Most of my best bosses were non-engineers or people with no technical expertise in my domain. In my experience bosses who were recently engineers or technical experience in what I was hired to do to be generally micromanagers.

It sort of became a qualifying criteria. During interviews if an interviewer asked me technical questions and s/he was going to be my reporting manager, I knew we will not be a good fit.

Edit: When I was young and inexperienced, I preferred bosses with technical chops and mentoring mindset. Later in my career, I preferred non-technical bosses and senior technical team members with mentoring mindset.

iancmceachern 2 days ago 1 reply      
The key word here is "Lead". I believe (metaphorically) that, in matters of sight, the blind cannot truly lead the sighted. Yes, someone may be able to "lead" a camping trip for scouts to the local campground without event, but that is a far different skill set than leading an expedition to climb Mt. Everest.

I believe that the analogy holds true. Yes, a non-technical "leader" can manage a group of technical folks to deliver something that is pre-existing, something that has a clear path to completion which if you follow, you will be successful. Civil projects are a great example of this. Repaving a road for example.

Now onto what I've worked on my entire career - highly complex engineering driven technical projects - "cutting edge". I have worked for both types of leader in this environment. I have never seen the non-technical leader be successful, nor the project being directed by the non-technical leader be successful. To make the right decisions the leader needs to be able to intimately understand all the trade offs (technical included) involved to be able to lead the project to success. If this person doesn't personally have the knowledge, understanding, wisdom or ability to seek such out to understand these fundamental trade offs they are required to rely on the information they are given, to rely on trusting the folks telling you things. This is difficult because on the most challenging projects there are always different opinions and the leader must find the thread of truth between them.

This is why Mr. Musk has been so successful with Tesla and SpaceX - he intimately understands what he is making at the most technical level - and is passionate about it.

kasey_junk 2 days ago 0 replies      
Too many people think that leadership is a) bestowed upon you and b) single faceted.

In the context of an engineering organization, leadership on technical tasks is actually inverted. The person most capable of leading in decisions about that task, is the person most recently deep into it. That means on some tasks the new intern is the leader when it comes to leadership in the sense of "expert on the topic".

Engineering mentorship largely must be done by senior engineers. That said, there is no reason those senior engineers are necessarily your project manager, your product manager or your people manager.

At the end of the day, I much prefer working in organizations that understand that people management can and should be done by people managers and technical leadership can and should be done by technical leaders and those 2 things needn't reside in the same office.

usgroup 4 days ago 0 replies      
Taking a serious engineering team as example (ie one doing something innovative rather than cutting variants of the same code all the time) the leader has to be an engineer.

Not necessarily the best in the team but they have to get the mechanics and prognosis of technical decisions in order to manage risk, know where or who the problems are, make trade offs, etc.

I've often seen the non technical leader adopt a technical right hand who defacto does the leading whilst the alleged leader reports up, administrates and generally takes credit.

Further like someone else said, leading and managing are like chalk and cheese (superfluously similar). A project manager may happily be non technical because there job is mostly triage, comms and tracking.

zer00eyz 4 days ago 2 replies      
Yes you can.

At the point that your in "leadership" it isn't about doing it is about providing the tools for others to DO. Good leaders remove distractions, focus on the heath of the group (and the individuals within) act as a contact point and a buffer from outsiders.

Can being technical help. It depends. Stable products, well established domains (with experienced people) don't need deep technical knowledge to deal with the day to day. However, if you systems can be described as a disaster, if you having major issues all the time, a leader with technical chops is going to be of benefit. You want an empathetic manager when the shit hits the fan not a sympathetic one.

mattbgates 3 days ago 0 replies      
My supervisor is considered a senior in the company, having worked there for 16 years. He had absolutely no experience in knowing what we do, what web design was, etc. In fact, he "transferred" over to my department and became the supervisor and I was the one who ended up training him.

While his skillset is that of a perfectionist, in which he is probably great at catching mistakes and being a micro-manager, he lacks some other skills that I would've thought necessary to "supervise" us. In the beginning, he was taking his "old skills" that he knew from his entire time at the company and trying to apply it to his department and it was like he was miserable... because you cannot apply the same rules for our department as others. Almost all other departments work on a "errors made" platform, so if you make an error, it is caught and counted towards you.. we have a high turnover rate in all other departments.

Our department, however, has no platform like that where "errors" can be caught by a computer, and are caught manually. So trying to convince him to throw out over 15 years of everything he's ever knew.. aside from his perfectionist mindset was extremely hard for him. It took 2 years just to get him to a point where he started to realize: We are a whole different department that cannot be classed in with all others.

Fortunately, he's definitely improved.

Sometimes I think its a good thing and sometimes bad... he's always spying on our work before it is done and quickly makes assumptions and goes kind of crazy every so often because he thinks that's what it's going to look like, but as you're developing something... most things never "stay looking" like they would in development phase. So convincing him: "Can you let me finish the product before you start peaking at it?" is something I have to do every so often.

He can't be doing too bad, after all, there are two main offices that my company has, and only one person has ever been promoted in the other office, while we've had about 5 people who received "promotions" ... which basically just means a little extra money and a new title called "senior", but it must say something about how he is doing for his team.

He's proof that all you really have to do is know people in the company, acquire that status of a perfectionist (and manager), apply for the job, and you can fake it till you make it.

bsvalley 4 days ago 0 replies      
To "lead" engineers you need to be an engineer because you have to make technical decisions.

To "manage" people (including engineers), it's totally fine to be a non-tech person. It's actually even better if you're not tied to any project as a manager. Because you can focus on career growth and conflicts, which is what I'd expect from a manager.

fuzzfactor 3 days ago 0 replies      
Depends on whether you want to be like Microsoft under Gates or Ballmer.

Of course Ballmer could never had grown Microsoft well enough to begin with to even give Ballmer himself the size of opportunity we would be so aware of at this point anyway.

Not that Gates actually graduated from an engineering school, but he had the technical chops to out-engineer most of those who did in the ways that count.

This allowed Microsoft to overcome hurdles that could not have been passed any other way, even as Gates participated to a much lesser degree in the actual engineering details of the products over his years.

Cats are best herded by other cats.

At least Ballmer had been with the company almost as long as his technically qualified predecessor, and that was since almost the beginning.

When HP failed on these points too it was even less pretty.

Seems like from large engineering company scale down to single engineering project scale, one trend for success might be when the leader is actually inherently capable of virtually all of the engineering needed for a successful product. Just when the project, product, or company is too big for this technical leader to accomplish all or even any of the engineering single-handedly, is when the judicious delegation of the technical fragments becomes the valued talent that non-technical operators also have an extreme disadvantage with.

It's more financially sound if the leader when needed can solve technical problems that his team alone can not overcome when they arise.

Even if the company is started because of a businessman's vision of a market he makes come true, if it is largely an engineering company, the technical leader needs controlling interest or the shareholders will be shortchanged.

This usually works the other way around, which is why we hear about far fewer of them becoming sizable regardless of how amazing the engineering seems sometimes.

There simply needs to be a way for the non-technical but gifted business talents to earn enough to be more rewarding than what they would experience having more control of a lesser pure sales company without the engineering talent.

So the engineering does need to be outstanding, exactly what some of us are here for.

paulcole 4 days ago 0 replies      
Of course! Successful leaders in many fields don't have direct experience in that field-- although it may not be the norm.

If engineers believe they can't be led by a non-engineer it says more to me about the engineers than anything else.

gaius 3 days ago 1 reply      
No. We see this play out time and time again - successful tech company, the technical founder retires or is replaced by some other means and an MBA takes over, then the wheels come off.
kochthesecond 4 days ago 0 replies      
I am inclined to say yes, you absolutely can. I'd even prefer it if said engineering manager tends to micromanage.
eeZah7Ux 4 days ago 0 replies      
Define "lead engineers". Is that leading a project and taking technical decision or managing people?
matttheatheist 3 days ago 0 replies      
As the owner of a startup, I won't hire you to manage a group of engineers if you don't have at least the same level of technical experience.I will always test you. You can never hide from me. You are exposed.
ParameterOne 3 days ago 0 replies      
I don't think you have to be an engineer to lead but I do think the leader needs to see the vision/goal to properly communicate it to the engineers who make it happen.
Bahamut 4 days ago 0 replies      
I hesitate to say no, but I haven't seen this work out too well many times.
crispytx 3 days ago 0 replies      
shortoncash 3 days ago 0 replies      
It's doable but it's not recommended.
mars4rp 4 days ago 0 replies      
It depends on how much engineering decisions you have to make!!!
SirLJ 1 day ago 0 replies      
Absolutely, I for one would prefer a non technical boss to someone who will second guess half my decisions based on his outdated knowledge from years ago... All in all it is a matter of trust, the best is to be in a position where your boss is trusting you 100% and always ask to consult with you on major decisions...
miguelrochefort 4 days ago 1 reply      
Define engineer.
Ask HN: What does your Router Security Checklist look like?
27 points by jmbake  3 days ago   11 comments top 5
zxcmx 3 days ago 1 reply      
It's a good list. I just hate those things now.

I worked as a wireless router firmware developer for a while and as a result... I don't use them anymore. The whole industry is just producing unfixable tire-fires.

Different level of caring, but if security is important to you, put cable/dsl/fiber ntu in bridge mode.

Get a pcengines apu (or your favourite sbc), install your favourite os (ubuntu or debian for me). Don't bother with ui, just use a few nftables rules.

It actually worked out cheaper for me than the netgear thing shaped like a stealth fighter.

The other thing which really annoyed me was my ISP periodically updating settings on their stock router. Yeah, they can do that remotely if you use their unit and there's usually no good way to turn it off.

wmf 3 days ago 2 replies      
Don't change the password. Find a router that uses pairing instead of passwords.

Don't check for updates. Find a router that updates itself automatically.

It's a marathon, not a sprint. Find a company that writes their own firmware and uses the same firmware for multiple generations. This shows that they are willing and able to invest in security.

Or just check if the brand is Google or Apple.

Canada 3 days ago 0 replies      
Nothing. Why even bother? My devices connect to untrustworthy networks all the time anyway.

I just don't trust the local network in the first place.

LinuxBender 3 days ago 2 replies      

 - SELinux Enabled - Sysctl tuning applied - Inbound/Outbound/Forward iptables rules enabled - ipset iptables rules enabled - iptables intercept rules to route all ntp/dns over VPN to VPS nodes. - Unbound DNS overriding many spammy domains - tinc vpn enabled to multiple VPS nodes. -- Each VPS node load balancing to multiple datacenter open resolvers that are NOT OpenDNS or Google. - ip route blackhole about 20k bad networks from firehol on github - syslog to internal host - Surricata IDS logging to syslog - tc cbq traffic shaping enabled - haproxy L4 vips for sending select traffic to select squid proxies. - power conditionor / ups enabled, one for router, one for cable modem.
Those are the basic things. My router is always Linux running on commodity hardware with dual gig interfaces for clear physical demarcation.

zamalek 3 days ago 0 replies      
Checking that I can flash custom firmware comes before anything else.
Ask HN: Do I need a bug bounty program? Feeling a bit threatened by HackerOne
14 points by scared_of_hacks  2 days ago   12 comments top 6
martenmickos 2 days ago 1 reply      
Thanks for raising this issue.

HackerOne will NEVER threaten you or do anything to reduce your security. You can safely ignore our sales emails if that's what you want to do. We are just trying to be helpful.

But we do have the absolutely best set of programs for companies of all stripes. To start with, you can open a vulnerability disclosure program that costs you nothing. It will allow hackers to submit vulnerability reports to you. We run numerous programs of this type for startups and other companies.

Our mission is to empower the world to build a safer internet. That's it.

MartenHackerOne CEO

ovi256 2 days ago 1 reply      
If this isn't guerilla PR for HackerOne, I don't know what it is.

It's set up just the perfect way to make us answer "oh but that's just normal salesmanship and reasonable".

Well played if true.

throwaway52123 2 days ago 0 replies      
It's all marketing. I would ignore it and move on with your life.

Allowing and encouraging responsible disclosure is never a bad idea. That said, if you're a young startup, I would focus on practicing and promoting good security hygiene within your company. Secure coding best practices, locking down infrastructure, that kind of thing. I wouldn't overcomplicate it or stress too much unless your product needs special security attention (i.e. you are a bank or likely to be hacked by a nation state or something). If you're the only technical person and you're already doing this, it does not sound like you have much (anything?) to worry about outside of the norm.

I hope that can help you sleep better at night :-D

NameNickHN 1 day ago 0 replies      
I wouldn't worry too much about it. In my opinion a bug bounty program is another marketing tool of big companies. They have to portray an image of a company that cares about security.

From my experience if you are a small company and fix a reported bug in a timely manner, nothing bad will happen. As long as your customers see that you're reacting quickly, everything is going to be fine.

Rannath 2 days ago 0 replies      
How much does a bug fix save you? How much is that worth? Are you popular enough that people are constantly trying to break your security? Bounties are cost saving measures.
gt565k 2 days ago 1 reply      
Jeez sending cold emails is mafia like?

Sounds like paranoia.

Ignore the emails and move on with your life.

       cached 29 June 2017 12:05:01 GMT