HNHacker News
TopNewBestAskShowJobs

jake_morrison

1,254 karma · joined February 17, 2008

I help startups and entrepreneurs build products, serving as fractional CTO and managing the team at https://www.cogini.com/

Contact me at sales@cogini.com or https://www.linkedin.com/in/jakemorrison/

submissionscomments
jake_morrison··on NYC May Pull the Plug on Cashless Restaurants, Retailers
Giving everyone a basic bank account with a debit card would be a great solution. A lot of people don't have a fixed address or live somewhere that they don't have a utility bill in their name, therefore they can't get a bank account. One solution would be to allow the post office to operate as a bank, as is done in many countries. Right now the working poor are screwed by predatory banks and loan cashing services who work the system to stop alternative services.
jake_morrison··on Seven tough lessons from ten years in bootstrapped business
Great article, it resonated a lot with my experience.

This book is quite good on the standard parts of managing professional firms e.g. accounting and law: https://www.amazon.com/Managing-Professional-Service-David-M...

Technical consulting has significant differences, however. There is a big separation between the sales and requirements side of the business and the solution/execution side.

One of the things that most resonated with me from the book is three kinds of consulting companies: expertise, experience and execution.

Expertise consultancies solve complex problems that require non-standard solutions, e.g. a big merger/acquisition or designing a complex software solution. The boss typically has decades of experience, and the "juniors" have a decade.

Experience consultancies solve semi-custom problems, things that are amenable to process and knowing the answer to common issues in a domain. An example might be setting up a new legal entity for a startup, or building a custom website to handle e-commerce.

Execution companies handle well understood problems at lower cost than it would take to do in house, e.g. monthly book keeping, building WordPress websites for small businesses.

In the book, he talks about a number of standard ways of splitting up profits in a partnership. A lot depends on the goals of the firm based on its stage. So the partners might value individual billable hours, managing staff that are billable, bringing in business, or being the "managing partner" who makes sure that the rent gets paid and the copy machine works.

It's possible that you have a mix of Expertise, Experience and Execution in one firm, but one basic rule is that in order to be a partner, you should not be relying on another partner to make your team work, e.g. bring in sales.

This is one reason that technical consulting firms are different, because being great at technical execution does not mean that you are good at sales and relationship management. In fact, it's negatively correlated, and essentially impossible to hire for. Anyone who can do the job well can run their own consulting company.

jake_morrison··on IBM acquires Red Hat
We were a Softlayer customer for dedicated servers before the acquisition. Afterwards, we needed to add additional servers, and IBM wanted 50% more for the same config, already quite high (twice as much as we pay elsewhere). When we needed to increase the RAM from 16GB to 32GB, they wanted $50/month for a stick of RAM that costs about $100.

It's like they are using cloud pricing as a reference for dedicated servers. We run dozens of dedicated servers, and using the cloud would be 10x the cost. Amazon at least has a culture of passing on cost savings to customers.

There was a problem with a server, and I needed to connect to the console. That involved using a VPN, then downloading a Java applet with a very specific (obsolete) version of Java. The applet didn't support copy and paste, and frequently repeated keys. Try typing in a 16 digit randomly generated root password by hand with your keyboard duplicating keypresses. Linode can offer a console over SSH, why not IBM?

Screw IBM.

jake_morrison··on Time to look beyond Oracle's JDK
The first time I used Java, in the 1.0 days, we wrote an application and deployed it to Solaris, HP/UX and AIX. We found a bug on AIX which would crash the VM, and reported it. IBM said it would be months before the next release, so we rewrote the application in Perl.
jake_morrison··on The Machine Fired Me
We had a problem where after about 10 years, PayPal suddenly decided that our account was in the wrong country, and the only solution was to close it. Kafkaesque.

I wrote about it here: https://www.cogini.com/blog/paypal-know-your-customer-failur...

jake_morrison··on Command-line Tools can be 235x Faster than a Hadoop Cluster (2014)
One fun thing is that xargs supports parallelization.

    -P max-procs
    Run up to max-procs processes at a time; the default is 1.
    If max-procs is 0, xargs will run as many processes as
    possible at a time.  Use the -n option with -P; otherwise
    chances are that only one exec will be done.

    -n max-args
    Use at most max-args arguments per command line.
    Fewer than max-args arguments will be used if the size
    (see the -s option) is exceeded, unless the -x option is
    given, in which case xargs will exit.
So here is a "map/reduce" job which takes the log files in a directory and processes them in parallel on eight CPUs, then combines the results.

    find . -name "*.log" | sort | xargs -n 1 -P 8 agg_stats.py | sort | merge_periods.py
jake_morrison··on What Sucks About Erlang (2008)
I would say they are complementary. Kubernetes is a standard solution for packaging and deploying apps. If you run a lot of apps, you want your ops team to be able to manage them without knowing all the details. You get better utilization of your servers by allowing them to deploy standard units and manage resources at a higher level.

You can put an Erlang/Elixir app into a container and deploy it, but containerization doesn't provide as much value as it may for other languages. The Erlang VM doesn't depend much on the operating system. The mix build tool tightly manages runtime library dependencies, and building a release combines the VM and the app's libraries into a single tarball that you can deploy as a unit. So we don't find it particularly useful to use Docker/Kubernetes to deploy.

Erlang/Elixir makes it very easy to take advantage of all the CPU cores available, so you generally benefit from having one instance with lots of CPUs instead of lot of little instances. And it can be a lot cheaper to do this in a dedicated server environment instead of the cloud.

So on the whole, Kubernetes is not that big a win for Erlang, but they work fine together.

jake_morrison··on What Sucks About Erlang (2008)
Elixir has a very regular syntax, so you get Erlang plus the power of lisp-style macros, which is HUGE. It also adds features like Clojure-style protocols. And then with pattern matching, we get to dispatch on all the function call arguments, like CLOS. So basically, it's got much of the power of Lisp, in a mainstream syntax. I love it.

With those syntax improvements, we get the power of Erlang with the ease of use of Rails: http://www.littlelines.com/blog/2014/07/08/elixir-vs-ruby-sh... (A bit dated, but this is the post that sold me on the platform.)

jake_morrison··on What Sucks About Erlang (2008)
We run in cloud or dedicated server instances. We deploy using Erlang "releases" using systemd for process supervision. We build on a continuous integration server and deploy using Ansible or AWS CodeDeploy.

I have written a detailed guide here: https://www.cogini.com/blog/best-practices-for-deploying-eli...

jake_morrison··on OVH increases pricing with the rise of their next generation DDoS Protection
Their dedicated servers are good, but I have found their VPS service to be unreliable, and their support people clueless. We had an outage every month for a while, and the support people said that it was "normal" to take 30 minutes to reboot an instance. So I think it's a different tech stack and team within OVH.
jake_morrison··on Show HN: Codekeeper – Source Code Escrow for Developers
Too expensive.

Make a source code release and encrypt it. Put it somewhere accessible to the customer, e.g. an S3 bucket owned by them. Arrange for the key to be given to the customer under the terms of the escrow agreement, e.g. send a letter to your lawyer with the terms of release and the key.

I can see value in having someone handle this for me, with a nice UI. It's fundamentally a clerical job, though, with some legal process / responsibility. So $50/month is already a fair amount, to say nothing of $1000.

jake_morrison··on How we broke PHP, hacked Pornhub and earned $20k
Raw PHP is reasonably fast. The performance issue comes with loading source files on every request: http://talks.php.net/show/froscon08

This means that there is a conflict between performance and having a well structured object oriented framework.

Demand loaded classes and byte code help a lot with that: http://www.yiiframework.com/performance/

Best would be a model where a persistent process handles multiple requests concurrently, but that is not normal for PHP. So you need to make sure that all the libraries you are using are not leaking, have a nice db connection pool, and write a PHP framework that handles concurrency. Might as well use a better language at that point :-)

jake_morrison··on Corporations Don't Want Employees
I think it's a bit funny to anthropomorphize corporations. If this is restated as "Shareholders of Corporations Don't Want Employees", it may still be true, but it shows that there is a choice.
jake_morrison··on The Quiet Crisis Unfolding in Software Development
He works in a consulting company in Texas. You need to project a certain level of professionalism to make your customers feel comfortable. Sometimes looking weird can be positive, e.g. for designers, but it can be a distraction.
jake_morrison··on Go best practices, six years in
The benchmark for Phoenix was done at the last minute, and had a lot of problems which they didn't have opportunity to fix. The next round will be better.
jake_morrison··on Uber ruled illegal in Taiwan
It's because Mandarin has standard syllables. While the sound for "p" is in the language, it's normally bound into a syllable. So saying "app" with the "p" sound at the end is awkward, but "pi" is natural.
jake_morrison··on New Managed NAT Gateway for AWS
Annoyingly expensive. I wonder if they have a goal of restricting the number of VPCs, as you basically can't run a VPC without NAT to access other AWS services like S3.

But the t2.nano instances will make a DIY solution cheaper.

jake_morrison··on You should try FreeBSD (2014)
Honest question: has FreeBSD become more automation friendly? i.e. putting all the configuration in /etc/rc.conf may be nice for a systems administrator manually editing things, but makes it hard for installation scripts which configure the system incrementally (e.g. Ansible). One thing I like about Linux is support for /etc/foo.d directories instead of /etc/foo.conf. Or is this not a problem in practice?

In our new "cloud native" systems we are ending up with a number of single-purpose VMs in AWS or GCP. So being able to run a minimal OS image with OpenBSD has it's attraction. At this point, it's easier to use CentOS or Ubuntu due to application compatibility.

I suppose the next logical step is Docker or NixOS.

jake_morrison··on The Law That Makes U.S. Expats Toxic
I am a business owner living overseas in Asia. I generally spend about $2500/year on tax preparation, between my personal return and the 5471 form that I have to file to report my company information on my US tax return. While my financial life does have it's complexity, I have to pay this simply for compliance, independent of income. The $100K/year deduction is on "earned income", i.e. salary. So if you have other income, e.g. dividends or other capital gains on real estate or selling your company, you have to pay at your full standard income rate (small company dividends are not "qualified" unless the US has a corporate tax treaty with the host country).

As a business owner, my best strategy from a personal tax perspective is that my company makes no profit - it should all go to me as salary. In the past, that has put me in conflict with a non-US partner, as it didn't match his best strategy. And it means that "profit sharing" for employees doesn't make sense.

So US tax law costs me considerable money in compliance costs and fundamentally distorts the way I run my business, for no additional tax revenues to the US.

Fundamentally, residence based taxation makes more sense. It's more direct and easier to manage. People talk about these benefits of being a US citizen, as if I don't get services from the country where I live.

jake_morrison··on Phoenix 1.0
Coming from an Erlang background, I found it very easy to get started with Elixir, it has the same underlying concepts and power as Erlang. Elixir takes it to the next level, though. The syntax eliminates annoyances in the Erlang system, e.g. having to fool around with punctuation and work with binary strings. The Elixir standard library gets rid of inconsistencies in the Erlang libraries and it is organized to allow easy chaining via the |> operator. Then it has features like protocols which give the encapsulation and polymorphism of OO without needing objects. And finally we have macros, which are the "right way" to do metaprogramming, allowing ease of use at a Rails level without the mess underneath.

Another big thing is that the Elixir community focuses on ease of use and out of box experience the way the Rails community did. So it's easy to get started and all the pieces generally fit together well, e.g. the mix build tool works great, as does the hex package manager, and relx release builder. With Erlang it's more DIY. We have recently converted a big Erlang project to use mix as the build tool, and it just eliminated a bunch of cruft. The interop between Elixir and Erlang is easy. So you get the best of both worlds, the ease of use of Elixir with the power of Erlang, with the highly mature runtime and libraries. And with Phoenix we get a web framework with world class ease of use.

jake_morrison··on Phoenix 1.0
That's right. Because Elixir is 10x faster than Rails, we don't need to worry about caching so much. And because it supports cheap concurrency, we don't need to offload long running tasks to a background task. So the overall structure is simpler.

And this works across the whole architecture. One of our projects right now is a mobile medical application for medical where caregivers communicate in real time with a number of patients. We have the mobile app talking to the server using a REST API and real time messaging for chat. The caregivers can communicate with the server using a web application with integrated web chat or via an XMPP client. And we have the normal public web and admin CRUD. All via a single server process in a single language. This is what Elixir/Phoenix was made for, it enables a new generation of modern apps.

jake_morrison··on Phoenix 1.0
We deploy using Erlang "releases", which bundle the Erlang vm along with your application and it's dependencies into a tarball with a script to run the application. You don't need to install Erlang on the target system, just unpack and run.

We use "mix release" to build the tarball, scp to the server and unpack, then run using an upstart unit which runs "exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- /path/to/deploy/directory/bin/myapp foreground"

It's pretty painless. We are automating with Fabric now, but will likely be switching to Ansible soon.

jake_morrison··on Ask HN: Who is interested in a book about high performance Erlang?
I would buy it
jake_morrison··on Ask HN: Is it possible to create a Saas for passive income while working a job?
One option would be to just learn to program better or market products during your less busy time on the job. Maybe you can start by making some application to improve your day to day work, or operations in the company. So if anyone asks, it is clear that you have time on your hands, but you are using it in a relatively productive way. Then you can apply what you have learned later outside of work, probably after the baby is bigger and you are not so sleep deprived.

In my experience, non technical companies can be a bit irrational about releasing software. They don't understand it, so it's hard for them to value it. They will have a knee-jerk reaction and just say no. Or think that it's more valuable than it is and want to keep it for themselves, and be unable to do anything with it.

jake_morrison··on Don't use Hadoop when your data isn't that big
There is a reason that the largest Internet companies are still running their infrastructure on Java and C++. It scales and operations people know how to manage it.

Rails is the classic example of optimizing for developer ease of use instead of performance. Which probably makes sense for startups, but scaling is a pain in the ass.

Openresty is great for infrastructure level solutions, e.g. request routing and authentication. It is used by some of the largest Internet companies in China.

The benchmarks at http://www.techempower.com/benchmarks/ are a reminder of how poorly some popular frameworks perform. And how poorly cloud performs vs relatively cheap dedicated hardware.

jake_morrison··on What are some Japanese Payment Gateways?
Except that you can't use Pro unless your company is in the US.
jake_morrison··on Mosh: SSH for 2012
If you are opening multiple ssh connections to the same host, you can add the following to your .ssh/config file

# Multiplex connections if there is more than one Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p

jake_morrison··on The new tax havens
This is such US-centric thinking.

Foreign companies never even started in the US, so there is no question of them "leaving" or "paying their fair share". If US companies are going to be competitive, they have to get out. Otherwise, investors will just choose non-US companies. It's better to set up overseas to begin with, and save the trouble.

Same thing with the US taxing citizens living abroad (unlike other countries). And so the IRS sticks its nose into every single financial transaction in the world in order to get money it doesn't deserve.

The US government should just stop being so greedy and entitled.

jake_morrison··on MtGox salted passwords cracked
So the entire user community is people with lots of hardware resources waiting to brute force passwords. What could possibly go wrong? :-)
jake_morrison··on Simple MVC for PHP
We looked at lightweight frameworks and went with Yii (http://www.yiiframework.com/). CodeIgniter is getting a bit long in the tooth. Yii is a modern object oriented framework.

Yii uses demand loading of classes to avoid the performance problems of object oriented frameworks which load all the files off the disk for every request (see http://talks.php.net/show/froscon08). And it uses prepared statements for SQL, improving performance and avoiding SQL injection attacks.

It's nice for simple applications, but lately has been growing to include other features.

← PreviousPage 6 of 7Next →