Ask HN: How to set up a payment gateway - <AUTHOR>

Here's what I want to do:  I'd like to act as a third-party to facilitate payments between two parties.  From my initial look, I can't use a service like PayPal or Authorize.net to manage the transactions between two other people's accounts.  Besides that, I'm adding on another layer of charges which would make the cost prohibitive for our customers.
So if I want to act as a third party, I need to set up my own system.  Here's what I think I need:
1. My own servers in a secure location, to store all those account numbers.  I don't think I can trust a third party to handle that.  Is there anyone who does? 2. The firewalls, enncryption, etc. to maintain PCI compliance. 3. Deals worked out with Visa/MC/etc. to accept credit cards. 4. Deals worked out to handle ACH payments.  I have no idea how to go about doing that. 5. Software to manage the process of payers and payees entry and verification of data.
If I do it right, I can bring down the cost per transaction, and I'd need to run the numbers to see how many transactions are needed to pay off the system.  ACH transactions are cheap and would bring down costs, obviously.
My gut tells me it's like 1.5 million USD to set that all up right, in a way that would scale and eventually pay off.
Anyone have experience pricing that sort of thing?  I assume I'd need that to go after funding, if that's the direction we decide to go in. <comment><USER3> Coming from a financial services guy: Look at the legal aspects first before you sit down and write code. It sounds like you are jumping right into the transfer money aspect of it, bypassing the laws ytou need to comply with.

If you are in the middle of a money transactions you are subject to many federal and state laws, and if you deal with international, you are subject to more federal and state laws, as well as those of the country you are transferring to.

You will be imprisoned if you do not. Since Sept 11 everyone involved takes these things extremely seriously, they will jail you first, and investigate later. (not to mention close your company and impound all your equipment).

EDIT: And you will need much more than your gut estimate of $1.5 mill because there are huge bonds to be put in _per_state_ you want to do business in. Money transmission is not a business for the small guy any more.

EDIT2: Have a sip of the legal requirements <http://www.fincen.gov/> (this is just for the federal government, each state has its own office that places additional restrictions on you as well)

<comment><AUTHOR> Do these rules apply for a gateway like Authorize.net, or just the banks they communicate with? If so, starting up something like that must be a massive undertaking.

<comment><USER3> Financial rules apply to any company that does transactions that could reach a high volume (one of the magic numbers is USD $10,000). So, for example, a car dealership that does single transactions of over $10,000 must comply with several regulations already, including checking the OFAC list (google it) for possible matches of people forbidden to do business with US companies (Believe me, you do NOT want to get caught as the inadvertent money laudering agent for a terrorist organization; your ass is going straight to federal prison even if you did not mean to be their money laundering instrument).

You must also check for structured transactions (transfer $20,000 USD in small transactions so they do not go on the radar), etc...

The laws are very strict on this nowadays, and people who make themselves be the middleman in a financial transaction are at great risk of getting into trouble if they do not do what they are required to (by the various goverment regulators, both federal and state). I am talking about criminal charges, not just civil penalties.

The banks must do their own compliance work, but that does not absolve - <USER2> any way - the company that is doing the transactions from doing so as well. It is mostly a cover your ass thing, rather than an "as long as someone in the chain reports it" thing.

So yeah, the legal compliance in this business is - vastly - the more complex part of the business. The technology is the easy part.

</comment></comment></comment><comment><USER4> A payment gateway doesn't handle the transferring of money, they only communicate with the interchange. Then, you go to a processor to settle the transaction given a specific transaction ID for which you have received an authorization.

There's a very important distinction: A gateway doesn't involve transferring money, while a processor does. There's a huge set of risks on the processor side, and being a "start-up" processor seems to be a non-starter (big banks usually perform this task).

You also need to figure out what you have to lose to fraud. Gateways, it would seem, don't have that much to lose to fraud (they just handle the transaction, they don't settle it or transfer any kind of money).

There's definitely a huge market for a better gateway (Authorize.net's APIs suck). Being a new PayPal, in my opinion, is going to be incredibly difficult, for many of the reasons mentioned in this thread.

I'd start your journey by educating yourself on exactly how the credit card system works. This is a good place to start: <http://authorize.net/resources/howitworksdiagram/>

<comment><AUTHOR> Thanks for that information! Maybe what I'm trying to do is set up my own gateway, so I can handle transactions for two third parties. It also seems much cheaper.

</comment></comment><comment><USER5> Would Amazon FPS do what you need?

[http://www.amazon.com/Flexible-Payments-Service- AWS/b?ie=UTF...](http://www.amazon.com/Flexible-Payments-Service- AWS/b?ie=UTF8&node=342430011)

If not, then you will need funding if only to pay the lawyers who will be helping you charter your new financial institution.

<comment><USER6> Unfortunately, FPS requires users to use an Amazon account, which makes it unattractive for a lot of uses.

<comment><USER5> A pool of people who have a demonstrated willingness to spend money online is unattractive?

Letting Amazon brand the transaction and own the relationship is less than beautiful it's true; but that also means they own the headaches associated with those accounts.

<comment><USER7> I think he's saying that his non-pooled customers that are willing to pay him may not be willing to sign up with Amazon.

<comment><USER6> And that asking someone for a separate set of credentials when making a payment is a disjointed and possibly confusing process.

<comment><USER5> I'm not entirely disagreeing with you, and for a straight ecommerce site, I think it looks a lot more pro to have your own merchant account, ssl certificate, domain etc.

But for more specialised needs FPS could be the right answer, particularly if you are acting as a broker or escrow agent (which sounds sort of like what coglethorpe was describing) and it would let you build something that would at the very least show the potential of the business model enough to justify a real investment (10-50 Million USD for a new bank that is intended to operate nationally; more if you want to start global).

</comment></comment></comment></comment></comment></comment><comment><USER8> Anything is possible but the due diligence on your idea is enormous. Good luck getting investment. 1.5M probably won't even cover the upfront legal costs.

<comment><USER3> It can cover the legal costs, provided you get the right lawyer. If you get the wrong lawyer, 1.5M will not be enough. The requirements are fairly straightforward, they need to be implemented correctly, though. Huge companies that transfer money have a single scary-smart lawyer/compliance officer on staff, with lots of clerks that are not particularly expensive.

</comment></comment><comment><USER9> There's already quite a few players in this market. What will you do differently to make it worth using you instead?

<comment><AUTHOR> That's true. What I was hoping to do was offer payments for a specific niche. But if I have to build a full payment service, I may as well offer payments for all sorts of things. There are many players who offer generic payments, PayPal and Authorize.net to name two.

I wasn't going to offer merchant solutions or shopping cart integration like others do, but it looks as if I'm going to act as a third party, I may as well set up the whole thing. 1.5 million in legal costs alone might be far to steep a barrier to entry for just one niche.

<comment><USER9> Why not re-use one of the numerous existing payment gateways? Most of them take only a very small cut if you have large enough volumes, and it'll save you a lot of hassle. Even integrating with an existing gateway is a lot of hassle - writing your own is considerably more painful.

<comment><AUTHOR> It's my understanding that they don't allow a person to act as a third party between two other people's accounts. That's essentially what a gateway does, so I can see why they don't want n-tier gateways.

<comment><USER9> I don't think the banks will allow you to do that either. Transfers are always to a merchant account. You'll have to build your own Paypal-style account system to allow transfers between users.

</comment></comment></comment></comment></comment><comment><USER10> contact me at paulpajo [at] gmail maybe asiapay [dot] com can help. you can browse through this: <http://www.slideshare.net/ebiziseasy/pesopay- presentation/> slide 17 might be of interest to you (payalert)</comment>


HN Submit - Firefox add on that lets you quickly submit the page you're on - <AUTHOR> http://svveetdesign.com/hn/

<comment><USER2> Make it easier to post to HN and the quality of the submissions will inevitably go down.

There are downsides to everything good in life.

</comment><comment><USER3> I installed this on Firefox 3.6.x and couldn't find any changes to the Firefox UI that would enable me to submit a page to HN. Would someone please explain how to use this extension?

<comment><AUTHOR> The extension adds an item that reads "Submit to HN" to your context menu (right-click).. Is it not visible for you?

</comment></comment><comment><USER4> For Chrome: [https://chrome.google.com/webstore/detail/chfagbibdlilfcjmil...](https://chrome.google.com/webstore/detail/chfagbibdlilfcjmilebmcokmdmnabam#)

</comment><comment><USER5> There's also an official bookmarklet: <http://ycombinator.com/bookmarklet.html>

</comment><comment><AUTHOR> The reason we made this was because we hate using the bookmarks bar.. It takes away valuable viewport space.. Cheers!</comment>


Polynomials Are Easier Than Integers - <AUTHOR> http://rjlipton.wordpress.com/2011/02/26/polynomials-are-easier-than-integers/ <comment><USER2> _> if I say that "we should definitely work hard on getting our proofs correct," consider the negation: "we should work hard on getting our proofs incorrect."_

There's a logical flaw in this example. The latter is not the negation of the former. The correct negation is:

"we shouldn't work hard on getting our proofs correct."

<comment><USER3> I believe you are talking about the inverse, as opposed to the contradiction. Consider a * b

Contradiction: a * -b

Inverse: -a * -b

In the theorem that he provides us, H(X) = H(-X), it could be argued either way as to whether he meant contradiction or inverse. However, his example of "we should work harder on correct proofs; we should work harder on incorrect proofs" very clearly uses two variables, and the form of the second is of a contradiction.

EDIT: Wow did I screw my terms up. Changed Negation to Contradiction, and Contrapositive to Inverse. Thank you barrkel for pointing this out.

<comment><USER2> _> I screw my terms up. Changed Negation to Contradiction, and Contrapositive to Inverse._

Even with those changes, your post doesn't make any sense to me.

The _negation_ of logical statements has a pretty well defined meaning [1]. It seems to be neither what you call "inverse" not what you call "contradiction".

Also, I don't see what the " * " operator means in your example. It appears to be some operator to combine two logical statements "a" and "b". However, the original statement isn't a combination of smaller statements at all. (In particular, the original statement is not an implication, i.e. a term of the form "if a then b" or "from a follows b" or similar.)

Anyway, for whatever you mean by " * ", the negation is simply "- (a * b)". The expressions you are proposing ("-a * b" and "a * -b") seem to be different from that.

In summary, it is totally unclear what you mean by "a", "b", " * ", "inverse" and "contradiction".

[1] The negation is true for exactly those instances for which the original statement is false.

<comment><USER3> Fair points. I was basing my terminology off of this table, after realizing that I had used incorrect terms.

<http://en.wikipedia.org/wiki/Contraposition#Comparisons>

> If it is meant to be a synonym of what I'm calling negation [1], it would be > "- (a * b)" for whatever you mean with " * ". However, this is by no means > equal to "(-a) * (-b)".

This is absolutely correct, and was what originally prompted my comment. In your original comment, you say that

> The correct negation is: "we shouldn't work hard on getting our proofs > correct."

which, if we let a = "should work" and b = "getting proofs correct", would mean that you said (-a) * (-b) is the negation, as opposed to -(a * b). By the quoted text, the negation would be either (-a) * b, or a * (-b).

This distinction is what I was trying to communicate, though it seems I did a poor job of that.

<comment><USER2> Okay, so your " * " operator means "implication" [1], because the terms "inverse", "contradiction" and "contrapositive" in your mentioned Wikipedia article refer only to implications.

However, the original statement _isn't an implication_.

Also, neither your proposed part "should work" nor the other part "getting proofs correct" are logical statements. Those are just parts of a sentence.

In other words, _your decomposition doesn't make any sense_.

[1] That is, "a * b" = "if a then b" = "from a follows b" = "a implies b"</comment></comment></comment></comment></comment>


Orderly: Process (re)start, shutdown, and supervision - <AUTHOR> https://github.com/andrewchambers/orderly <comment><USER2> Is this aimed at systems without intelligent init systems? I'm curious about the motivation. (What this provides seems to be available in systemd and upstart (and maybe others?) out of the box)

<comment><USER3> I think it's kind of aimed at containers, but it's also the obligatory Rust rewrite of init/runit. (And that is not necessarily a bad/useless thing, but there's of course years of development worth of functionality in other init- like software, so orderly has a long road ahead to catch up - if it wants to.)

<comment><USER4> Author here: I currently actually use it underneath runit to group processes that must live and die together. runit itself doesn't have good support for this sort of grouping.

I also use it for grouping stuff together while developing multiple servers that depend on eachother, it is nice to be able to ctrl-c all of them and restart them together in the right order.

</comment></comment></comment><comment><USER5> I had a recent brush with Daemontools in an embedded setting. Anyone who's messed with qmail back in the day knows who DJB is and what this super minimal thing is. It seems to be good at managing a pile of inter-related services, keeping them running as long as the electrons keep coming, but I don't see the tree concept, or dependency management, in them. They do one thing really well and really tiny.

[https://cr.yp.to/daemontools.html](https://cr.yp.to/daemontools.html)

<comment><USER6> One builds dependencies on top.

* [http://jdebp.uk./Softwares/nosh/guide/new-interfaces.html](http://jdebp.uk./Softwares/nosh/guide/new-interfaces.html)

* [http://jdebp.uk./Softwares/nosh/guide/commands/system-contro...](http://jdebp.uk./Softwares/nosh/guide/commands/system-control.xml)

* [http://jdebp.uk./FGA/daemontools-family.html](http://jdebp.uk./FGA/daemontools-family.html)

</comment></comment><comment><USER7> Where can I find information on how this system compares to other process managers like pm2 etc.?</comment>


How to Steal a River - <AUTHOR> https://nytimes.com/2017/03/01/magazine/sand-mining-india-how-to-steal-a-river.html <comment><USER2> I'm a conservationist who frequently visits Hacker News. I find it fascinating. I'm also very interested in the extent to which environmental and climate stories feature on here - my guess is that these issues are a real concern for this community. I only wish there was a Y Combinator for massively scalable environmental solutions. As it happens there is virtually no money for early stage environmental businesses or approaches (only growth capital). The money that is available is administered very unimagineatively by bureaucrats. I raise this only because I would be interested in the ideas of this community in getting around this problem - where frequently the benefits of value cannot be reaped by a VC.

<comment><USER3> I'm not sure about a bureaucratic approach, bureaucracy seems to be limited by a need to conserve the status quo. The more popular approach is a company like Tesla which seems to be on the verge achieving - or at least sparking - a huge victory over fossil fuels while realising investor returns.

The challenge is to identify a cleaner and cheaper way to do something and then disrupting the hell out of the existing field.

The guys attempting to grow meat in labs are set to disrupt things when their meat becomes cheaper than slash and burn burgers(it likely already is as the true cost of rainforest loss is externalised - rainforest loss to soya fields that is 70% fed to cattle amounts to the same thing: rainforest loss for meat).

Once they're done with meat maybe it is possible to culture high quality wood in a lab. They'd save the amazon rainforest and make themselves and their investors a ton of money.

But the patten is there, already laid out. The only role bureaucracy might play will be to get out of the way. To not impede.

<comment><USER4> > _But the patten is there, already laid out. The only role bureaucracy might > play will be to get out of the way. To not impede._

It has another potential role to play though: safeguarding the playing field. For each Tesla trying to make the world a better place, there's an Uber, fucking society over for profit. The role of bureaucracy should be to allow the former and prevent the latter.

<comment><USER5> I don't know if you can say that Uber has made the world a worse place. That requires at least a total ordering on Uber's biggest actions and probably quantification of the consequences.

If the advent of Uber has resulted in a billion drink deaths not happening but one person making $2 less per hour, it's clear. The other way around is clear too. But as it is right now, you can't assert that as is. You have to bring something more convincing to the table.

</comment></comment></comment></comment><comment><USER6> Several comments have mentioned that sand is not a renewable resource and the need for alternative building materials. Where I live in Hackney in London there has been a gradual increase in the number of buildings built using cross-laminated timber. It offers huge benefits over concrete, it is a renewable resource and much lighter than concrete. Despite expectations the buildings are still just as fire proof as concrete and can be constructed up to 10 storeys high. There are 23 such buildings either built or completed in Hackney.

<comment><USER7> If they started building so massively and anarchically with timber, it would likely be even worse. Illegal cutting, mud slides, complete destruction of rivers, massive building fires.

The place could turn into a desert.

You likely can't fix this with some simple technological measure. There are just too many people who want to improve their material standard of living. They have the tools and it's a tragedy of the commons from there on.

<comment><USER8> Sustainable timber production is a solved problem, opposing wood use in general (as opposed to specifically, when done using problematically sourced timber) is counterproductive.

Also, I recall reading that most old-growth forest clearance is to free up the land for agriculture, not primarily to produce timber, so timber buildings aren't causing this.

<comment><USER9> >>Sustainable timber production is a solved problem

At current demand levels, yes. But if we're talking about replacing concrete with timber, you're going to find it difficult to keep timber production sustainable, since it will have to massively increase to meet new demand.

</comment></comment></comment></comment><comment><USER10> Until this interesting video [1] by Tom Scott, I had never considered sand as a non-renewable resource. But now, it is clear that we now have one more resource that we might run out of.

[1] The World Is Slowly Running Out Of Sand - [https://www.youtube.com/watch?v=kMLYLcniXIc](https://www.youtube.com/watch?v=kMLYLcniXIc)

<comment><USER11> In the context of today, yeah, there are tons of resources that we're quickly plundering our way through. The stories mentioned by Tom Scott and the parent article are tragic.

But, big picture, nothing on this planet is "non-renewable". Sand, for example, can be manufactured. As can petroleum, coal, clean water, etc. In fact all those products can be produced from the waste of the materials they are replacing. We can chuck a bunch of plastics into a pressure chamber and, with enough energy, regenerate the original petroleum products.

And that's the real crux: energy. We don't make our own sand and fossil fuels because it would cost too much in energy. But if we had more abundant sources of energy, the cost would go down, and more manufactured materials would become viable.

Our crisis is not that we'll run out of resources. We have plenty. Our predicament is a lack of energy sources. We make up for it by consuming energy our planet has stored, in the form of fossil fuels and other so-called "non- renewables". The solution is to transition ourselves away from this handicap. We need to have more sustainable and abundant sources of energy. That pretty much amounts to solar, as there are no other truly sustainable sources of energy.

So the real solution has not much to do with using less "non-renewables" and more to do with improving our abundance of solar energy.

<comment><USER12> This is like the old adage: if you have enough money to solve a problem then it's not a problem.

If you have enough energy to make X, then you'll always have X.

But usually you don't.

<comment><USER11> Yes. I suppose my comment kind of comes off as saying something obvious. Obviously if we had infinite energy we wouldn't have any problems.

But really what I was trying to get at was that our focus, with respect to the environment, is perhaps in the wrong place. We focus so much on reducing use. Really our focus needs to be on how we can get _more_ energy.

It's like in a business. Don't focus on the cost centers, focus on the profit centers. How can we drive _more_ business rather than making the existing business more efficient. For a growing company that's usually the best advice.

So why, as a growing species, are we optimizing our energy usage? Screw that. Let's get more energy! Let's blanket the land with solar panels so we have enough "fuck off" energy to do whatever the hell we want. In particular, enough energy to get into space and build a Dyson sphere so we can get even more energy.

Imagine if we took all the money and time invested into optimizing energy usage, and instead had spent it on solar panels?

It's all really counter to public opinion. Environmentally conscious people love their LED lights. I do too. But I also love optimizing systems, and optimizing systems is often not what's smart for a business.

<comment><USER13> > But really what I was trying to get at was that our focus, with respect to > the environment, is perhaps in the wrong place. We focus so much on reducing > use. Really our focus needs to be on how we can get _more_ energy.

The article mentions, among other things, thieves who steal sand, sell it, and bribe police to look the other way. While that's the state of affairs, lowering the cost of energy is beside the point.

<comment><USER14> It is profitable for them to do that because the cost of energy is still too high.

<comment><USER13> No, it would be profitable for them regardless. You might live in some science fiction world where energy and automation were so abundant that manufacturing _sand_ from something other material and shipping it in made economic sense.

cost = energy-intensive manufacturing + lots of shipping

It wouldn't prevent this crime because it's never going to be as cheap as going to the river and filling up a truck.

cost = a short drive + a few bribes

Technology is absolutely not the solution to everything (although sometimes it helps a lot).

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Surreal to see it covered here. I have been frequenting Greater Noida (& the region on the expressway) for a decade & have seen the extent of transformation that has taken place there. The real estate boom almost ended in a whimper with unfinished construction sites and unsold condos/flats rotting away in an Indianized urban decay. The crime was so bad that it was unthinkable to move on that route after 6 PM. There have been improvements, with big names like ST Micro, Sapient, KPMG, Accenture renting offices in that area, however a bigger socioeconomic, positive impact is dampened because of inherent corruption, lobbying by real estate/sand mafia & bureaucracy.

</comment><comment><USER16> I recently was in the Greater Noida area for work.

I saw lots of unfinished or abandoned construction projects and massive pollution.

I also stayed at the golf club they mentioned in the article. That part would have been nice if not for the thick layer of smog that never dissipated the entire trip.

<comment><USER15> yep, nowadays it has become a staple of NCR. Things were quite different years back though.

</comment></comment><comment><USER17> Have you flew above where I live?

Given the number of planes I see in the sky and the data you did.

I live near Paris, and every time you will watch the rivers flowing nearby (may it be Seine or Oise) you will notice this weird patches from the sky near the loops of the rivers. It is/was sand harvesting.

It looks like this: [https://email@example.com,2.0684055...](https://email@example.com,2.0684055,13z/data=!3m1!1e3!4m2!3m1!1s0x47e6f4c72416d693:0x40b82c3688b34e0)

You will notice raw montain near montpellier a hole while approaching ORY from london in a place named cormeilles en parisis.

You may not notice but it may be insidiously happening near your place, everywhere in the world.

Even the desert (cf occidental sahara, UN claim vs Marocco), oceanic islands are targeted.

The law of thermodynamics are saying "any pure enough chemical entities are a resource", and the entropy lost will never be recovered without a way bigger energy than the one for harvesting them.

Thus the reasoning on fossil energy (Hubert's Peak) also applies for sand, water, potasse, alumine, iron ores, bitumes, absestos, helium, nitrogen, coal, gas, uranium....

Why no one cares?

Because there is an economical incentive to ignore the consequence of your actions: the lack of financial liability for the pollution/increase of entropy you are generating.

If you make your own compost and grow your vegetables (lucky us) you can build an intuition of what is wrong here.

But for the other one, our education makes it impossible to understand the slow cycles of resources. So, I bow.

</comment><comment><USER18> "All that was left was a question, one that haunts river communities all over India: Why would any village so willingly accept such paltry gains for certain catastrophe?"

Surely one answer is obvious: if one person didn't, their neighbours would and the disaster would still happen and still affect all the people who didn't participate.

<comment><USER19> Tragedy of the Commons meets a backward-S supply curve.

[https://www.reddit.com/r/dredmorbius/comments/53mcxn/backwar...](https://www.reddit.com/r/dredmorbius/comments/53mcxn/backward_s_shaped_supply_curves/)

Reminds me of the double-bind faced by oil and gas drillers against monopolistic transport (rail or pipeline), and the Rule of Capture.

</comment></comment><comment><USER19> That's an excellent story hiding under a too-cute headline, covering a whole slew of factors.

I see: short-termism, unintended consequences. A cost, price, value failure: the riverfront property owners charging Rs. 150 per truckload for transit to the river sand, and having to pay Rs. 2000 for water after the sand-mining depleted the acquifer.

There's the backward-S supply curve of those desperate for any income.

There's the attraction to liquid cash.

There are the problems of ineffective and toothless regulation and enforcement. Of corrupt businessmen (dying in duels and gunfights), and of an uncaring attitude.

Quite a few lessons to draw.

</comment><comment><USER20> AKA Sand Mafia in India [http://blogs.wsj.com/indiarealtime/2013/08/06/why- india-has-...](http://blogs.wsj.com/indiarealtime/2013/08/06/why-india-has-a- sand-mafia/)

</comment><comment><USER21> We're not going to run out of sand as long as we have rocks and power. Sand is routinely made by rock crushing. Here's a Youtube video from a company in China which makes the machinery for that.[1]

An interesting comment from a company that sells used cone crushers: "Do you want equipment that is simple in design, easy to trouble-shoot and repair, and built to last? Or do you want equipment that uses high technology such as electronic sensors, computers, control consoles, and designed for high production but short useful life?"[2]

[1] [https://www.youtube.com/watch?v=7gN7jcAx9Bg](https://www.youtube.com/watch?v=7gN7jcAx9Bg) [2] [http://www.usedconecrushers.com/Crushing__Plant_Design.php](http://www.usedconecrushers.com/Crushing__Plant_Design.php)

<comment><USER19> In fairness, you're somewhat missing the point.

First, the article states that there's sand which can be safely taken from rivers, if it's taken from the right places.

Secondly, costs and prices matter (and are profoundly determinative in economics, especially absent effective regulatory mechanisms). The competition is _already_ between opportunistic harvesting of sand from places in which it can result in tremendous harm, vs. managed and sustainable (even useful) dredging from elsewhere.

Thirdly, crushing rock itself takes energy (or transport to a location in which that energy is provided -- perhaps a river, or solar panels), plus capital equipment, which likely has a limited life (rock is tough stuff...). So: higher costs and complexity, and a much higher bar for entry, vs. locating a truck and a likely spot of riverbank from which to harvest sand.

Interesting refs for the used crushers, but I don't see cost or energy data.

</comment></comment><comment><USER22> Can't they dilute it with desert sand at least?</comment>


Yukihiro Matsumoto: "Ruby is designed for humans, not machines" - <AUTHOR> https://evrone.com/yukihiro-matsumoto-interview <comment><USER2> There's a lot of comments of the form "I tried getting into Ruby and it never clicked" that I want to respond to.

I think that if you're just writing a script to solve a math problem or automate a task, there isn't really a strong argument as to whether you should use Ruby, Python, bash any other high level language. You should probably use whatever you're most comfortable with.

But if you're making an application with a database, RoR is an extremely powerful tool. And this isn't just a case of Ruby having the best library (in the same way that Python has the best scientific computing library). It's a case of the library functionality and the language playing together really well.

Ruby statements look more like natural language statements than those in other languages. This is a really helpful design choice when you're building a crud application. In that context, you're not thinking about X, Y, -Log(X + Y) or whatever.

You're thinking about a _new customer_ , or whether some old customer is a _member?_ of some mailing list, etc

In a weird way, it's similar to how Haskell users love the fact that statements in Haskell are mathematical truths. In the case of logic programming this is a handy feature to have. In the case of writing the business logic of a CRUD app, it's handy if your statements look like natural language statements about the underlying real world objects whose representation you are reasoning about.

<comment><USER3> I think focusing on the syntax level is a bit superficial. While Ruby (especially in the context of RoR) lends itself very well to making DSLs and making abstractions, and thus writing superficially good looking, concise, easy to follow (on a syntax level) application code, it really breaks down when the abstraction does not work perfectly the way you want it.

If you have debugged a Rails app and tried to find where in the 10 level call stack a side effect is introduced, knowing that at each level a 'method_missing' could've changed things, and thus you're really looking at a non-linear call stack since each function call can branch out, you'll know the beautiful looking syntax is not free and in fact very costly.

And don't get me started on poorly documented (if any) CoC (black magic)..

<comment><USER4> CoC means many things. What do you use it to mean here?

<comment><USER3> Yeah, sorry for the abbreviation. I meant 'Convention over Configuration'

</comment></comment></comment></comment><comment><USER5> Strange takeaway in the title.

Mine are:

\- He regrets introducing threads. He now prefers other parallelism/concurrency paradigms and is possibly looking into introducing them in Ruby 3 (that part wasn't clear in the interview).

\- He regrets adding global variables.

\- He regrets not focusing on immutability primitives earlier.

\- He and the maintainers team look at Python, JavaScript and Elixir for inspiration.

\- He seems a bit disappointed that Ruby is mostly used for web development only and would be happy if it was used in research and AI.

\- He regrets not investing even a little effort in static typing earlier but is now working on an optional typing system where you choose to describe types in a separate file. (Reminds me of C/C++ and OCaml header files.)

I hope I'm not subconsciously emulating a sensationalistic journalist here but it doesn't seem he's very pleased with the current state of affairs. A lot of changes, indeed inspired from other languages, seem to be on their way to Ruby 3.

\---

I'm pretty indifferent to Ruby these days. I've worked 6 years with Rails to a moderate financial success back then but the problems were obvious almost from the start: too much magic and implied behaviour, too much global stuff changing below your feet, way too slow DB layer (it's known that your DB will respond in 2ms and ActiveRecord will proceed to waste 100+ ms on serialisation before and after), managing bigger projects becomes huge pain, and a number of others.

People just keep buying the promise of "but you get to make an MVP really quickly!". Yeah well, but I want to maintain it past that stage too.

Where I was doing with this is: Ruby is a very okay language and is very nice for sketching. It's readable, has libraries for a ton of stuff, and performs alright (especially without Rails). But I never found good use of it outside of small projects. Any serious business work becomes very painful to maintain and stay on top of for bigger projects. I'm aware there are practices that make it possible (Basecamp is a huge inspiration!) but I personally found them only half-working.

YMMV, of course.

<comment><USER6> Good points.

Personally, it's a bit puzzling to me why the ML community ran with Python and why there isn't a popular alternative for Ruby. It's very capable in terms of making DSLs.

My hunch is that the number-crunching libraries were better in Python (numpy etc).

<comment><USER5> I spoke with several data scientists and students in the last 2 years and the consensus was basically two central points:

1\. NumPy is really fast and has a lot of features. Even if they don't need all of them they feel more at ease knowing that they can use them should the need arise.

2\. Python is very familiar to them, their professors know it, they know it, it's easy to teach to new people in the team so everybody just goes with the flow.

As much as I think the bigger IT area is in a desperate need of innovation... I can actually agree with those two points. Tinkering should be left to us the programmers and sysadmins. Everybody else has a job to do and they cannot and won't spend a lot of time evaluating all tech possibilities.

That's okay. It's our job to tempt them with something irresistible. :)

<comment><USER7> But those are reasons that are valid _afterwards_. Why weren't the good numerical libraries developed for Ruby?

Maybe the watershed moment was when MIT switched from Scheme to Python? I don't know.

<comment><USER8> Ultimately, it's probably that Python is older and it's use in the English- speaking world is substantially older. Python is around 5 years older than Ruby and the first book about Ruby in English came 10 years after Python existed.

It's 1995. Python has been around for 5 years. Guido is working with the scientific community and adding better complex number, array, and matrix support to Python. Ruby has just started and everything is in Japanese. Scientists and Engineers at US universities and FFRDCs (Federally Funded R&D Centers) keep plugging away at Python for scientific purposes. Finally in late 2000, the first book about Ruby is published in English. Ruby is still pretty unknown. In 2005 Rails hits the scene and the English-speaking world notices Ruby. But this is 10 years after the scientific community starts investing in Python and 15 years after the Python language came out. By this time, the community had Numeric, numarray, and finally NumPy to unify their efforts.

Ultimately, Python's BDFL started working with the scientific/numeric community before Ruby existed. It would be 10-15 years after Python that Ruby would start making inroads in the English-speaking world and by that time there was already good numeric/scientific tools in Python. Scientific communities weren't looking to learn new languages for the sake of new languages. Many still just use MATLAB.

MIT hadn't switched to Python when a lot of this happened. I think it's more that Ruby wasn't widely known to exist until 2005 and was "brand new" to the English-speaking world then. Python had been plugging away at numerical libraries for a decade by then and NumPy (which had learned from previous numeric/scientific libraries) came out basically when Rails came out.

Once all these numeric libraries exist for Python, are you getting grad students excited to work on an open-source numeric system for Ruby? Are you getting FFRDCs interested in creating libraries for a language that's quite similar to Python without any significant advantage? How do you justify that work? How do you get people excited about it when the reaction of most users is going to be "we're already happy with what we've got"?

Rails burst onto the scene at a time when people were often unhappy with their tools. Rails was a breath of fresh air with clean separation of concerns and a lot of helpful stuff. This is back when Java meant XML sit-ups, C# was closed- source and this is before most of what the community knows today existed, Scala had just appeared, Python was still in the Plone/Zope era (remember when an object DB in Python seemed good?), PHP was pretty dominant but often ended up a mess and didn't have the same framework that Rails was offering. Rails offered something compelling and new which meant attention. Many other communities followed Rails - Django, .NET MVC, JAX-RS, etc. Still, Rails was there first and got a lot of mind-share.

Similarly, Python was there first in scientific/numeric computing and people haven't provided enough to compel people to move off it.

<comment><USER9> I love reading historical context around language use like this. Thanks for sharing.

</comment></comment></comment></comment></comment></comment><comment> vincent-toups I don't understand languages like Ruby and Perl and their supposed emphasis on "human design." My sense of what a human designed language would be is a lot more like Scheme: extremely simple, fundamental abstractions which, when composed, enable a variety of different strategies for solving problems.

Ruby, in contrast, seems like an absurdly complicated concatenation of weird features and strange syntax. When I look at Ruby my eyes glaze over with all the unnecessary syntactic doodads and peculiar abstractions. Why anyone would want to complicate their lives with all that silliness is beyond me.

And yet Scheme languishes and Ruby, for a time, anyway, burned brightly. I'm clearly the weird one.

<comment><USER10> >Ruby, in contrast, seems like an absurdly complicated concatenation of weird features and strange syntax

My experience is the precise opposite. Ruby seems more consistent and straightforward than any other non lisp language I've used. Ubiquitous blocks and "everything is an object" gets you very far.

Compare nested list comprehensions in python to chained map/select calls in Ruby:

lesson for lesson in [school.Lesson(downloaded) for downloaded in api.downloads()] if want(lesson)]

vs

api.downloads.map{|download| School.Lesson.new(download)}.select{|lesson| want(lesson)}

Or compare the many varied required ways to do something with an array in python vs Ruby:

len(array)

";".join(array)

array.append(x)

Vs

array.length

array.join(";")

array.append(x)

Genuinely confused what you refer to with "unnecessary syntactic doodads." Examples?

<comment><USER11> You answered your own question with your qualifier... "Ruby seems more consistent and straightforward than any other non lisp language I've used."

<comment><USER12> He has replied with actual code samples. Which is valuable.

</comment></comment></comment></comment><comment><USER13> I've been trying to get into Ruby for a new job and am finding it hard.

Not being designed for machines is right - a lot of the IDEs seem bad and can't even figure out where your methods come from. I don't know how the interpreter manages to run it. Multiply the problem by 10 once you add rails and all the methods it generates.

It makes for a good, rapidly developed monolith but most places I've worked in recent times are moving to services and micro services and it doesn't seem cut out for that.

<comment><USER14> I'm in the same boat. I'm coming up to speed on a very large, 5 year old monolith RoR codebase.

I fucking hate the thing.

I've done quite a bit of web dev across a pretty large variety of languages (c/c++/c#/php/js/golang/other).

They all have rough edges, but never in my career have I been more frustrated than when dealing with Ruby on Rails.

The tooling is... the best I can call it is bad. Simple things like jump to definition just don't work, basically anywhere, autocomplete is non-existent. RubyMine is the closest to functional, but it's still MILES away from good.

Non of that alone is a deal breaker - I've written sites in plain old notepad or gedit, but when languages have bad tooling, I expect good documentation. Rails is off in la-la magic land though. Docs are hard to find and inconsistent. I'll frequently find documentation that contradicts itself (ex: Are middleware "Set-Cookie" headers delimited by a comma, or returned as an array? Ans - Trick question, the documentation says both in different places, but it's actually a newline, which isn't documented fucking anywhere.)

Trying to just figure out where a method definition lives is needlessly tiring. I asked a long time dev at the company how he finds the source for methods that are magically pulled in by rails. His answer: "I do a global search for "def [name]" and if that doesn't find it, I give up and ask the development slack channel". Personally, I find that mind-boggling.

And honestly, I guess most of my frustration isn't really Ruby. It's Rails. I don't love that Ruby seems to encourage the "make it a dsl!" type programmer, but by itself there are good times/places for that. Rails though? It just doesn't scale for humans.

Rails feels like it started off with a solid idea - Don't worry about the boilerplate, just write productive code, we'll handle the magic. And that works great... up to a point. But that point was years back. Now the whole ecosystem has grown to the point where I HAVE to understand at least some of the magic, but because they didn't want you to see it, it's really, REALLY hard to get good answers about how/where all the various bits play together. Instead you chase outdated docs, bad stack overflow answers, and shitty forum posts.

I came on board pretty excited to pick up Ruby on Rails. A year in and I'm pretty convinced that I'll recommend basically ANY other framework and toolset.

<comment><USER13> All so incredibly relatable... thank you for sharing your experience.

I have pretty much 1:1 the same struggle and it was (is?) starting to knock my confidence - wondering if I'm just a bad developer for not "getting" it.

I often put off development tasks because I know it will all move at a snails pace trying to drudge through endless magic, having no idea where any of it comes from, getting very little back from Google, and giving up.

</comment></comment></comment><comment><USER15> "Ruby is designed for programmers, not end users"

It's not machines who care about performance. It's the person who has to use the program written. It may sound gentle and altruistic, but when you actually think about it, putting "humans" first is actually an incredibly self-serving sentiment.

<comment><USER16> There is already an ideal programming language for computers. It's bytecode. All high level languages after built for people, not computers, to make it reasonable for us to collaborate and maintain our own code. The computer itself doesn't care for anything beyond 1s and 0s.

<comment><USER15> And computers are built for people, to make it reasonable for us to collaborate and maintain our own (non-programming) work.

Dismissing performance concerns because you're designing a language "for humans" is actually glossing over a quite large number of other "humans" (i.e. non-programmers) who do have a stake in the choice, but not so much say in it besides "why is my computer so slow lately". Well, it's slow because you thought type checking is for know-it-all ivory-tower academics and pedantic asshole compilers, so you chose JavaScript (or whatever "forgiving" language is in vogue these days; the OP is about Ruby, but it doesn't really matter), and so the user has to wait until the JS engine finishes JITting your code over and over again to infer type information that should have been available at compile time in the first place. Rinse and repeat for each app, and now they have to replace their laptop every few years to catch up with ever- growing (for no good reason!) RAM requirements.

Claiming that a programming language is "designed for humans" much too often amounts to saying "my (programmer's) convenience and satisfaction is more important than yours (user's)". And that is an _incredibly_ arrogant thing to say, as superficially gentle as it may seem at first glance.

I'm not arguing against high-level languages; I'm arguing against disregarding performance in the name of programmer convenience. It's quite possible to design a high-level language in a manner that doesn't stand in the way of making its implementations performant. There are some recent developments on that front.

But if you ignore them, then it's not the "machine's" resources that you're wasting. It's the _user 's_ resources.

</comment></comment></comment><comment><USER17> Reminds me of _' 'Programs are meant to be read by humans and only incidentally for computers to execute''_ from Structure And Interpretation Of Computer Programs.

What always gets me about that quote is that's it's obviously false. There are exceptions (such as space shuttle controls), but most software that's ''important'' is important because of how much it's run \--Firefox is run a whole lot more than it is read-- and so this Incidental Execution stuff is nonsense.

Performance and Readability are both important goals. Most of the time they're not even opposed as to justify pitching them against one another like this.

</comment><comment><AUTHOR> We're thrilled that our good friend Yukihiro Matsumoto, creator of the Ruby programming language, has been able to join us at RubyRussia 2019 as a speaker for the second time, having previously spoken three years ago at RubyRussia 2016.

In the time that we've been holding the conference — now more than ten years — Ruby has undergone a great deal of evolution, and Evrone has grown and developed alongside it.

Grigory Petrov, Developer Relations at Evrone, sat down with Mr Matsumoto to hear from him first-hand about being a star, the philosophy behind Ruby's design and evolution, and a little about Japanese life and culture.

</comment><comment><USER18> Honestly, I never could get into the Ruby language. I always kept making mistakes with the syntax and ended up gravitating towards python and relearning JavaScript

<comment><USER19> Same. I always felt that Python was actually designed for humans and that Ruby had an incomprehensible syntax.

<comment><USER20> I never did much with Ruby beyond toy problems, but I was impressed by the lengths the language goes to to make it convenient to express what you want to do.

There's one syntax for half-open ranges and another syntax for closed ranges.

You can index an array any number of different ways: "get me the 5th element". "Get me the element three back from the end". "Get me elements 5 through 8 (inclusive)". "Get me 0 through 6 (exclusive)". "Get me the 3-length subarray starting at index 2".

A hash table returns nil by default when you access a key that isn't stored. But you can change the default value as a property of the table itself. Users now don't need to remember to supply their own default value when they're looking in the hash table. Even more, you can specify a function that gets called when a nonexistent key is accessed, to do whatever is appropriate.

All of those are great things. It's easy to translate your algorithm that says "take a stretch of three elements starting from i" into an access that looks like array[i..i+2]. But the semantics of your algorithm start slipping away as you make adjustments like that. If what you're doing is taking substretches of 3 elements each, there's a gain from being able to express it as array[i, 3], as semantically distinct from taking a substretch between two independent bounds that happen to be i and i+2.

But the flip side of this is that if you're not regularly immersed in the language, it's really easy to lose track of precisely which bit of syntax does what.

</comment></comment></comment><comment><USER21> Dear everyone crapping on Ruby (and esp. Rails) in this thread (and every other time this comes up),

If you don't like Ruby or Rails, that's okay!

No, really. You can use something else. You won't hurt our feelings! Programming languages and their frameworks can actually be a preference, not a moral issue.

We're here because we like it, and it's totally cool that you don't! Please use what you love; we are, and we know how powerful that can be.

Cheers, — Every Ruby Developer

</comment><comment><USER22> Shit, he should have considered the human cost of method_missing.

Yes, I am serious, it's a massive productivity drain. You encounter methods that you can't google for, so your grep game better be good to get work done (grep for a portion of the name, and then method_missing itself if that fails). An IDE is useless in this case and your performance goes out the window. It's much better to dynamically generate a finite number of methods you can see when inspecting objects.... I suspect those would jit better, too.

Oh, you want to access the call stack on your server to figure out where that frame is? Jokes on you, ruby has no remote debugging mechanism aside from a core dump or building your own heap inspection access.

Dang, why was this flagged?

</comment><comment><USER23> And that's why it relatively slow compared to e.g. C — which is designed for machines, not humans.

<comment><USER24> Replace ruby with crystal, and this comment can be removed.

<comment><USER25> Crystal is not Ruby, nor is it anywhere near as fast as C.

<comment><USER26> Really? Benchmarks I've seen put it in the same ballpark

</comment></comment></comment></comment><comment><USER27> Ruby is truly nice, I just wish I had the option for static typing built into the language, as a human I prefer it because then IDE support is much better for any refactor, etc and getting to maintain other people code.

<comment><USER28> You're not alone. Stripe has been working on adding types to Ruby with their static type checker, Sorbet: [https://sorbet.org/](https://sorbet.org/). This seems to have a bit of momentum at this point. Assuming it continues in popularity I'm excited to see how this helps to improve Ruby work in an IDE.

<comment><USER27> Looks interesting! will have a look.

</comment></comment></comment><comment><USER29> I was a RoR developer for two years and immensely enjoyed coding in Ruby, well technically, RoR(Ruby on Rails). It was in a startup and features were being developed at a rapid pace and it really felt like the right choice. But I also noticed that as companies grow they have problems with the maintenance of the code as well as the performance like twitter moving away.

</comment><comment><USER30> I'm seriously not able to distinguish how many of these comments are about Ruby and how many are about Ruby on Rails (RoR). From the very beginning Ruby's popularity and criticism have hinged on RoR. And most people tend to conflate the two completely.

Personally, I love Ruby but don't like RoR. RoR seems to bloated to me. Of course it does many things. But very rarely have I come across projects which require all those things. And even then, I'm quite sure, we wouldn't be able to use all that RoR has to offer.

For many, many, years now, my stack has been Roda / Sinatra for routing and Sequel for DB access. And whenever, we've come across some requirement which needs heavy lifting, there are enough Ruby gems which do that without tying you up with the RoR framework.

</comment><comment><USER31> Kind of offtopic: I did some Ruby and I find some of the conventions really confusing; for example, the lack of "()" when calling a method. You never know if you're accessing a property of calling a method until you grep the code. Am I the only one who feels this?

<comment> ben-schaaf I used to find this odd as well, but that feeling came from a misunderstanding of what a "property" is. When you use `attr_reader :foo` what you're actually doing is calling a method that defines a method on the class for accessing `foo`. `a.foo` is not accessing a property, it's calling a method. `a.foo = 2` is not writing to a property, it's calling a method called `foo=`. The "()" can be left out because it's never ambiguous whether you're calling a method, because you're always calling a method.

<comment><USER32> I remember loving this when I learned Ruby. There's a certain elegance to it.

However, I'd say for practical purposes, it still leaves me with the problem that in my day to day coding I'm left with the same ambiguity. I don't know if I'm calling a simple-assignment auto-generated method that is setting a property, or a method that does all sorts of stuff under the hood.

While I'm still fond of Ruby, I've come to prefer less ambiguity. I like to be able to see at the calling site whether what I'm doing is calling a method or setting a property, and parentheses are a great way to signal that.

As an aside, one thing I didn't like about Elixir was that it also made parentheses optional. Once I realized _why_ this was necessary, and once the formatter was added and enforced parentheses as a default, it stopped being a problem. Still, every language I've used where they're optional have caused weird little problems that never seemed to be outweighed by the convenience (CoffeeScript comes to mind).

But all that said, it's not too high on my list of things to hate on :).

<comment><USER33> > I like to be able to see at the calling site whether what I'm doing is > calling a method or setting a property

In Ruby, as is also true in many languages that have a syntactic distinction, setting a property is always ultimately calling a method, so the distinction is illusory. What you may want is a purity guarantee (well, that getters are pure and than setters have no effects except on the state specifically backing the property, but the latter gets complicated to apply to nontrivial properties), but most languages that let you distinguish whether properties or methods are exposed in an API don't provide a that kind of guarantee with properties, either, just more boilerplate code to implement them.

And the whole point of properties over exposed data members is to abstract behavior so that implementation changes don't change APIs.

<comment><USER34> Even when it's not enforced by the language, it can be something enforced as part of the coding style by the team - that Foo vs GetFoo() indicates presence of side effects, or potentially expensive computation.</comment></comment></comment></comment></comment>


WWU: Computer science department needs to step up to the future - <AUTHOR> http://www.geekwire.com/2011/western-washington-provost-were-respect-computer-science-department

<comment><USER2> I smell politics. This is the university equivalent of how municipalities cut police, fire, and teachers first, regardless of whether they are the actual budget problem. It's designed to get people screaming and get their budget restored so they don't have to make any cuts.

Barring sudden changes in the economy, though, this probably won't work to avoid cuts from the legislature. There's a lot of ways this could play out. I suppose my real point is to look to the larger picture; this isn't occurring in isolation and I think there's a great deal more going on here than just the first-order story.

</comment><comment><USER3> There are valid points on both sides of the debate. It's never a time to cut a solid computer science department. The thought is ridiculous. That being said, WWU is absolutely not on the same level as (UW) University of Washington (for Computer Science and Engineering). I'm sure there's a lot of great talent at WWU (as there is at any institution) but much blame _does_ fall on the University for not doing enough outreach to industry and academia to improve the quality of the department and reputation of students. If you want your University to thrive, push _all_ you have into improving your CSE department, instead of cutting it. WWU, this is your chance to either make something of yourself, or crawl into a hole and die as a liberal arts ghetto, contributing no _real_ value to society. (edited to cut down the snark)

</comment><comment><USER4> _Riordan said the computer science department could be doing more... in terms of forging ties with technology leaders..._

It's funny, WWU CS has a repuation for being a very pro-Microsoft department. Not sure what's really going on here.

</comment><comment><USER5> I'd have to guess WWU is disappointed its CS department isn't self sustaining from grant money so this is a kick in the pants to the faculty. It is my impression, which could be wrong, that most academic computer science is money making, attracting more research grant money than it has students and faculty to complete. Better CS departments draw huge funds to build its own buildings and name them after the famous alumnus who coughed up the most cash. The fact this CS department is dependent on the school's budget and not vice versa is telling something isn't right.</comment>


RediSearch – Redis Powered Search Engine - <AUTHOR> https://oss.redislabs.com/redisearch/ <comment><USER2> From an information retrieval perspective, this is embarrassing, and the benchmarks aren't close to being apples and oranges—it's more like apples and Mack trucks. The linked benchmark is for a toy data set of 5.6GB, which we all know Redis will store in RAM; yet they don't say whether they set "index.storage.type: memory" on ElasticSearch (guessing they didn't).

At the same time, ElasticSearch/Lucene puts considerable effort into analysis at both indexing time and querying time that goes into ranking the search results. RediSearch's ranking is "user provided"—how does that work exactly? What does that even mean? Ranking is at the heart of information retrieval—of what value is it to allow for 4x more queries to be run on a cluster when the result sets are terrible?

ElasticSearch could be better at scaling up on nodes to handle more query operations on a given cluster. However, if you care about full text search, this won't do the job.

<comment><USER3> It's amazing that you reached the conclusion that it won't do the job after reading a benchmark for 2 minutes!

The benchmarks are quite realistic (5m docs, 25m products) for document search, and the settings reflect real usage. There is no "memory" storage type for ES, it has "mmapfs" which the documentation explicitly says is dangerous and might be removed. The default `hybridfs` already has the ability to use memory mapped files as an optimization. Forcing mmap would actually make it an unrealistic benchmark.

> ElasticSearch could be better at scaling up on nodes to handle more query > operations on a given cluster

Based on? They are both running with 5 shards for the benchmark.

<comment><USER4> Well, you have MemoryIndex, which is different proposition (it's used for the percolate feature). I can get that redis search can be faster than Lucene based search engines, but actually running the search is the easiest part, there's a lot of thought and effort on making a decent search engine, and the article doesn't tell me if I can get facets, order by any field, make both fulltext and geospatial queries, and many more things important when you make a search engine.

I rememeber long ago when SQL Server included full text, we thought that our time fiddling with lucene.net had become to an end, but when we tried it failed miserably because the full text engine and the relational one where like 2 different parts, and if you wanted to make a full text search and order by a numeric field, it would have to make a temporal table with all the results of the full text and order that. Those are the things tha lucene solves so well, that I'm reticent to think that redis search has managed to make them ok at the first try. So, not apples to oranges benchmark, but if you have already redis and the search capabilities that you want to add are fullfiled by redis search, it can be a good product.

<comment><USER5> > I'm reticent to think that redis search has managed to make them ok at the > first try.

Your example doesn't really match the reality of Redis. Modules in Redis can bring their own data types and algorithms and don't need to resort to the same kind of hack you mentioned. The ecosystem inside Redis is designed for modularity and clear, minimalistic interfaces between components.

RediSearch might not be perfect, but any problem will stem from a different set of causes, not because it tries to "emulate" a data model.

The whole point of Redis is not having to emulate data types and algorithms.

<comment><USER6> > Modules in Redis can bring their own data types and algorithms and don't > need to resort to the same kind of hack you mentioned.

To emphasize this:

One thing people might misunderstand about Redis is that Redis extension developers _aren 't_ expected to fit their data structures to the needs of a storage-engine. It's not like Cassandra, where your data structures must 'boil down' to key-value pairs; nor is it like an RDBMS, where your data structures must 'boil down' to tuple-sets; nor like a graph DBMS, where your data structures must 'boil down' to EAV triples. Redis data structures aren't "implemented in terms of" any other simpler 'canonical' data structure.

Instead, when you look at something like Redis Streams or the Redis Graph module, the whole complex data structure for each stream/graph is a big opaque in-memory thing dangling off a _single_ key. It doesn't need to be broken down into parts "legible" to Redis. It can just be what it is. "Objects" in the Redis keyspace (the things keys are holding) can't hold pointers to one- another, so the core Redis commands can blindly manipulate them (e.g. deallocate them.) For everything else, you go through the module's commands, which walk the internals of the data-structure as what it is: a plain-old in- memory C struct, defined in your module's header files.

The canonical representation of a data structure in the Redis AOF (WAL log) is just the sequence of commands used to build it; not the data-structure itself. So, as a module developer, to get AOF persistence of your module's types, you don't need to do a thing, other than ensuring that your module's commands are deterministic.

You _do_ need to do a bit of work to get your module's types to serialize into Redis RDB snapshots. But it's completely up to you how to define your types' serializations. Redis just provides an API for writing and reading scalar types from the RDB file stream. How your module uses them to save/load a value of a type is up to you. (And you can just skip this if you like; RDB persistence is used far less often than AOF persistence, so support for RDB persistence it's not even a highly-demanded feature for modules. If you don't bother, then loading your module just disables RDB persistence.)

<comment><USER5> Thank you, exactly what I was meaning to say.

</comment></comment></comment></comment></comment></comment><comment><USER7> I'm trying to imagine why I would not use existing, mature search tech (Solr/Elastic) with existing mindshare I can hire.

Why would I pay to be off on an island very locked into a proprietary search tech? Even if it is a little faster with the redis brand attached to it? It doesn't seem quite turnkey as Algolia or as deeply featured like Lucidworks Fusion...

Maybe I just don't get the pitch yet...

<comment><USER8> You don't have to pay for it. The original license was completely Free As In Speech and even today it costs only for the distributed version. There is even a fork of it preserving the original license.

It attaches to existing redis hash keys and allows you to add an index to your already existing data for example.

Disclaimer - I'm the original author of RediSearch (started in 2016), before the switch to a non FOSS license. I'm not affiliated with it anymore and haven't followed its development for the past couple of years. But I can tell you that our first users were people who couldn't get ES working for their workloads, or had good redis infrastructure in place already and were able to utilize it for this as well.

<comment><USER7> Awesome, this is really helpful to understand what the value prop is!

The non FOSS licensing mixed with comments about needing an "Enterprise" account confused me TBH...

<comment><USER8> What I was aiming for originally beyond speed, was a simple API and an intuitive query language ([https://oss.redislabs.com/redisearch/Query_Syntax/](https://oss.redislabs.com/redisearch/Query_Syntax/)) that scales from simple textual queries to structured queries, and a big emphasis on real time incremental indexing as the core features. There is no batch vs. incremental indexing - you feed it a document and it's searchable immediately, which I thought was very important for an in memory database (it comes at the cost of avoiding some nifty index compression techniques, the compression is pretty straightforward).

But TBH it started as a demo dogfooding project for the redis module system - something to demonstrate how powerful the API is, and at the same time test it, find bugs and design problems with it, and gather real developer asks. It became the reference project for the modules API and a lot of the module system's features were designed to accommodate it (most notably async execution of slow commands).

But then a few people started using it (which all of the sudden gave redsiearch itself user asks and testing and all that), requesting features and being happy with it when these features got implemented, and it slowly started to be a thing, with people even contributing code. Then we wrote the distributed version requested by enterprise users, and it became a product, which is now developed by a team. I left it a bit over two years ago.

</comment></comment></comment></comment><comment><USER9> I think it's not terrible - redis itself is just brilant ! But wow a search- redis ? I think they have a lotttt of ground to make up to compete in the search space. The amount of options/analysis/tokenization/other-search features you get out the box from anything Lucene based (solr,elastic) is just staggering.

<comment><USER10> Did you check the redisearch docs? it covers all the features you mentioned see: [https://oss.redislabs.com/redisearch/#primary_features](https://oss.redislabs.com/redisearch/#primary_features)

<comment><USER9> Damn my bad ! I should have checked first ! Wow I didn't realise they that feature-complete !

</comment></comment></comment><comment><USER11> Nice work, it's pretty awesome to be able to plug a search engine as easily as adding a plugin. I just have one question about the recently published benchmarks, are the latency based on the two-word search "hello world"?

</comment><comment><USER12> I was under the impression that Redis was intended for short-lived data, but a full text search suggests otherwise. Are people using Redis, with persisted storage, as their database?

<comment><USER13> Yes, in a strange way: I use Stream-Framework by GetStream (curiously moved away from it to GS today).

The backend storage for stream activities is Redis. It's lightweight and fast enough for most use cases.

Sure, not a full on database use case... But it is data that is persisted.

</comment></comment><comment><USER14> I haven't followed Redis Modules so far, what's the best way to start the road towards prod usage if otherwise I rely on the AWS ElastiCache version?

<comment><USER15> I haven't used RediSearch myself for the simple reason that you need to pay for a Redis Enterprise Licence in order to use it.

[https://redislabs.com/redis-enterprise-cloud/compare- us/](https://redislabs.com/redis-enterprise-cloud/compare-us/)

[https://redislabs.com/redis-enterprise- cloud/pricing/](https://redislabs.com/redis-enterprise-cloud/pricing/)

thats not particularly expensive, but a dealbreaker for hobby project on which i would want to use it. sadly, there is no non-commercial licence either.

<comment><USER14> I have no problem paying for it, but what I miss is a clear recommendation how to get started if you have the rather common case of your own AWS Account using ElastiCache.

If I buy into the Redis Enterprise Cloud, what are it's preferred usage scenarios, how do I secure the connection properly, etc. etc. etc.

This is just shoving a buy button in my face and I have no idea how to decide if what I'm buying is actually feasible for me, for example from a compliance pov.

<comment><USER10> Redis Cloud Pro can run in your VPC.

<comment><USER14> Great. How? Is that recommended? What kind of user rights I need to give redis to manage that instance in my vpc? How to lock that down to the minimum without breaking it? In that configuration, what risks do I have to control for otherwise? ...

<comment><USER16> All these details should be covered by [https://docs.redislabs.com/5.2/rv/how- to/creating-aws-user-r...](https://docs.redislabs.com/5.2/rv/how-to/creating- aws-user-redis-enterprise-vpc/)

</comment></comment></comment></comment></comment></comment><comment><USER17> Does RediSearch require that my dataset fits within RAM? I couldn't find that information.

<comment><USER18> Yes. Unless you use something like Redis Flash or KeyDB that store data in flash too. You should check the data structures and functions being done on them, if it can be efficient to also work with disk. Ex: increment in redis is fast, but in another db may end up as Rocksdb get+update which is not.

</comment></comment><comment><USER19> Are we pronouncing this Ready-Search, Redis-Search, or Redis-urch? Personally I vote Ready Search but I'm also in the Postgres-Sequel camp :)

<comment><USER20> ree-dih-search

EDIT: reh-dih-search, since the "re" is pronounced like in "red" [0] [https://redis.io/topics/faq](https://redis.io/topics/faq)

<comment><USER21> The icon is red so I call it red-is

<comment><USER20> You're right, according to the last question in their FAQ [0]. Updated my original comment.

[0] [https://redis.io/topics/faq](https://redis.io/topics/faq)

</comment></comment></comment></comment><comment><USER22> I wish Redis would focus a bit more on the standard clustering options. Cluster has some real drawbacks and Sentinel is about the most brittle service I've seen. We run all of our peer discovery for Squawk[1] on Redis but recently made the switch to KeyDB and have been thrilled with the resiliency. We're definitely not Redis experts so I'm sure we're doing some things wrong, but for anyone else looking for a rock solid HA solution, I highly recommend it.

[1] Squawk - Walkie Talkie for Teams [https://www.squawk.to](https://www.squawk.to)

</comment><comment><USER23> > Cluster Support and Commercial Version: RediSearch has a distributed cluster > version that can scale to billions of documents and hundreds of servers. > However, it is only available as part of Redis Labs Enterprise.

This is a bummer because high availability is really important for many search uses cases. For e.g. think about e-commerce where search literally prints money.

EDIT: it seems like the open source version supports a read-only replica for failover but my overall thoughts about not crippling/compromising the clustering story in open source version still stands.

While I understand the rationale for this move, unfortunately not having HA in a non-starter.

I had a similar temptation when open-sourcing Typesense ([https://github.com/typesense/typesense](https://github.com/typesense/typesense)) and thought long and hard about keeping clustering as part of a closed source commercial edition but eventually decided against it. I understand that commercialising certain features is a necessarily evil and trade-offs must be made. However, I think there are still many avenues to do that without keeping clustering closed source.

Apart from that, I am happy to see the search space heating up with a lot more interesting options.

Disclosure: I have stakes in the open source search eco-system ([https://github.com/typesense/typesense](https://github.com/typesense/typesense)) but a genuine Redis fan.

<comment><USER10> HA is available and doesn't require Redis Labs Enterprise, the comment above refer to what is called "Redis Cluster" meaning sharding

<comment><USER23> Thanks, it seems like read-only replication is supported. I've updated my comment.

</comment></comment></comment><comment><USER24> What is this "source available" thing in the first paragraph? You can see our source but can't touch it?

<comment><USER25> You can read about their licenses here: [https://redislabs.com/legal/licenses/](https://redislabs.com/legal/licenses/)

      Redis Modules created by Redis Labs (e.g. RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom) are licensed under the Redis Source Available License (RSAL).

Here is their RSAL license: [https://redislabs.com/wp- content/uploads/2019/09/redis-sourc...](https://redislabs.com/wp- content/uploads/2019/09/redis-source-available-license.pdf)

<comment><USER26> Basically you can't use it for a database product, caching engine, stream processing engine, search engine, indexing engine or ML/DL/AI serving engine. I feel just about any web app does at least one of these things.

<comment><USER15> the correct way to phrase it would be: you cannot use it unless you pay for a licence.

its source is only available so you can look at the implementation if you wish to explore the internals.

<comment><USER26> I was referring to the Redis Source Available License, I am sure if you pay enough you can modify the source too.

<comment><USER10> you can modify even if you don't pay as long as you application is not a "Database Product"

<comment><USER24> What application is not a "Database Product", one way or another?

<comment><USER27> If you resell Redis that's a DB product. If you sell widgets and use Redis for search it's not. There's obviously some grey areas but I thought it was relatively clear?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28> Good for them on building a business around redis.

That said, fuck paying for some bolt-on approximation of a search engine with no real durability. I'll use elastic or solr.

They're free, and have massive communities and user-bases. Issues are surfaced quickly. Compatibility is a priority. And all the other benefits of network effects.

<comment><USER29> >fuck paying for some bolt-on approximation of a search engine with no real durability

Presumably you're storing your data elsewhere and pumping it into Redis for search

</comment></comment><comment><USER30> Any advantages over Elasticsearch?

EDIT: I did read the article, though I overlooked the link to comparison with Elasticsearch.

<comment><USER31> Did you even read the article? There's a link in there whith benchmarks it against elasticsearch. Read the conclusion on: [https://redislabs.com/blog/search-benchmarking-redisearch- vs...](https://redislabs.com/blog/search-benchmarking-redisearch-vs- elasticsearch/)

<comment><USER32> I mean speed is nice, but it is not the primary thing I am concerned with in a search engine, as long as it is acceptable it is not in the list of requirements - things that would be on my list - not necessarily in this order but close

1\. What human languages does it support.

2\. In these human languages how does stemming and decompounding work in your implementation.

3\. how is word importance determined in your index - TF-IDF? other algorithm? Are least important words automatically dropped from queries?

4\. Do you have ability to rank on both the stemmed/decompounded query/results and exact matches? So something like raw field access.

5\. Can I create my own semantics - I remember seeing a post on here recently where someone had created a search engine (in Rust I think) that was faster than ElasticSearch but from what I could see you couldn't create your own field names so you were stuck searching in title, description, body, creationDate and a couple other fields which really decreases the usefulness.

I mean these are the things that right away spring to mind to ask about when someone tells me they have a new search engine, and when they show me look at my speed benchmarks I'm thinking "what am I supposed to do with this?"

on edit: formatting

on second edit: So I guess as in most things I am interested in how the product actually fulfills what should be its primary functionality, so how does the search engine function as a search engine, I suppose my questions could be answered with quick - our search engine has feature parity with ElasticSearch / Solr where features A, B, and C are concerned - features D and E will be supported in the future.

<comment><USER10> The question in general is "Yes, RediSearch supports all of these features". You can read about it all in the docs [https://redisearch.io](https://redisearch.io)

I also pointed bellow to the specific relevant area in the docs.

> 1\. What human languages does it support. > 2\. In these human languages how > does stemming and decompounding work in your implementation.

[https://oss.redislabs.com/redisearch/Stemming/](https://oss.redislabs.com/redisearch/Stemming/)

> 3\. how is word importance determined in your index - TF-IDF? other > algorithm? Are least important words automatically dropped from queries? > >4\. Do you have ability to rank on both the stemmed/decompounded > query/results and exact matches? So something like raw field access.

[https://oss.redislabs.com/redisearch/Overview/](https://oss.redislabs.com/redisearch/Overview/)

<comment><USER32> Thanks, I guess I was more taken with answering on the link to benchmarks on the sub-thread which seemed not what I would consider pertinent. That said everything looks pretty nice.

</comment></comment></comment></comment></comment><comment><USER33> Wow didn't take long to lose direction after Antirez's departure.

<comment><USER34> How is this multiple years old _add-on module_ a loss of direction for Redis or Redislabs (who always have done exactly that: building things _around_ redis) after the departure of Antirez, who wasn't in charge of setting direction at Redislabs?

</comment></comment><comment><USER35> I am a bit dated but I dont have a high confidence of redis with persistent storage such as a typical ACID database. How does this fit into an architecture?

It seems painful to have to write code to reload the search db if it fails.

How long is redis search going to exist and be supported?

If this is delivered as a module, what guarantees do I have that the module interface wont break and leave redis search in a broken state?

<comment><USER36> > but I dont have a high confidence of redis with persistent storage

Anything that kills redis persistence is also going to corrupt whatever else database you'd have used instead. In fact redis persistence is such a simple model, I'd be surprised if most RDBMs weren't more likely to corrupt data.

I've been running a redis database since 2013 and haven't had a case of lost data once and never even had to restore from a backup.</comment></comment>


Clojure on Coils - <AUTHOR> http://coils.cc/coils/index.html

<comment><USER2> Hi author here again. You are the second person to have posted this to hacker news in the last week. To be honest I don't expect Coils to any traction as it is just a framework I built for myself, and it only supports databases instead of NoSql systems. But I am happy someone likes it! Thanks</comment>


Simple Filemanager (Jquery + PHP + Bootstrap) - <AUTHOR> https://github.com/W4RH4WK/MinimalFileManager

<comment><USER2> Very cool, at least from the code. Is there a demo page?</comment>


Line.do - Narrate life in your own way - <AUTHOR> http://line.do

<comment><USER2> Facebook login only: fail</comment>


The Best Pen (2015) - <AUTHOR> http://thewirecutter.com/reviews/the-best-pen/ <comment><USER3> This article focuses on ink flow, which I understand as important, but my favorite pen is my favorite because of something completely different - <USER2> body of the pen.

Personally, I do not like what I refer to as "fat" pens. My favorite pen is a slim model ball point made years ago by Paper Mate. They no longer make it. At its widest, it is not much bigger than a standard number 2 pencil (it's narrower than a Fisher Space Pen). All of the larger, "ergonomic" pens I have ever held remind me of the twice as thick pencils used in pre-school and kindergarten when I didn't have the fine motor skills to hold the smaller pencil - maybe okay back then, but not what I want now.

<comment><USER4> Absolutely!

Hmmm, I can get cheap ball point pens (round Bic Sticks), and I've been able to find narrow fountain pens, but I gather trying to find good ones in-between these extremes is a lost cause?

<comment><USER3> I have looked in what I believe to be the step above the Bic pens - 5-10 USD range - and it has been harder and harder to find anything I like.

</comment></comment></comment><comment><USER5> I personally don't like the uni-ball Jetstream very much. Here's where I'm coming from:

I'm a fountain pen aficionado, but I have various troubles with fountain pens that mean it's not practical for me to carry them around. (In particular, if I insist on carrying them upright in a pocket or the pen-loop of a notebook or messenger bag, somehow I always end up breaking off the clip. But if I just dump them in a pocket of a bag, then they're not upright, and they leak into the cap.) So what I want is a pen that performs more or less like a fountain pen, but without the inconveniences. In particular, it needs to write with a smooth, wet line, and never skip or require pressure to write, and it needs to not leak if just dumped in a bag.

The Jetstream does not meet my needs because it writes like a ballpoint. It puts out a thin, dry line, and requires some pressure to write.

The best pen I've found for my needs is also from uni-ball, however. The uni- ball Vision Elite is the rollerball pen that comes closest to the fountain pen experience for me. After that, the next choices would be either a group of gel pens: the uni-ball Signo, or the Pilot G2. Neither is quite as fountain pen like as the Vision Elite, but they're both quite reasonable.

</comment><comment><USER6> I just want a pen I can leave in a drawer for years and then when I finally want to use it not find it dried up and not working.

<comment><AUTHOR> Pencil. Not the high-tech mechanical ones. A simple pencil.

<comment><USER5> Murphy's Law would require that all the pencils the parent posters find in a drawer be broken.</comment></comment></comment>


Fog Creek releases WebPutty - <AUTHOR> http://www.webputty.net/

<comment><USER2> Can someone explain why they would choose a name like Putty which is already a well established and completely different software?

<comment><USER3> I got really confused by that too. I think 99% of target audience are going to think "oh, it's a web-based terminal app". They should change the name before it's too late.

<comment><USER4> I was disappointed to find out that it was not, in fact, a web putty ...

</comment></comment></comment><comment><USER5> Maybe I'm not understanding this completely (and that's entirely possible!) but why use 3rd party web servers? I like the idea but it just seems like it'd be easier as a browser addon. With the browser addon:

||Step 1 > Visit Url or open file ||Step 2 > Click the addon button ||Step 3 > Addon opens double pane and clears any current CSS ||Step 4 > Edit CSS and refresh

There's probably already an addon like this. Admittedly I've never looked past Firebug.

<comment><USER6> We give you SCSS/Compass and we host it for you. It's all about reducing friction.

</comment></comment><comment><USER7> the favicon (<http://www.webputty.net/favicon.ico>) looks awfully similar to the notepad++ logo: <http://notepad-plus-plus.org/>

<comment><USER8> The graphic is by Hayes Roberts [1], licensed for use in WebPutty [2].

[1] <http://www.bluebison.net/content/?p=786> [2] <http://www.webputty.net/credits>

<comment><USER9> It's still odd. This whole thing seems a bit half baked.

</comment></comment></comment><comment><USER10> this is a pretty awesome idea. Maybe I'm just inefficient, but I always find myself spending a stunning amount of time tweaking CSS, refreshing the page, ad nauseum. The only downside I see is that in order to modify your site CSS, it seems you would have to be running this tool, and you wouldn't be able to use your IDE of choice.

<comment><USER11> Does exactly what it sounds like, and lets you edit the source however you want: <http://livereload.com/>

<comment><USER10> Is there anything like this for PC?

<comment><USER11> The older CLI version of Livereload is Ruby-based and can be installed on Windows. <https://github.com/mockko/livereload>

</comment></comment></comment></comment><comment><USER12> It's what you always wished Firebug's css view would actually do.

<comment><USER13> Try the "Edit CSS" feature in the Web Developer plugin. It works surprisingly well for most things, in the way you are probably wishing for.

</comment></comment><comment><USER14> Bug Report? Mark Pilgrim's named is spelled incorrectly on this page: <http://www.webputty.net/credits>.

<comment><USER6> Have a fix in for the next deploy.

</comment></comment><comment><USER15> Why is the favicon the Notepad++ lizard?

<comment><USER16> They have permission to use it. They're looking for a new one now.

</comment></comment><comment><USER17> Somewhat similar functionality to <http://www.stiqr.com/> Although for stiqr would work even if you don't know HTML/CSS.

Wish the stiqr guys had a bit more exposure. Awesome product.

</comment><comment><USER18> Could someone explain why most recent websites look as if the members of the target audience are five-year old children? This is not a troll - I'm honestly wondering if anyone actually likes such a "design".

<comment><USER16> Can you explain why you think the design targets "five-year old children"? All you did was make a reductive, flippant accusation without backing it up at all.

<comment><USER19> I don't think it really needs explanation - using the term "fisher price style" is quite a common way of describing that style.

For example:

 _Each Fisher Price style button leading through to a small nugget of information that users can consume very quickly and move on or should we continue designing pages that are more traditional in their layout (more text+images)?_

[http://www.welcomebrand.co.uk/blog/2010/09/10/the- dumbening-...](http://www.welcomebrand.co.uk/blog/2010/09/10/the-dumbening-of- the-web/)

Personally, I don't think it's a bad thing at all. Obviously the grandparent disagrees, but the question is quite valid.

</comment></comment></comment><comment><USER20> I really like this idea and design. In particular the "Tour" is great! I think I will get real use from this service.

<comment><USER21> I wonder if they used that tour making library posted here the other day...

<comment><USER6> Yup, we used the Guiders library posted by the Optimizely guys: <https://github.com/jeff-optimizely/Guiders-JS>

<comment><USER21> Cool, they should link to your page as an example. Don't you think a "Previous step" button would be useful?</comment></comment></comment></comment>


I just quit to run a consulting firm from scratch. Advice? - <AUTHOR>

I just quit my job. It was too much to take any more. I spoke with my manager about this two weeks ago, and things have just devolved steadily, so today was my last day.
I've had a technology consulting firm called Deseret Technology ( http://www.deserettechnology.com ) for the last year or so. Heretofore it's received very little business, but as of this afternoon it's my full-time and my main support, so I plead for HN's advice on drumming up business.
Our target niche is medium-sized businesses in the Salt Lake City and Provo Utah areas, though of course we're willing to take accounts located elsewhere. The name "Deseret" emphasizes locality and hopefully conjures up good feelings inside Mormons.
What suggestions would you make regarding successfully marketing a thing like this? Should our webpage stay so plain? As a consulting firm, our target is much more B2B and low-level than a traditional web design shop (though web design is fine if that's all there is). This means our website is designed to appeal to IT workers who'll contract us to help with projects, etc.
Anyone have good connections in the UT area that can help me out? I'd appreciate that. :) My email is firstname.lastname@example.com if you have anything you'd rather not divulge in a public forum.
Thanks for your time, HN. Looking forward to your responses. <comment><USER2> Initially I'd focus less on your marketing and more on taking advantage of whatever network of contacts you've got. If you can build a client base from people that know you and trust you, that should serve as a source for continued work in the months to come. The idea is to build a base of clients that are satisfied with your work, with the hope that they'll recommend you to people they come in contact with that may need similar services. With every client you serve, think about how you can take the work you've done and re- apply that some effort towards future clients. If you're doing any type of development, and you retain the right to reuse that code, it'll save you time and money down the road.

I'd also recommend speaking with an attorney, or finding a basic contract from an online resource that you can use for jobs you accept.

You may also want to speak to an accountant to make sure you handle the tax- aspect of a business correctly. You can make some mistakes that wind up costing you a lot more in fees and penalties than a meeting with an accountant would cost.

Spend some time on the website Freelance Switch (<http://freelanceswitch.com/>). It is a good resource for somebody in your position.

Good luck. Working for yourself is rewarding, but it's also definitely a challenge.

</comment><comment><USER3> My experience running such a consulting firm in the (distant) past was that the best way to stay profitable is to focus on WOM. Use any connections you have now to get some gigs, do above and beyond (regardless of what those early clients pay you) to make those customers extremely happy, and new project will keep coming your way. The best thing about those referrals was that they were mostly serious - not just checking us to convince themselves that using some company in India is so much cheaper, and tended to close. Other forms of promotion, PR mostly, resulted in lots of phones and meetings that usually led to nothing and proved to be a huge waste of time. Since in a consulting firm time = money in a the most acute sense, that hurt.

Oh, and regarding your website, you should improve the design. Don't think of it as a way to get new clients, that's unlikely. However, even if someone had heard about you through a referral, they check out your website first. It must look professional (i.e. business-like boring). If it doesn't, you lost them before they even talked to you. So this isn't a matter of getting clients, it's a matter of not losing them.

</comment><comment><USER4> Thing number 1 is that you need to put some effort into the design on your webpage. Maybe even just changing the font will make a difference.

Personally, I like the content you've got there, I don't think that's going to require much in the way of changes.

Also, you might want to do something to make it more obvious that your icons are clickable.</comment>


Show HN: Flet – Your semi-public journal - <AUTHOR> http://flet.co

<comment><USER2> just letting you know that i chose not to sign up as there wasn't any pre- signup information that gave a hint as to what was to come ... didn't want to provide an email address and password before i had more of an idea</comment>


Elon Musk's recommended books - <AUTHOR> http://shelfjoy.com/shelfjoy/elon-musk-of-tesla-motors-shares-the-books-that-inspired-him-the-most <comment><USER2> I would've loved to read about his insight on each of these books. What made him recommend them?

<comment><AUTHOR> He's always been an avid reader. And he's read a lot of books that spoke about science and that's what inspired him to do what all he's doing today</comment></comment>


Americans are putting off medical treatment in record numbers because of cost - <AUTHOR> https://www.washingtonpost.com/business/2019/12/10/stunning-indictment-us-health-care-system-one-chart/ <comment><USER2> Not just (North?) Americans. Health insurance in general is overpriced due to multiple market distortions. Governments don't seem to want or, more likely, _be able_ to fix this in a systemic way. So many vested interests.

</comment><comment><USER3> Which then results in higher costs later, which they also cannot afford, but if they collapse (or similar) leading to someone taking them to hospital they're bankrupted anyway.

That also increases pressure on emergency departments (which is already an expensive treatment system for anything)

<comment><USER4> Probably true in general, but I wonder about iatrogenic effects. (i.e., doctors making things worse)

</comment></comment><comment><USER5> View complete study > [https://news.gallup.com/file/poll/269087/191206Pre- Existing....](https://news.gallup.com/file/poll/269087/191206Pre-Existing.pdf)

</comment><comment><USER6> The entire medical industrial complex needs a bloody audit and re-architecture from the ground up.

I'd love to join a research group working on something like this if possible. Anyone know of one?</comment>


Show HN: Money - <AUTHOR> https://github.com/mohnish/money

<comment><USER2> My phone number is valid but your app says "phone number is invalid" whenever I try to register.

<comment><AUTHOR> First of all, thanks for trying the app. Can you tell me the format you were using to enter the number, please. Thanks. If it is a bug, I will fix it. :)</comment></comment>


Homey – speech-controlled home automation: control everything in your livingroom - <AUTHOR> https://www.kickstarter.com/projects/athom/homey-the-living-room-talk-to-your-home

<comment><AUTHOR> Note this isn't my product, I stumbled upon it today. Looks very promising, also the technical demo ([https://www.youtube.com/watch?v=LlI3oPCBovA](https://www.youtube.com/watch?v=LlI3oPCBovA)) loooks awesome!</comment>


Twitter trends toward product placement? - <AUTHOR> http://www.viewshound.com/business/2011/5/twitter-trends-toward-product-placement

<comment><USER2> I think product placement is a great way for celebrities to lose credibility fast!</comment>