chton
Joined 12 years ago
Joined 12 years ago
I believe the reasoning for why that should be goes back to the cycle of poverty (http://en.wikipedia.org/wiki/Cycle_of_poverty). It's harder to make more money if you don't already have more money. By giving a one-time lump sum, you give people the opportunity to dig themselves out of that hole. Eating better, dressing better, buying things that last longer, these all have big impacts on how much one can save and earn. Even getting some basic education helps enormous amounts. In the end, it might even lead to people being more willing to work harder and actively save more money.
As to your original question: Unless your software is special in some way that you don't want anyone to find out about, you can offer both SaaS and self-hosting at the same time. My advice would be to do that, but use a yearly-license model for the self-hosting. Calculate the costs a self-hosted version would cost in total to a client (license, hardware, maintenance etc.), and make the SaaS version slightly cheaper than that.
* Simple.Data: https://github.com/markrendle/Simple.Data , the smallest and simplest ORM you'll ever use.
* Hyperletter: https://github.com/Jiddler/Hyperletter , a very easy way to do inter-process communication. Great for writing distributed software over http, but can be just as useful locally.
if(IsNotFoo) {}
you can do if(!IsFoo) {}
It's a simple thing, but it can save you valuable time and brainspace at some point in the future.If it's up to me to decide a naming system (I mostly do C# professionally), my boolean-returning methods will be in the form of a tiny question that has a yes or no answer:
IsEntityPersisted()
WasActionPerformed()
IsFooOfTypeBar()
etc.For variables, local values and method parameters, the names will be similar, but in the form of a true or false statement. The equivalent would then be:
entityIsPersisted
actionWasPerformed
fooIsOfTypeBar
The important thing in both cases is to name the boolean for what it means, why you'd set it to true or false, not for how you intend to use it. Compare: if(logicFlag)
{
//do something
}
vs if(actionWasPerformed)
{
//do something
}
Clarity in a naming schemes is all about making it clear what something means in the context. I know that sounds like a tautology, but there is a difference between "what something means" and "what something does in the application". If you manage to make the meaning clear, the reasons for what it does will become clearer too. The reverse is rarely the case.Closing the feedback loop between typing and seeing a cool result is one of the best ways to get people excited about coding. If 3D or AR helps with that, it's definitely a good thing :)
I know it's the popular thing to say that Windows 8 isn't fit for touch devices, but it's outdated and usually only reiterated by people who don't have any proper experience doing it.
Always happy to see comments at b r a m d b + h n @ g m a i l . c o m