Ideally whichever is easiest to calculate use for by the customer (assuming you can keep your pricing structure similar in terms of what you earn as well).
If users might be sharing anywhere from 5 to 500 or 5,000 links, that's a pricing nightmare in which the customer doesn't know their costs and it might be very hard to estimate ahead of time. That's a non-starter for most businesses.
When something has such low per unit costs and value as an individual link, I'd tend to argue in favor of a layer above that which simplifies the pricing: in this case, the per user pricing model. If you can provide unlimited links per user in that model, all the better.
If I were making the choice again today, it would be Gumroad by a country mile. Regardless of whether you end up using them, look up Ryan Delk's presentations regarding the habits of successful sellers (multi-tier products; X 2.2X 5X pricing; email marketing). They'll make you much more successful than the typical person who just throws a $FOO onto the Internet.
Just sell things, enough things that it actually matters who you are using for processing. But, with 0 sales, you are doing 0 order processing so it doesn't matter.
I like the design. I like the simplicity. People can just use their CC like normal. They take a percentage of your sales, but so far found it worth it.
I wish it had order tracking (just a box I could tick when I shipped something would be nice) but that is irrelevant for downloads.
Flat monthly fee. Their admin UI is clunky, their checkout pages are basic but functional, but they solve a number of problems* without asking for a percentage cut of sales.
I think for basic stuff they work just fine. I'm just selling one ebook and I just wasn't comfortable with having a cut of my sales taken AND my funds being withheld by a third party before some weekly or monthly remittance. With e-junkie the funds go straight to my PayPal account where I can use the money immediately (I constantly pay for things via PayPal).
*obfuscating download path, handling coupons, handling multiple downloads etc
Let's me sell a per year license with an optional reduced renewal fee at the end of the year, which most services don't seem to easily offer. Also then lets me ties into other things like support forum membership.
It's bitcoin only though but I like the preview for music and the no-bullshit easy handling.
Wake up earlier and go to the gym.
If you dont like the gym do some pushups and crunchs and go running or do exercise bike for 30 minutes. Maybe it is hard the first weeks but if you get a routine it will become easier and you will feel energetic during the day if you do exercise when you wake up.
In the past I did crossfit. I enjoyed the short time commitment: 30 minutes, 3 times a weak & it allowed me to become very fit. However, I hurt my hip & have never wanted to go back to that level of extreme exercise for fear of further severe injury. I'm not a paid athlete & don't really need to be that fit.
In the past I've tried 2 types of dieting that made sense to me and each worked very well: Zone & Atkins. The catch is that Atkins is hard to sustain with little variety and a lot of temptation; while the Zone is enjoyable & not hard to stick with but you must be active much more so than when on Atkins.
For the last 2 years I've been very fit, with no more exercise than random walks and general stretching every few days. I got married and my wife, and now I, eat a salad before almost every meal. It's had an astounding affect on me. I still eat the yummy, high calorie high carb goodies, but much less than before. Btw, my wife makes amazing salads, nothing too exotic but nothing too boring.
From a Texan who eats his fair share of BBQ, salads can be very enjoyable.
I've been at it for 2 years and squat 85kg and bench 65kg (3 sets, 5 repetitions). I obviously haven't become a competitive powerlifter but not bad for a nerd who never gets off the couch otherwise. Never got hurt either.
I've been told with more muscle you can keep your eating habits and not get fat; it seems to be true. I cut potato chips and sugary soft drinks but kept burgers, pizza and beer. Works fine.
Highly recommended if you have the space for it.
Also I do a lot of hiking as part of my photography hobby.
Working on my diet as well, even though I'm already fairly lean. Trying to cut out all processed crap and just stick to real foods - paleo-ish diet.
Adam Savage (of Mythbusters fame) does a really awesome podcast on which they discussed fitness/well-being one week. The main takeaway is in order to become and more importantly stay healthy you have to change your mindset to always be thinking about what you eat.
1 - https://www.youtube.com/watch?v=0A1rpGGqYew
As for pushups at home:
- Do as many as I can.
- Rest my arms by doing ten squats.
- Do as many knee pushups as I can. This is my "bonus round," that gives me more improvement than I can get with just strict pushups. Most days I can do one, sometimes two more strict pushups than the day before.
The optimal view is 'state of strength' since strength is the most important physical attribute, and certainly gains even more importance the older we get. Strength allows the body to operate optimally. People who partake in resistance training have less instances of death across any reason; accidents, illness, disease, even violence (you have a better chance of surviving a gunshot, for example, if you are strong which makes sense), etc.
I'm 54, and I do 2-3 workouts a week on the compound lifts like squats (always do your squats), overhead presses, deadlifts. I also do prowler and farmer walks for HIT. I also play basketball and tennis once a week. I have never felt better.
For me, the key has been to realize that I'm not "wasting" or "losing" the time I spend at the gym. I feel like shit when I haven't done any physical activity, so I'm investing a few hours a week so that I can get more done in the normal work day.
I need to think a lot at my job will get up and wander around regularly.
Food wise, paleo-style eating seems to help with energy levels and staying lean. So does getting eight hours of sleep every night, which doesn't happen frequently enough.
I'm not a fan of steady-state cardio. It seems to hurt muscle mass and contribute to belly fat and joint pain.
I'm 41, 5'8", 175#, 32" waist, 40" chest, and recently squatted 315# for a single and have deadlifted 430#.
Also, not eating shit food, mostly by avoiding the centre of grocery stores and shopping at local stores and farmers markets as much as possible.
Right now I'm working through Lisp In Small Pieces. It's not easy to read and work out, but I like the challenge and it works well enough that I'll keep doing it. Plus it keeps me from getting so bored at the gym.
YMMV but I've never not gone through with a workout once I've stepped off that train.
I do intermittent fasting (16 hour fast and an 8 hour feeding window) every day. I workout in the last hour of my fasting and then eat my biggest meal of the day.
My typical schedule goes like this:-My last meal (usually a protein shake or cottage cheese) right before 9:00pm.-I wake up and have tea-At 11:45 I head to the gym and workout for an hour or more-At 1:00 I eat my biggest meal-For dinner I just try to have a regular sized portion of food
I try to keep my protein and carb intake around the same amount of grams and keep the fats somewhat low. On the weekends I fast, but I dont workout and I try to lower my carbs (this usually doesnt happen though).
What I really like about working out at lunch is that I get away from the office and it makes me feel focused and fresh for the rest of the day.
Also I cook every day so that helps control what I eat.
That and Wing Chun Kung Fu classes 3x per week
I joined a small soccer team that was always struggling to get enough people to play each week. I suck at soccer, but I knew my presence was way better than playing 1 or 2 players down.
Here's an album with some screenshots from last year: http://imgur.com/a/ekoO2
If it is a website that you are unable to add multiple users to an organization with, LastPass has a password sharing feature that doesn't directly expose the password with people you share it with. Although if someone cares enough, they will be able to find it.
Any time an employee leaves a company, all shared passwords should be reset. It doesn't matter if it was an amicable departure or not.
Secrets: In a closed office, verbally.
edit: video demo https://www.youtube.com/watch?v=CITq80gf6Hk
Currently we use ssh keys to limit access to servers and code repositories so the perfect solution would allow passwords and such to be protected by similar means.
I believe gpg has a solution but I have not implemented it myself yet.
For passwords that can absolutely not be made user-specific, we use SimpleSafe (https://www.simplesafe.net/). It allows you to make groups of passwords and assign rights to those passwords, and has decent logging. It's web based and works ok on mobile.
These few passwords are for network devices, passwords for websites where only one account can be made, or master/root/administrator passwords that we don't use but need to write down somewhere just in case.
These are the keys to the kingdom, so it should be behind VPN/SSH, ideally completely isolated from your regular infrastructure, and with tested backup procedures.
Most of the external accounts (log analysis, analytics, CDN, etc) have individual accounts, no sharing necessary, up to the individual to maintain complexity and remember the password.
For other services, certificates and multiple authentication methods (2FA) works out nicely.
Personally I use 1Password for storing passwords and it allows sharing vaults between users so as my team grows we might actually consider using these.
Pros:1. Open source tool, you can run internally in your company. https://github.com/saravanacp/secureshareme2. Very secure: it encrypts the data in the browser and the key is stored in the URL anchortag which is not sent to server at any point of time. Only the sender and the receiver has access to the keys. 3. You can also opt to send a secondary verification code to receiver's mobile for two layers of security.4. Option to self distruct message based on time or if an attack is detected.
Cheap, effective and good security track record.
That being said, we use personal accounts for all external services. All personal passwords are stored in 1Password.
Passwords are designed to be human-interface memorized authentication tokens. Sharing it any other way than via human interaction just makes it a digital key, and real digital keys are much more secure than digital passwords. So share it via human medium, or rethink why you're using a password.
I believe Stripe can handle dispersing funds to multiple accounts.
You also need to refresh your networking knowledge. Osi model, layers, protocols, ...
from http://www.aftonbladet.se/nyheter/article18915221.ab via google translate)
The Digital Ocean status page  claims that "Preliminary investigation indicates that Telias Transatlantic cable are down." which would make sense, because my ISP is Telia and I can't connect to most of the internet.
Edit: Well, this outage lasted a bit over an hour. Now at 20:55 UTC I can access everything once again.
Yet once I got back in the server (behind that indirection), the server couldn't even ping google, and its DNS was totally down.
Would've done a traceroute for fun if OVH's mirrors were reachable.
Say if you wanted to upload/download a megabyte of data to a datacenter in the US using TCP with retries, would it work eventually with high probability?
Connections to our US broker failed at 10pm (dst) on different servers (based in Germany) and i had no idea why, I already wanted to blame our hosting provider.
but I see the traceroutes failing after they make it to the US.
Hackathons are meant to be fun and as a way to innovate with cool new technology and learn technology. If managers want to work with 'innovators' (designers, developers) the innovators should be paid since they are providing a highly valuable service of showing the innovation process.
I wouldn't touch this with a 6 foot pole.
Other than that, I find it a little odd that they don't actually link to Edenred. I know that they exist (a former client had a small partnership with them)
Your list of interests sounds like that of a computer scientist, but I'm allocating a little space to "Maybe your only exposure to computer programming so far has been undergrad CS and you're describing it in the only language anyone has ever taught you."
The best way to skill up as a programmer, if you're interested in that, is to ship more software. There is deep, mythical knowledge in programming, and it is acquired with sweat on your brow and a pickaxe in your hand chipping away at a coal face made out of Why Doesn't This Freaking Work.
You will note that most programs you work on build on things you have heard about in CS classes but do not implicate most of them directly. Compilers are very nice to understand. If you want to be a programmer, absent you making the goal of working on compilers your life's work for the next 10 years, you will probably not work on compilers. Most coal faces sound like something rather more like "A business has some fairly straightforward transformations to be made on two sets of data. There's plenty of opportunity for smart implementation choices and cleverness, but that mostly informs the small rather than the large of this project." (Cleverness in the large in programming is good selection of which coal faces to attack at all. After you get there people often stop calling you a programmer no matter how much programming you do.)
However: it sounds like your interests are actually more in the realm of Computer Science than Programming, though: type theory, theory of computation, compilers, AI, etc. are less in the realm of programming and much more in the realm of computer science. You don't really need to know how an NFA or DFA works in most day to day programming, frankly. For learning Computer Science, I would suggest finding an advanced course with all of its material online (MIT OpenCourseware is a good place to start, or any of the other free online courses places), and working through a course on the topic. If it has prerequisites that you don't know any/most of the material from, then find a course on those. In my opinion, the other common options (reading through a textbook, reading papers, working on a project related and just learning what you need for that) all have flaws: textbooks are usually designed to accompany a course, which means they usually have much more than you need to learn a lot about the subject (and, in my experience, many are unbelievably boring and poorly written; if you want to go that route, make sure you find ones that are appropriate for self study). Reading papers is really interesting (and a lot more fun than reading textbooks), but without context or knowledge about the area, it's hard to evaluate the paper's meaningfulness/claims/etc., and hard to decide which papers are important to read. Working on just a project (e.x. just writing a compiler) leads to learning just enough to make that project, and not more.If you want to improve at programming: follow the advice about either making a personal project or working on an open source project. The fastest way to get better at programming is to program more.
Frankly: it sounds like you are decidedly not as much of an 'expert beginner' as you think you are. Familiarity with basic data structures+complexity, an understanding of theory, and an understanding of math through linear, ODEs, and discrete already puts you on a very firm grounding. (Outside of certain very specific parts of CS, you /do not/ need more math than that. If you're going into graphics research, knowing differential topology+geometry might be handy. I'm having a hard time thinking of things other than that, though.) From your description, you have more or less finished the 'beginner' stage, moved well beyond the 'novice' stage, and are moving towards becoming someone with a lot of advanced knowledge. Just knowing that you're interested in things like type theory+compilers/machine learning+expert systems+AI already puts you /way/ beyond being a beginner.
Shameless plug of someone else's stuff: if you're not sure where to start on the courses front, and want to start on the programming languages side of things (compilers, etc.), this course might be a good place to start: https://www.udacity.com/course/cs262I haven't worked through this course in particular, and I don't know its exact difficulty, but I took undergraduate programming languages from this professor and he's an /amazing/ teacher.
Edit: don't know why I had two copies of that written, but now there should only be one. Also, cryptography is another part of CS that you need more math (in this case, abstract algebra). (More multiple copies? I seem to be pretty bad at this "say things once" thing, and need to make some preference changes.)
Also you don't sound line an expert beginner, you sound like a beginning expert, I'm programming for 10 years for a living, built a couple of money making startups, and doing my MSc at the moment, I can't say I know half of all that at an expert level ;)
Finally, accept that you don't really have to know everything, and more so, you can't really be an expert in everything, it's really hard but CS is a very wide field. You can't help but being a beginner expert on a wide area of topics, and only a "real" expert in a very narrow subject. Not all CS Phds are expert in everything, actually they are most likely expert in a very narrow set of topics relevant for their research.
Bottom line, either learn for learning and do it in a place that honors it (academy or independent / commercial research) Or build something that makes money, and the subset of human knowledge needed to make it work will be defining itself (you'll have to fight the urge to learn things that "you'll probably need later", and make it more "on demand" learning)
Download the code, figure out how to build/install it, and start to find your way around the codebase to try and figure out which bit of code is at fault/needs extending. When you get stuck, ask on the dev mailing list or IRC or whatever comms channels the core dev(s) have.
A lot of programming is not about designing something elegant and new. It's maintenance work, fixing bugs, extending functionality, adding new features. Sometimes adding exciting new features is a chance to design something elegant and new, but other times it's a bunch of repurposing and refactoring some features that are mostly-there under the hood, but need a couple of tweaks, and a small amount of really new stuff (but in the same idiom as the rest of the system) and exposing in a new way.
You'll really find out how to properly spelunk into a codebase (which is a complementary skill to just reading code), how code is used, and how it solves real-world problems.
If another dev solves the bug before you do, that's not a problem. The real purpose of the exercise was for you to learn, and only perhipherally to help the project. As a bonus, you can see how the other dev solved the problem, and how their solution differs from yours. Did they solve the bug at the "same level" as you? Was their fix a bigger or smaller change than yours?
If you get there first, great! Submit a patch to their mailing list, or a pull request to their git page, or whatever they use. Do not take their criticisms of your work as a personal insult. (If they do insult you personally - which almost certainly won't happen, but very occasionally does - that's another matter. Drop it and find another project. Life's too short to waste on asshats.) Rather, listen to exactly what they don't like about the way you solved the problem, use that to fix the problem in a way they will like, and re-submit.
Do your own thing. Build something you want to see built and you will learn oh so much. Programming isn't about how you implement something so much as it is for what reason. Think of something you want to see built and figure it out from there.
For example, I learned Python by trying to write an app that would take my Shazam tags and convert them to a Google Music playlist so I could more easily remember songs to listen to later.
Notice that I didn't write anything about SQLite or how slow Python's HTTP was when making the queries, because in learning Python, that wasn't important; those things were just implementation details that I only started thinking about after my application was demonstrably "slow." And more than that, I really didn't consider anything about lambda calculus and I don't know a single thing about NFAs or DFAs. I just wrote an app.
And I learned something, enough to get the job done. If you really want to learn about how to apply functional programming, learn Haskell. If you want to learn about compilers, write a compiler. You'll learn enough, because there's no way you can learn "everything" on a topic in Computer Science.
The field is much too broad, and you'll be way better off lazy-evaluating it than calculating it wholesale.
Tl;dr: If you want to be a better programmer (as opposed to being a better computer scientist) build and the knowledge will follow.
My advise would be to look at your own network (friends, family, etc) and find those who are in business and ask them about their pain; and there is always some pain that a business has. Then figure out a solution to their problem and program that.This serves 3 purposes:1) It has a definable goal and purpose (solving the pain) as it's a real-life project.2) You will learn tons about yourself, programming, and the business.3) It could lead to either employment or a program you could sell to others and start a business.
As always, make sure you write-up a contract which states that the IP is yours. Hope for the best; plan for the worst.
Also, there's a disconnect between academia and the workforce. You might invent a fancy new data structure that blows up in real use because it ignores caches. Or you might invent something that's cache-aware, but everybody's using scripting languages or the JVM and doesn't have that level of access to the hardware. And so on. If you're strictly speaking about becoming better at the work of programming (rather than CS), that stuff isn't that important. You will spend way more time, especially as you move up in seniority, interacting with people - whether it's designing your system to be understandable by humans, persuading others of your ideas, getting funding, etc.
One of my favorite sayings goes: "What's the difference between theory and practice?" "In theory, there is no difference".
It sounds like you have the theory covered pretty well.
+ There's a traditional sequence in skilled trades of apprentice -> journeyman -> master. A contemporary trade probably throws student on the front end and perhaps renames apprentice to 'intern'.
What separates a student from an apprentice/intern is the type of problems they work on. The same idea distinguishes the journeyman from the apprentice except that the journeyman is expected to successfully solve the problems they work on. Etc for the master.
What I am getting at is that there is a range of expertise and that what marks someone as an expert is the sort of problems they solve. But it's critical to realize that the context in which they solve those problems matters. This week thousands of students will be writing quicksort code. In 1960 it was the stuff of ...well CA Hoare probably was an expert programmer in an absolute sense, and perhaps a new journeyman among those who were programmers. Here again, context matters when talking about expertise...the one-eyed man in the kingdom of the blind and all that.
+ It's not really clear what you mean by 'expertise'. An expert AI programmer is someone who has solved expert level problems - one in an academic setting earns a credential. In a vocational setting it's going to take several.
But in both settings the context is years, not hours per day.
+ Sure you're free to define what it means to be an expert. Regardless of what definition you choose, the question remains, what does an expert do that you aren't doing? This isn't a question of research. It's not a question of methodology. It's a question of personal opinion - that is, what activities would you have to do to meet your definition of an expert. Maybe that's working at Google. Maybe it's earning a phd. Maybe it's writing a replacement for HotSpot.
+ Once you know what sort of problems you need to solve to move toward being an expert, perhaps just trying to solve some of those problems is the place to start. I.e. what sort of problems does an apprentice or journeyman tackle?
You can easily spend the rest of your life shaving these mythical yaks and when you are old and surrounded by mountains of yak hair, you'll feel exactly the same as you do now.
There is more to learn than you can ever hope to. Just learn what you need as you go. It's the key to all existential crisis: Try not to think so much.
Honestly though that set of interests doesn't seem like the sort of thing that lends itself to real problems; it sounds to me like you've already got more than enough CS theory. If you're looking to learn the kind of programming that will make you better at doing it professionally, you need to start making practical things. Find a hobby that could do with a website/app or something else in your life that can be automated.
Lose your first 50 games of Go as FAST as possible!Don't worry about winning or losing or finding the "right" move, just put some stones down, get used to looking at the shapes that come up, and get a good feeling for how the rules work. Of course, a consequence of that attitude is that you will lose most of those games, but it doesn't matter. Once you have a bit of experience under your belt, then you are ready to begin
Take a break from focusing on the strategies and tactics of programming. No single algorithm, framework or language is going to unlock the panacea of potential inside of you. Most problems simply aren't that complex in the beginning.
Having the mindset of an innocent beginner always is the toughest thing to maintain to remain a problem-based thinker instead of a solution-based thinker.
The best way I've found is simply to solve problems the best I can, and when I learn what I could have done better, if the need is there, go and refactor it. No matter how great you are, or aren't today, what you write may look bad in 5 years because you have more experience.
Most things we build as developers become obsolete. It's a separate discussion but I'm not sure what you're trying to optimize, your skills, or a result in a project?
No developer is a a factory of churning out code or results at the same speed. Be less focused on the practice of programming alone and look at the results you're creating.
Software is as much a craft, an art, as much as a technical skill, and maybe it's something for you to explore the other fronts.
Forget about trying to learn EVERYTHING. Pick one thing, learn it well, repeat with the next thing.
As mentioned, the more you can do this within the confines of projects you feel passionately about, the easier it will be.
Do you really think your average HNer knows how to do that? Or even know what that means and how you define it? I really don't think so :)
In my opinion you know plenty about computer science, certainly much more than your average programmer, but I understand how you feel. I think of myself as not knowledgeable enough and below average all the time.
You haven't mentioned your goal. Do you want to eventually work in any of the areas you mentioned? Or rather you want to learn this for your own intellectual curiosity?
(1) Start committing to Github daily. Make your own project and just go with it until you it's finished and learn what you need too.
My example project: http://austingwalters.com/openbkz/
(2) You can go through online courses in an attempt to learn more and become an expert, many courses are online. You could also start following blogs, read papers and replicate results.
If you are interested in maximizing learning: http://www.scotthyoung.com/blog/
(3) The past month I have been writing a blog a day, it increased my productivity and forced me to really master topics:
My explanation on blogging: http://austingwalters.com/learning-through-blogging/
I recommend blogging, videos, or writing stuff down for "teaching" others because it really helps you master a subject and helps you think of ways to use those concepts.
Also, I see a pattern that more you are used to studying more quickly you tend to understand something new. I believe its something do with reading habits. So don't leave theory completely, but keep a balance b/w theory and practical.
> mythical stuff before it's too late.
Too late for what? What is the hurry?
Above all, always have fun!
I mean, there are books on this stuff? Read them, do their exercises, and you will be fine.
I will say, most of this stuff now functions mostly as mind training. The specifics about low level computer systems, Big (O), parsing and compilers is the only part I see repeated use in my day to day.
>So knowing this, how would I best use say 8-12 hours a day, every day, to learn this stuff?
You should audit courses at a CS program taught near you. This stuff is chunky and the books are designed mostly for a classroom setting
2. Books and papers are great, but you should also try to find a mentor / guide / teacher / expert to talk about the issues you're facing and what you're thinking about. Schools are organized the way they are for a reason, even if they often fail at their intended purpose.
Unlike for athletes or musicians, practice in a knowledge field (like CS), seems a little ill defined..
2 build, then rebuild, your own systems
After 10,000 hours of this, assuming you keep climbing rather than just doing the same thing over and over, you will be competent.
Whatever you do, as long as there is a minimum amount of fun in it, you'll get better.And the more you know, the better you can identify what areas you have and/or want to improve in.
A couple books that are worthwhile: "Refactoring" and "Rapid Development". That will teach you a lot of basic skills in terms of development process and how to improve the design of real systems (warts and all). Also, take a look at the Architecture of Open Source Systems, it'll acquaint you with how applications fit together.
Also, take on some projects. Pick something interesting and work on it. Pick some small stuff then move up from there. I'd suggest in your case eventually building a compiler. If you're interested in AI, build some simple games and work on building AI for them. There is nothing more important than actually writing code.
I find the idea pretty disgusting.
I have never heard of this happening
Not what you're asking for, but you have a pretty strong hand to play right now. If you went to the CEO and listed the issues that you're dealing with that you would expect the CTO to deal with.
Then say, "These are basically executive-level functions. I'm happy to handle them, but if you aren't planning on hiring a CTO, I'd like the title of VP Engineering and another 20% raise."
There's nothing wrong with deciding you don't want to climb the management ladder, but getting "un-promoted" is something where you'll probably want to find a new job. Fortunately, almost everyone is trying to hire competent senior developers, so you should be able to find a new gig before too long - and probably get yet another pay raise to go with it.
while you may have been promoted beyond your skill set, you can always develop more skills, and as I said, you may have insights that someone else might not see, you'll have more rapport with those you manage because you once worked among them, and I think, since you're stressed, you might care more than someone who was hired off the street.
Maybe you're a great leader _because_ you're stressed by important decisions and responsibility?
Not saying anything is wrong with your platform but, what's the reason for me to switch? Can I send voice messages to those that aren't using your app? Or do I need have all my contacts download your application before I can use it to communicate with them.
Bullet-points work great and provide easy references to things like intended file-names, and also provide an easy way to break down a conditional statement.
You need to look into psuedo-code, because in a way, that's what you're looking to provide. Otherwise, you might as well just give the developers and the client a one on one and get out of the way. You have to be providing something that makes the developers life easier then handling all the interaction themselves and that something provided has to be something other than just time.
We need to understand the purpose of the system, how it works into the overall program, how it should look, how it should feel, intended program flow, intended results, we need to know a lot of everything not a little of everything.
You also need to be almost constantly available to answer a quick question. There are just too many issues that may crop up while working on a program, case in point I was working on a project earlier today which featured two different types of an overall master type inside a record of a database. I made a (highly educated) assumption of which type I was using based on context but I could have been wrong. Knowing which sub-type to use was something that wasn't available to me immediately with the information I had on hand and didn't appear to be an issue during our requirements meeting, it only popped up when I was re-checking program flow, specifically error catching. These little things can happen all the time, and the only real way to beat them is communication.
There's also interaction diagrams and state diagrams depending on the type of software your using.
Normally planks are the best solution to this, including side-planks. They may be a bit too much for you though, it depends how bad the pain is, and how poor your glute activation is. Do you have any Anterior Pelvic Tilt (APT)?
Extremely light yoga might be a good thing to start with, as others have said. Childs pose would be good to do. Also Cat-Cow (Cat-Camel is another name).
As you sit at a desk all day (I assume) you'll be tight along the front (hip flexors, quads mainly), and your posterior will be weak/inactive (glutes, hamstrings). You need to work on fixing those.
Honestly though, you're going to want to see an experienced physiotherapist who can examine you and give you exercises which are good for your current situation. Any advice from anyone on the internet - no matter how experienced - should be taken with a pinch of salt, purely because we can only speculate.
1. Simply sit up straight, it stretches your lower back the right way.
2. Get into pushup position and while keeping your body straight, try to reach forward as much as possible.
3. Lay on the floor belly down, lift your legs and chest off the ground, bind your hands behind your back and reach them as far back as possible. I found this great for temporarily relieving pain.
4. Do pullups: or if you can't do one, get on a bar and let your legs dangle and feel your back stretching out. This one feels so good.
It's perfectly normal to ride them in your business suit to the office. They're much, much more comfortable than a racing bike.By the way, have you considered alternative healing therapies like acupuncture? And are you sure your desk/chair is ergonomically adjusted to your body?Good luck!
I have no idea if this is good against every kind of backpain, but it has helped me in a few instances where I woke up with a lot of pain. Riding a bike like that for 30 minutes completely fixed it.
My posture improved quite a bit by doing yoga. I would go to a class 2x a week and try to do it for 20-30 minutes every day that I didn't go to class. I only have experience with Hatha Yoga (the most traditional form) and would only vouch for that. Avoid the exercise-oriented yoga classes because they wouldn't necessarily solve your problem. If you try yoga, then ask if you can attend one class for free so you get a feel for it before putting money down. After a few months of going regularly, you will know the poses and will be able to do them on your own. Let me know if you have any questions.
"The art of multiprocessor programming", excellent book on parallel programming theory with code explanations: http://www.amazon.com/gp/product/0123705916?ie=UTF8&tag=nirs...
I have not read it completely, because the first chapters inspired me to start programming (in Erlang) and I haven't gotten back to the book yet.
I've also been reading Clojure Programming (http://www.clojurebook.com/) to reinforce concepts from the above.
It's all PLI and Fortran, with lots of GOTO being harmful examples, but surprisingly much of it is still relevant. It's a quick read and interesting look at some of the problems they had back then (and some that we still create plenty of today).
+ Joy of Clojure. A recent gift[card]. I put off learning Clojure because of it's more complex syntax. I'm both glad I did, and that I have this book now that that's the no longer the case.
+ ANSI Common Lisp. Lisp was out of reach at the time when my younger self might have pursued computer programming, and realizing around two years ago how accessible it had become got me to download Lisp in a Box and then buy the used copy. Currently visiting, this book orbits in and out of the rotation with a cometary periodicity.
+ Art of Computer Programming: Volume 3, Sorting and Searching Twenty-five years ago or so I bought volume I and about 15 years I donated it to the community radio station's books sale [WMNF 88.5]. I spent about $25 dollars including shipping for used copies of the first three volumes from Amazon last year. Right now each is on a different floor. The proximate reason Sorting and Searching is by the bed: I'm taking Algorithms I on Coursera and it is the first one that really dives into algorithms. A deeper reason is that Knuth always reminds me how much more there is to know - I'm getting better at the maths, but haven't learned MIX. Maybe one of these nights.
+ Structure and Interpretation of Computer Programs I bought a "used" copy from MIT via Amazon last year. It's staggering how much is really in it that I glossed over 'reading' the free online version. It's much better than I thought, and I find myself constantly referring to it or just reading a section. It's also a reference for the other Coursera course I am taking: Funtional Programming in Scala with Martin Ordersky.
The non-programming books are from the public library:
+ How Literature Works: 50 Key Concepts. The sections are four to six pages and lightweight. Makes for something brief to read. It's the sort of book that I feel no obligation to finish.
+ Poetry of the First World War: An Anthology This book is actually why I mention the non-programming books. I don't read poetry, but I'd always seen people make a big deal about it, and there this was on the new book shelf. I see why the English make a big deal about Siegried Sassoon. I see why they make an even bigger deal about Wilfred Owen. It's potent and powerful and the bench of poets runs much deeper. It makes that war the last ancient one.
pretty much the most important programming book a programmer who works with / in teams can / should / must read.
Also "The Reasoned Schemer", which has the same pedagogical style as the other Schemer books, but works around logic programming.
Both of those books are mind benders and I've gotten a lot out of them recently.
Interesting topics: MCMC, Gibbs Sampling
F# for C# Developers
This book seems to leave lot out in order to simplify but good starting book nonetheless
TCP/IP Illustrated, Volume 1: The Protocols, Second Edition
I wanted to know what really "connection" means. This book has answer.
An Introduction to R
I guess everyone dealing with data should know R, right?
Here's my Amazon list with quite a few very interesting books collected over time: http://www.amazon.com/gp/registry/wishlist/RXLC4WK1ZOJR
Check the table of contents, it will give you an idea of what to expect from the book.
Richard Bird - Pearls of Functional Algorithm Designhttp://www.amazon.com/Pearls-Functional-Algorithm-Design-Ric...
Christian Queinnec - Lisp in Small Pieceshttp://www.amazon.com/Lisp-Small-Pieces-Christian-Queinnec/d...
In the style of other "Effective Foo" books. Excellent overview of best practices for ObjC, it's the first book I hand new developers on my team.
It's not a book about scala, it just so happens to use scala as the language to teach you how to program functionally. I've read other books that purport to do the same, they end up showing a light sprinkling of functional concepts. This book goes much deeper, and is ultimately much more rewarding.
The Pragmatic Programmer - My all time favorite. Awesome book to learn best practices of various aspects in programming.
The Code Book: The Evolution Of Secrecy From Mary, Queen Of Scots To Quantum Cryptography, if you have a thing for cryptography.
Really good introduction to computers from relays up.
OpenGL Insights - Cozzi and Riccio
Game Engine Architecture (2nd Edition) - Jason Gregory
Programming: Principles and Practice Using C++ (2nd Edition) - Stroustrup
I strongly suggest most junior programmers I work with to read Effective Java and Head First Design Patterns. To me, it's a great combination to help you write code that's easy to understand and maintain.
HtDP is wonderful at what it does, and while perhaps a tad dry in writing style, it is, for me, a page turner in terms of engagement and presentation of new ideas.
Looking forward to when it hits Claude Shannon
The book has a few very valuable insights. For the most part it reads like a series of blog posts from a slightly experienced developer.
Am currently reading Think Complexity (also free): http://greenteapress.com/complexity/index.html
Fun to read, solidify knowledge of Scheme.
While directed at the C++ crowd, I would recommend this book to any programmer, as it explains many interesting concepts and idioms that are not C++ specific.
Shameless plug: I just finished writing the first in a series of books about Backlogs. Good backlogs can make programming a lot easier. Conversely, horribly formed backlogs can turn coding into a death march. http://bit.ly/1fJd5Gg
Great look at under-the-hood of what happens when a program runs.
You are right to be cautious of snake oil vendors. The thing is, most of them are completely sincere in their belief that the new scheme is secure. But if it hasn't been tested by people qualified to break things, it isn't secure.
The difficulty is two-fold: (1) inexperienced cryptographers are unable to test the security of an algorithm sufficiently; and (2) experienced cryptographers are not common, they are generally busy enough already, and it's tough to get them interested enough in a new algorithm to really take a close look at it.
Another approach to consider is seeking freelance work. You may be able to find work porting .NET applications to node.js which would allow you to leverage you current skill set to learn a new one. The challenge with this approach is that freelance rates can be pretty cut throat. Therefore, it would likely best to view these types of jobs as an opportunity to build experience/portfolio more than money making.
I hope this doesn't read as mean, since I suspect English is not your first language, but if you are trying to get hired by an English speaking company, you need to use proper grammar and spelling.
If you are looking for job in your native language, and just raising the topic here on HN as the best place to discuss it, then please only read the first paragraph of this comment. I don't mean to exclude you from discussing things here.
EG: The AngelList search is very good and you can filter by allows remote :-)
Some things I've heard about that I wouldn't mind reading about again:
- Making an office space in the home (I've seen workspaces designed [I think] for remote workers - do people use these and find they offer value?)
- Setting up boundaries with family members
- Communication habits - do you scrum over text chat, or daily video conferencing? What about large team meetings? Do you share daily status over email, or is that too much overhead?
- Working hours - do all-remote teams encourage syncing up time that the team is online? If you're remote and most of the team is together, do you work hours that are local to the rest of the team? I've heard it can be hard in this situation making sure that the rest of the team remembers you in hallway conversations, since it's easy to forget the one guy who is remote.
Some stuff I haven't seen written about:
- Logistics - do you need to be the admin for your PC? Do you get a hardware budget, or is it entirely BYOB?
I'm also interested in how the remote dynamic changes going from small teams to companies with thousands of employees.
It all comes down to how good you really are.I have been looking for the past 3 - 4 months for a remote job, but since the competition out there is huge and there are definitely better programmers than me I haven't manage to land anything yet.
Make a great CV, a personal page, work on github to show your work. This will help you dramatically since you will be displaying your work and who you are. ( I have all except github as all I do is actually on my own repos )
As for the hours you are willing to put in, then that is more like freelancing than a full time job.Perhaps try Elance for some freelancing and work on your own to learn node.
Replace 'sfbay' with various cities and see what you get.
I would create a profile on that site, most new freelancers there start with a lower rate to build experience and feedback and in a few months look to raise the rate.
Feel free to contact me by email and I can tell you what my experience has been from the hiring side.
But not a lot of companies are looking for part-time programmers, why do you not want a full-time job?
Update: You have added contact details. :)
In any case, the most important thing is your mental health and happiness. It definitely sounds like you need more time off. You'll be able to find other work, and you have a very understandable explanation for your next employer.
Do you have friends you can reach out to? Somewhere to couch surf? I've found that in grief, having something to distract you makes a big difference in keeping you from wallowing in despair. That, and by the sound of it, you're still pretty depressed; please reach out to someone, you don't need to go it alone.
My deepest condolences on your loss. We lost three members of my family in just over 18 months, and I know how difficult it can be to process.
Here are some links for depression support in NZ: www.depression.org.nz http://www.mentalhealth.org.nz/page/40-getting-helphttp://www.depressionsupportnetwork.org.nz/
PLEASE, PLEASE, PLEASE, seek help.
You probably spent a lot on your career so far and you will someday not want that investment to fall too hard. Remember they also spent a lot of time with you probably already, and there's a training cost invested in you personally. It seems in everyone's interest to get you back in the zone. If you don't get the edge back, your employer gets nothing, so it's not like you're trying to force them or anything.
Establish that that is the situation, and given that situation, you need to be able to start from "hello world" at work. Get out of your expectations and it will be very easy to work yourself back in knowing that you're not under presser to be 100%. A very workable game plan is to start as if you are a new employee and work up one duty at a time. Get one side of the stress feedback loop broken and the other will dissipate on its own.
You'll be happier when you're starting to work, start picking up duties etc because a career is an investment that has a future. I think when you feel the future seeping in, you'll find it easier than you expected to start getting back into the groove.
If your grief is preventing you from functioning, I agree with people below who suggest therapy and medication. Why not give that a try? There's no shame -- it shows courage, and will help you grieve. Meditation and exercise are great eveners too. And being unemployed and depressed could make things even worse.
Good luck and warm wishes. It will get better. You will find peace and you will recover.
One question concerning your bosses. How clear have you expressed to them the extent of your suffering? Do they know you cry, and have trouble doing basic tasks?
The reason I'm asking is that I find 'we' are so used to not expressing the true nature of our feelings, especially in a work context (but even with friends), and perhaps especially as men (which I'm assuming you are, erroneously perhaps), that we sometimes aren't even aware that we might not have properly communicated this. I've made that mistake a few times.
Furthermore, assuming you are legally allowed to just up and leave and assuming it won't have negative consequences for you personally, this might be a good time to be selfish about it. They'll figure it out without you! You need to think of you right now!
I don't mean to be presumptuous; just something to consider.
Apart from that, the only reason to stay with this company is if you want to avoid burning bridges.
Read your contract carefully. Also read the laws carefully. You might well have the right to quit when you want. And in NZ I would assume that you would have a strong worker's advocate if the business wants to be shit and not pay you for work done.
Also, as others have said, be sure to use any leave you have coming.
But I would also say that YOU NEED TO FORGIVE YOURSELF.
You didn't tell us all the circumstances, just that you didn't make it in time to see him off. I can understand feeling badly about that. I can understand kicking yourself for it. But guilt?
You made a mistake. It worked out badly. It hurts. But forgive yourself, both for your own sake and for your father's. (I didn't know your father, but I suspect that he would not want you driving yourself into the inability to function over this. It seems more likely that he would say, "I forgive you, son. Get back up. Keep going.")
this is the same.
> "normally, one must stay on for a month after giving notice"
it is not a normal circumstance.
do you have sick leave? can you exhaust that first?
I think you need to consider many things before leaving, screwing up deliberately to get fired might shut the doors at this company should you find yourself in better spirits down the road and wanting to return.
I think your father would want what's best for you. Think about that, think about the times you had, it's terrible that you lost your father, but think of all the happy times you had with him and hold on to those memories to pull you through.
I sincerely hope you feel better soon, and again, so sorry for your loss.
Possibly a temporary regimen of anti-depressants. I am sorry for you loss and have experienced something similar (I didn't take anti-depressants but realized later they may have helped when they were temporarily prescribed to someone else in a similar situation.)
Your father is gone but your life goes on. He would almost certainly wish you to make the best possible use of it.