If you need to be dynamic, or outsource your DNS, there are options from Dynn, Digital Ocean, Amazon, etc, which allow you to use their API (and optionally a panel-interface).
Those APIs can be wired up to allow you to update things frequently if you wish, for example automating zone-transfers from a hidden-master, or converting a git-repository of text-files into live DNS entries.
Really your question is quite broad, and a more specific question would be required to provide a decent reply.
What language are you good at OP?
You can quickly mock up majority of your use case using PHP, ruby or even Node.
Create a monolithic app and stay away from microservices until you have clearly drawn service boundaries. I'd say (6 to 12 months) in production. You dont need the headache of the distributed overhead.
Just keep in mind that you should "write code that can easily be disposded or replaced, not extensible"
For generating client sdk's i suggest using swagger. Grpc is there but i have trouble grasping protobuf sharing at the moment
For user clients, i would go for react native.
You're better off using a 3rd party for analytics when you are starting up: if you have the money, I'd suggest using segment, new relic or even google. Else, do it with prometheus or kibana.
My 2 cents
Ruby on Rails provides huge bang for the buck with their integrated database ORM, as does Phoenix (what I used). Your scope involves a lot of referential data, stick to traditional robust SQL database system (Postgres for example). If you use a NoSQL db, you may be quicker out the gate (as it'll take any JSON you give it), but once you get to the analytics with lots of joins, it won't be as much fun (personal experience). Also, I would suggest using the server frameworks' rendering engine to get your MVP up and running, as you can then fast iterate between data model changes and visual representation (i.e. HTML output), and avoid front-end builds and all that encompasses. Phoenix is very snappy, and with something like Turbolinks can potentially be as snappy as a dedicated front-end app.
Personally, I needed very interactive front-end, so had to build a separate front-end using Ember. I found Ember with Ember Data provides a robust toolset that manages complex data. I also have experience with React and Vue, but keep in mind with their state management (e.g. Redux / Vuex) that you'll need to manage complex data relationships yourself.As far as mobile, don't think native, as you'll need to learn specific technologies to implement that as well (more time...). Grab a bootstrap template that is already responsive, and you can run the same web-site on an iPad (forget the phone initially).Good luck!
source: just finished a 2 year build of an investment-related accounting and analytics webapp
For the mobile apps - Xamarin. You will still write C#, just use a different way of thinking.
Having the same technology stack in web and mobile will allow you to reuse skills one day when you build a team.
Then i want to process and display all this data (related to Manufacturing, Sales, Marketing etc) on web, iOS and Android.
So essentially there will be apps for employee's working in the plant (for data entry) as well as for the managers and owners (to monitor everything and make decisions)
I want the web dashboard to look somewhat similar to - https://demo.baremetrics.com
And since i have no experience in building mobile apps i want to know what languages/frameworks would be best suitable to develop good/native looking apps for iOS and Android using web technologies.
I'm quite confident a number of highly knowledgeable people have looked at your question but have been unable to answer for lack of context. Narrowing things down a bit would likely get you more focused answers.
With that said, the best tech stack is the one you already have in your pocket. You could argue that this is why having a good all-around knowledge of all of the major stacks is a good idea.
You learn what is evolving, and you grab onto it, and evolve right with it. This is easy territory for flame wars and "whatever fits you"/"there is no best stack", but that's not the full picture.
Your survival depends on what you know, life is full of surprises, death in family, cancers, car accidents, addiction, breakups, and depression.
Imagine a warrior, ask him, "what is the best weapon?" and can you really imagine him saying "There is no best weapon", no, s/he would never say that.
You go on the most popular code hosting website, you sort by number of stars and begin at the top.
To give you a specific answer "iOS, Android and a Web App" in context of "Inventory Management - Dealer Management - Accounting - Payroll - Analytics" is Apache Cordova, (iOS, Android, and others), you use npm/node this way you will have one code base, you won't have to write the same code in multiple languages (just imagine scaling a live data sync requirement in one app and then standard REST in another -- keep it all in one language, or you will fail.)
"Inventory Management - Dealer Management - Accounting - Payroll" is all pretty simple (but, please explore ideas like http://vorpal.js.org/ just to develop your API before getting to G-UI, finish your programs in the terminal first.
Don't pretend programs are written GUI first, they are not. GUI is a leaky abstraction to say the least.) Don't fall for redux, relax and use https://github.com/mobxjs/mobx for actual GUI, (by the time you get to this part https://vuejs.org/ will rule)
Finally, remember develop commands/API first, get your apps working in the CLI and you will finish your program before starting it. Think about using the power of Unix (https://www.npmjs.com/package/commander), for the love of all that is mighty think about IRC, NOBODY! has time to learn to use your apps/GUI and NOBODY! ever needed to learn how to use Siri, so create a Command Line Interface version of your program and before you jump to React/Vue meditate over https://hubot.github.com/ and programs like Siri.
Finally, if I was facing your requirements, I would build a wiki/forum where your users would interact with bots. Over time I'd rip put some of the robotic guts and boldly go where humanity needs to be headed, I'd replace them with what I call Artificial-Artificial Intelligence, networks of Human Mechanical Turks where anybody could participate.
Neural networks are easy to train, but they are also easy to trick. Nothing will beat a random sample of Humans from across the world reaching a consensus on a tough decision.
In closing, People, Real Hearts, Human Minds, powering your network would share in your profits, and you'd do your part in battling what ails us all, World's Poverty.
If a mother in Rwanda and a Boy in India participating in your Mechanical Turk can find their way out of poverty, by helping your to detect fraud in your circuit. Then, you did your part, to help Humanity grow.
In almost all cases, the tech stack is essentially meaningless. This runs counter to what we frequently want to believe as engineers because there certainly are meaningful technical differences between languages and frameworks. These differences just don't generally translate to meaningful business results.
For example, I am aware of a SaaS company with fewer than five employees total that generates over $3M in revenue annually. The profit margins are mouth watering - total non-payroll expenses are high five figures/low six figures each year. Everything is developed with PHP and MySQL - it would be vilified here, but it's more successful than virtually all the SaaS companies mentioned on HN.
My advice to you is this: develop your software in whatever language allows you to think more about business decisions and less about technical decisions. Your aim should be to build fast, iterate fast and fail fast. Many engineers who start companies struggle with this because technical decisions are their comfort zone, but your company will succeed or fail based on how well you identify market opportunities and figure out what your users want. If you just happen to be most comfortable in an "academic" language or a really trendy one, go ahead and use it. However, if you're most comfortable in Python, but you fetishize functional programming or React + Node.js because of the Medium posts that pop up on HN, go with Python.
Practically speaking for you specifically - I would first revisit whether or not you actually need a web app and two mobile apps. Could you get away with a minimal web application and choosing only one mobile application to start? Maybe develop in iOS or Android first, observe how your potential customers use the app, address grievances and product a mobile app for the other platform in the next iteration.
As for the actual technical choices - if you know several ways of developing iOS/Android/web applications, go with what is most familiar to you unless you have clear and incontrovertible evidence that one technical choice is clearly superior. If you have to learn a new tech stack to develop one of these, then 1) don't focus on it now, focus on market validation and 2) choose tech stack with the best combination of stability and ease of use to get up to speed with that platform.
TLDR: Focus on getting them to have fun & enjoy learning about 'code'. Don't care so much on how well they learn it.
Every kid is unique & will respond to different things.
Social & mentors are awesome. It's usually more fun to build with others if possible. Also they will want to easily share & show off their creations with others.
Show them how to "hack" Google with the browser's dev inspector tools. Wins them over every time.
Give them simple partially completed programs that they can modify. I've had a lot of success with a simple trivia game that lets them start by modifying the questions/answers & the replies it gives. A great first lesson in how to use strings & gets them looking at the code. They can then share what they created with others (social aspect) & have them play their game.
Do NOT lecture to them or try to do long demos. They often listen to teachers lecture all day long. They want to have fun & explore. They also don't care about types or any other computer science terms until they've created a lot of things & are trying to figure out why they don't work.
I've had decent results with Scratch. For pure beginners though, still start them off with a semi-completed program.
One thing that we always did towards the beginning of a class was an exercise where we tell them to write down the steps to make a peanut butter and jelly sandwich. Then we'd literally get bread, peanut butter, and jelly, and follow their instructions to the letter. No one ever adequately describes the process: "put peanut butter on bread" - With what? the jar is closed, I can't! etc.
You might argue this introduces too imperative a thought process - but it gets the "computers do exactly what you tell them to" idea across very well.
* Don't teach unnecessary details. For example, students get hung up on the <title> tag because titles are usually at the top of the page. Just skip or defer teaching it - it's not important to their end goal of understanding code.
* Reinforce that the computer is dumb. I tell my kids outright that the computer is stupid. What this gets across to kids is that when they talk to this box, they need to be very precise with their language. Syntax errors---a constant demoralizer---then become not a shortcoming of the student but of the machine.
* When you craft / select exercises for practice, make sure they always fit two criteria: instant gratification and fun. By the former, I mean the students are producing code and instantly seeing a visual reward for it. With the latter---adults always forget that kids are kids. They couldn't care less about "Hello world". But an "About me" page is fun because they get to express themselves. When you talk arrays, don't push and pop fruits. Push and pop Justin Bieber and Ariana Grande.
I might expand on this in a blog post. Happy to talk more offline.
 - https://scripted.org/
PS - if you're in the bay area OR NYC and want to teach underserved high schoolers how to code, reach out!
Bootstrap 1 is computing tied to algebra concepts, targeted at the middle school age group (US grade 6-8). Students learn things like order of operations and what a function is while building up their own game. The curriculum has lots of activities that show students how to use code to generate images early on, which gives something immediately interesting and tangible to work with.
It runs in a stock browser (lots of students do Bootstrap on inexpensive Chromebook models), has a great support mailing list, and is used in schools across the US already. It also explicitly helps with math skills, which can be doubly useful in preparing for other STEM topics in the future.
For younger kids maybe a block-programming interface would be good: https://developers.google.com/blockly/ || https://snap.berkeley.edu/ || https://scratch.mit.edu/
For a less high-tech approach, you should look at http://csunplugged.org/ , e.g., http://csunplugged.org/binary-numbers/
In all cases I think the instruction/teaching is going to be keythrough the physical presence and support. It will be comparatively more difficult to bootstrap and get them to learn by themselves. Peer tutoring is very promising though: See: https://www.youtube.com/watch?v=dk60sYrU2RU and https://www.youtube.com/watch?v=y3jYVe1RGaU
It would be great if you write a blog post about this and what worked so people can follow in your footsteps. Good luck!
I taught this curriculum to 120 or so kids aged 6-13 from underprivileged backgrounds in the Boston area. The experience changed my life - kids are so amazingly smart and learn so fast - and they ALL got really into making websites! I have no doubt that for at least a couple of my pupils the early exposure led to success in tech careers, helping to break them out of generational poverty.
The Web is an incredible platform for learning, self-expression, creativity, and empowerment. Unfortunately in the age of iPads etc. I think it's more difficult now to get kids into web development than it was 10 years ago.
My contact info is in my profile if you read the curriculum and want to ask any questions.
One kid wrote a basic brick breaker and another pong.They all seemed to enjoy the process since it's pretty straight forward drag/drop logic.
After getting a jumpstart, they started building games using Scratch and sending them to each other to play (test). That's the hands-off part. The prep was simple instruction in reaching a goal with code, including the importance of accepting feedback from others. The school had already taught them to be respectful, so I didn't have to deal with a lot of egos. The boys all knew that some of the girls would be better programmers, and didn't fight it.
It was easy for the students to get started because it was connected to math that they already knew. Just different notation.
We use a web-based interface based on glot.io that was popular on HN a while back. The code is run server-side in docker containers.
Source code and screenshots:https://github.com/umutisik/mathvas
Web site:https://www.mathvas.comlogin details if you don't want to sign up:email: firstname.lastname@example.org: guestguest
1) Force them to learn how to navigate filesystems, the basics of file-based config, how to find and download files, and basic networking to make their video games work.
2) Give them little money, but a decent Internet connection, and make 3rd party private discussion forum solutions expensive, so they have to learn Linux and DNS and how to configure a webserver and a database and one or more scripting languages to stand up a discussion forum for their friends.
3) Make doing similar things for others pay way better than anything else they can do, even if they don't really like doing it 40 hours a week. Make this be true year after year.
I can vouch that this will work.
I had a lot of success with 'unplugged' computer science activities. Basically, any activity without computers. Let's learn what an algorithm is. Let's play with binary and make a 'secret code'. These activities are engaging and teach something worthwhile. It's very easy to get bogged down with tools, syntax and minutia when actually programming. For younger age ranges definitely try some computerless lessons.
I have no experience in teaching kids how to code, but I have quite big experience in working with kids in scouting, and what I can advise is to do with your students things that really work, and are not considered "boring" - like controlling LED lights, "hacking" websites with dev tools, making computers in Minecraft, etc. Your mission should be to open their minds and spark a passion to coding, then they'll learn a lot on their own and will have own ideas for projects.
Here are the main things I have figured out (3.5 years, ~6,000 kids in 8 states):- It has to be fun. Lots of people have said this already, but I have tried and failed starting with academic rigor. Hello world was a psychological payoff in the past, but for this generation it's more like a multiplayer video game (easy on scratch) or fake hacking a news website (people have said this above)- It has to be social. Anyone can get online and teach themselves, but most people won't. We hold weekly meetings at public libraries where the librarians facilitate (they don't know how to code) and the kids teach themselves. Someone mentioned Sugata Mitra +1.- It has to be inspiring. I try to help the kids feel part of a movement, like for example getting the governor to talk at a hackathon, and hand out expensive prizes. But not all kids care about that stuff, and the goal is to figure out what they care about and show them how coding can help. Art, business, sports, etc.
To the original post - I know a lot of inner city, rural and tribal libraries that would LOVE to have a shot at those donated laptops.
I've been using the CS-First curriculum from Google. It uses Scratch as the programming environment (a visual environment from MIT).
Overall, I like the CS-First curriculum a lotthough some of the themes are better than others (some lean towards animation/storytelling and are light on actual programming topics). In my workshops I almost always inject some of my own lectures and exercises with the kids.
Biggest issue I've run into is with Scratch being Flash-based. I'm starting to see browser issues more often (especially in a tightly controlled university lab). This could be a big issue for you if you're teaching kids remotely.
One new thing I'm looking forward to trying with a class soon is Hopscotch. It's a scratch-like visual programming environment for iOS. I've tested it on my own kids and they love it. Plus they put out a ton of useful videos and tutorials.
Bootstrap World (http://www.bootstrapworld.org/) is a curriculum for teaching CS and Algebra while making a simple graphical video game using Racket (similar to Scheme). You can do the exercises using Dr. Racket IDE or by using a web-based IDE (http://www.wescheme.org/).
You also might take a look at Picturing Programs (http://picturingprograms.com/) and How to Design Programs (http://www.htdp.org/). Both of those may be more advanced than what you would want to start with, but they are both focused on teaching computer science concepts more than the particular language and both are aimed at beginners without any background with code.
Another project was using arduinos -- and I even got them writing C, which more or less worked. You didn't need too much code to blink a light and they loved that. The mix of coding and the hands-on wiring up their breadboards kept it engaging. We did a little project where the light blinked with a frequency related to a temperature sensor, so when you put your finger on it, it would blink faster. One kid had the grand idea of having it blink faster when cooler and slower when warmer, and watching him figure out the math was great.
It was one of the more meaningful things that I've ever done and was nothing short of hard.
Here are the things I've learned teaching my siblings full stack development in a few months.
You have to be patient, programming is complex and takes time. Sometimes you have to re-introduce the basics multiple times and hold their hand along the way as they try to connect the dots.
Offer them free food, support their interest, help them with their school work, reduce their stress levels, and take a keen interest in their hobbies
Build something right away, and introduce theory immediately after the project is finished. When introducing new concept explain it in an ELI5 fashion.
Give them multiple resources. Sometimes one source of knowledge is not good enough and giving them other resources not only helps with repetition, but it gives them other places that will explain the same topic in a different manner.
Perhaps something to explore as a platform as well as it's not too expensive and comes with what you need to hack around.
It comes with Minecraft Py installed and has a few tasks to customize a level, character, etc. Python dev tools comes installed as well as Scratch and other exercises.
The idea of gamifying tasks across the platform is interesting especially if you think of a class of folks and a leaderboard or something - maybe not something to stress but some folks like competition more than others to drive them to learn.
You can also get things up and running really quickly with LOVE2d and Lua. love2d.org
It is an extremely rick environment..
Some other thing could be Scratch/Kara, but I'm not sure if it exists in english and personally I don't like it.
Stand back and see the fun :)
The book I wrote is designed for self-study and seems to work pretty well for some kids.
More details on my blog here: http://grahammitchell.com/writings/how-i-teach-beginners.htm...
Easy to use code editor with live preview, fun starter projects to remix, easy to follow tutorials.
It's available as an ebook as well as in paper. Short pitch: don't just learn to code by typing out existing code, learn how to think algorithmically and write your own code instead. Learn Scratch and Python side by side, seeing the same Computer Science concept in one and then the other. As well as the reviews, I've heard great anecdotal feedback.
Full disclosure: I wrote it. If I could get you a discount, I would, but I don't have that kind of sway with the publisher.
I've been working indirectly with school districts doing this for a couple years now, and have seen great results from curriculum very similar to this -- https://code.org/educate/curriculum/elementary-school#overvi...
There are other courses for different ages, too. Not sure what age groups you are looking at...
Once they know computational thought, THEN teach them how to code for an app.
After some of that, you can move on to JS where they'll actually understand programming logic. I built a site to teach people to code the web. Maybe it'll help you a bit: https://enlight.ml
This is a little more advanced, obviously, so it's not a great activity for total beginners. However, once a kid learns that they can make exploding blocks just by writing about 5 lines of code, they're totally hooked.
It also gives them an initial idea as to what real software looks like. Once that is demystified, their confidence as coders increases substantially.
* Robot Turtles
* Robo Rally
* Colt Express
* River Dragons
* Walk the Plank!
* Mechs vs Minions
Get them playing the games, and then after they're enjoying themselves and having fun, explain how it relates to programming, and replace the actions in the games with functions ("actions") you can do in apps.
I also used AppInventor, an online platform by MIT, let's you code visually in the browser, might be worth checking out.
Finally, show them this video:http://www.gamasutra.com/view/news/178938/Video_Is_your_game...
I've been planning on using Mozilla's Learning program (https://learning.mozilla.org/en-US/) a shot.
It's 2 separate sessions (1 for each age group) and 2 weeks in total. I have already outlined my plan based on it that I'm happy to share.
Does anyone have experience using their platform - share some thoughts?
It was my first time doing anything like that and found that CodeClub were really supportive and had a heap of resources for us to use.
Worth a look: https://www.codeclubworld.org
Doing it on paper by hand first is more important then it sounds, so they can really understand a)what they are coding, b)how fricking awesome computers really are.
was a pretty smart way to start out. Its possibly the opposite of what you want as it is completely unrelated to tools/manuals/etc.
Machines will code for us. I think we should push the vision further. We always try to apply the present for the future. The real future for these kids is not coding!
And yes inspect element is gold.
Starts at the very beginning, with a lot of variety in paths and lessons. Self-paced and gamified.
Not sure about the cost.
We run an after school classes program in Barcelona, Spain. Where we teach kids from age 4-15 "programming" or computational thinking.
Depending on age group there are different tools, and starting with the really young ones, we use tools like Hopscotch and other simpler coding apps, when we use technology. And even more fun is to learn about coding not even using any tech. So then we revert to using pen/paper/strings and ourselves, programming each other is a fun thing to do, and you can debug the code in group, and learn to understand how computer operates, and how to give orders.
Once the kids get slightly older, we use to go straight to scratch, (this is the first stop we tend to go to regardless of age if anyone is new, just to grasp concepts) This will not take to long if the kids are older than 10.
But even from 6 years of age we've seen enormous potential in using scratch, kids love it, it's visual in the output, super versatile in what you can do (we get blown away by the kids all the time). And you can indeed build very complex things with scratch, as well as you can produce a pong game in matter of minutes.
Main take away, if you want the kids engaged, get them super comfortable in Scratch, and get them to understand problem solving using computational thinking, rather than go straight to the browser and manipulate the DOM, that's not learning kids how to code, thats like peeking and changing values, not really getting to the core of programming.
When I'm mentioning age groups it's only if they have zero prior knowledge about coding, we have 6 years old that program as good as 12 years old but the 6 year old kids have been doing it for a year or more and the 12 year olds are just a couple of weeks into classes.
So it's also about checking the temperature on knowledge. Once you start moving up the ladder on text based programming, it's important to understand how to keep the vast majority interested, and not just the .consoleLog(); persons interested. Keep in mind that programming comes in many shades, and not everyone is hard core math nerd loving, but still can be terrific problem solvers, if given the right tools to do so.
I would say the biggest take-away for us since starting KidsHackClub.com is that make sure it's fun, do not indulge in long demos, or make complex things, and show of big projects, it wont get the kids into coding, it will scare them away. So start small, and build up as time goes, and make things that are visual, no-one enjoys staring at lines of intigers counting in the console, sorry peps, it's kids from the touch generation, they have played with phones and tablets since they where born.
Would love to chat more, just hit me up on twitter @LinusEkenstam or @KidsHackClub and we can also do email, but ping me on Twitter and we can hook up.
It's "classroom-ready", gives instant feedback and would be quite fun.
Teach them what data is: numbers, strings of characters, true or false statements. Let them play in the interpreter. Let them see the computer work for them. Teach them that a variable is just the name of a box and the value is the contents.
Then introduce tables. Just like a set of boxes with labels.
Then simple control flow. Now you can introduce them to Love2d and start them off making simple graphics programs.
Eight hours or so later, they can code small games using Love and will understand each line. Then you can leave them to their own devices and point them at further resources.
My favorite for older kids is to find an open-source video game with easily modifiable parameters, like lives, enemy count, sizes, etc., Start by asking them to change various things - class nearly runs on auto-pilot before too long.
Their policies were very sound, otherwise why would I rent my car out to a stranger? But they completely blew off policy and have just stopped responding to me.
Sometimes they post on Who's Hiring posts here, I've replied there to get a response but no dice. Emailed the founder, called all the numbers I had (they never pick up my calls now).
I sent the founder another email today after seeing this thread, but I'm filing a lawsuit next week (it's like a 3 page worksheet in LA) and then I'm blogging about the process.
It's crazy to think that suckers like me are out there lending their cars to these guys based on the trust and policy of the platform when in reality there is no policy (and therefore no platform worth trusting).
I live part time in Mexico. I had a problem with Telmex (the phone company). Five times the said they would come and fix the problem, but they never showed. I walked down the street to the Profeco office, signed in, and in half an hour someone from Profeco was on the phone with Telmex laying down the law.
Profeco carries the legal force of Mexico's federal government.
The next morning at 9:00 A.M. Telmex was at my door and didn't leave until the problem was fixed.
Some might think that the U.S. has all the answers, but we don't. I wish we had something like this in the U.S.
It turned out that the gym was being sold, and the BBB complaint was probably a negotiation liability many times greater than what they actually owed me.
I think its a lot like working with any individual. What they care about is particular to the company and it is often hard to know the correct thing unless you have experience with the company.
I did ban one company for about 5 years over a conversation that had me shouting at my phone and saying a word I don't normally say. It was quite strange as I normally speak slowly and lower when irritated while I try to figure out if I'm just being stupid or the person I'm talking to is actually a world class idiot.
Their rep (a different person) that called five years later was new and getting a lay of the land and I wasn't as diplomatic as I should have been. I imagine cold calling former customers is not a fun part of a reps day if their CRM doesn't warn them. I amazingly was still mad, but kept my voice even.
Sounds like Simple Mobile could really use a decent CRM or record every call because I get the feeling the metric is time needed to get you out of the queue or customers per hour. Reps do adapt to the metrics set not the goals of customer service or later sales.
Some years back, I had a pre-paid phone through T-Mobile and had ordered a refurbished phone from their website. Wound up needing repairs, under warranty.
Since it was prepaid, no loaner phone. The cheapo I picked up worked better as a flashlight than phone. But back to the story: I sent it in, and it didn't come back. I called a few times, being told that nothing was there. Then being told it was returned to me and I should have it. Each rep had a different story.
Each time I called, I had to go through the same troubleshooting to even be able to get anywhere. Most refused to escalate the call. This is pretty on-par with pre-paid phone customer service - I remember at&t had 2 separate departments for it. At the time, if you didn't have a contract, you didn't matter.
I finally got online and found an e-mail address for their cooporate office, complete with the name of the service manager for the company. I wound up speaking with one of his people in the main office.
Soon, I was sent a replacement phone.
Other times, usually with more traditional utilities, I've not been so lucky as the state i lived in had a weak public utilities commission.
Much luck to you.
For somebody like an ISP or cellular provider, where I don't have much option (in the US), I'm pretty much stuck complaining on Twitter, for the good that does.
For problems with consumer goods, Twitter can be good at getting quick responses from the vendor. Usually better for niche items, where the vendor has an image to uphold. As noted elsewhere, Apple probably doesn't care enough to respond.
Thankfully, I've never had a problem that was large enough to consider legal remedy through the court system. I came close on a car insurance claim, but it resolved days before I visited the local court (after months of being jerked around).
Talking to the local cable companies customer service and techs was useless, they either had no idea what I was talking about or insisted that it was not possible. So I found out that cable companies are regulated by the Public Utilities Commission. Placed a call to them. They had no idea what I was talking about either, but I cited the law and they looked it up and agreed.
The next day I got a call from the owner of the local cable company franchise, and he was very concerned. I got the impression that getting a call from the office of the public utilities commission is not a great day for a person in his position. Turned out all they needed to do was check a checkbox on my account and the firewire port started working. Had it up and going later that day!
If a company screws you properly, it usually means they broke a law. Find out what it is and who is in charge of slamming their hand in the door when they step over the line. Contact those people.
Conversations with customer support were going nowhere and they were going to place us "in the back of the line" again. An email to T-Mobile CEO's response team and SVP of customer support seemed to do the trick and our phones were shipped the next day.
Residential Cable and Fiber Optic utility companies are companies I refuse to do business with.
Their employees hate their jobs, and I hate the prices the companies charge.
Realizing that there is likely a balance to draw between pricing and employee compensation, I don't fault the employees at all, for despising the living they must earn to put a roof over their heads. I also realize that running an infrastructure project like a fiber optic plant [0,1] is no small challenge.
Nonetheless, I really do not benefit from the service, considering what I get for the chunk bitten from my wallet on a monthly recurring basis. To compound this, having to negotiate with unhappy people, clamoring for a drop of power taken from my life and added to theirs, when something doesn't go perfectly, really leaves me dissatisfied enough, to never go back.
Paying an ISP money (my own money), I'd rate as a task about as enjoyable as maintaining SSL certificates.
For anything else raise a complaint toAustralian Competition and Consumer Commission (ACCC).
Their customer support process was useless (they'll send historical bills to third party organisations for stuff like background checks, but they're afraid that consumers will use the bills to prove that they're misapplying charges). Thinking I'd just just have to navigate their customer service departments, I started recording the calls (legal in my jurisdiction).
After several conversations with friendly but incredibly unhelpful CSRs (thanks to corporate policy), I started to look at other ways that I could get my info. I issued a formal request for all of my personal data under Canadian federal and provincial privacy laws (PIPEDA). Their legal department claimed that I issued the request incorrectly ("by email"), so I responded by citing the relevant clauses (never mind that there was a paper version that I sent at the same time). Then they made a couple of other similar claims (that PIPEDA doesn't apply to them, my reply was that telcos are specifically named).
Seeing that they were drawing things out, I started to respond with expansions to my request (asking for potentially damaging things like a list of who they intentionally or unintentionally disclosed my personal information to), and threatening to report the issue to the Privacy Commissioner of Canada.
Some combination here seemed to do the trick, someone from their corporate security department reached out to me by email, and had the authority and power to give me my data. They ended up charging me an exorbitant amount for the original request's export (and never actually fully complied with my request for disclosures), but I ended up getting what I wanted.
I now take the opportunity to share my experience whenever possible, and figure that these types of stories being out there (along with the potential customers they lose) will provide the financial incentive for them to change their processes long-term.
TL;DR: CS process first, then recording, then escalating the request slowly using privacy laws to your advantage, then expanding on the request to give them time pressure (that eventually you'll request data they legally have to provide but practically can't), then providing pressure to respond by threatening to take it to a federal regulatory body.
I write a letter on paper and send it by mail to their complaints department.
I upgraded from a feature phone to a smartphone with Tracfone some years back and they deleted most of my minutes/data in the process, and then gave my phone number to someone else as well. It took contacting about 13 different customer service people and posting publicly on their forums before I finally got someone who would reinstate the data (but my number was lost).
Most of my communications with them were very similar to this, incredibly frustrating, with people on the verge of moronic, who would disconnect me and stop chatting when I got pushy about wanting what I paid for back.
Capitalism trends towards monopoly, and a monopoly doesn't have to give a shit about how they treat customers as customers have no choice. So a radical(as in, rizomatic) solution would be to make people aware of the actual problem and claim for better regulation or lobby if you have the power to do it. Now for a personal solution, good luck (:
Understanding JWT and how it works as it seems to gain momentum.
Angular2, React, Vue I think are all worth learning and playing with as each developer will have a different taste. It looks like React is getting a lot of traction everywhere.
ES6, Promises, Async/Await, TypeScript, Babel, WebPack etc are definitely worth getting familiar with.
Functional languages have begun to gain popularity and coverage as well.
On the frontend Elm is excellent. On the backend Elixir and the web framework Phoenix offer top notch developer experiences.
If you have experience in the dot net world... Dot Net Core is shaping up to be a revolutionary rewrite of the dot net ecosystem. It's fast and lean, as well as cross-platform.
If you are into lower level languages, Rust & Go have picked up a ton of steam in the past few years. Until recently they have been stuck in the systems level programming niche, but Go especially is beginning to take hold for API and more "front side of the backend" development.
To me, learning is a time / long-term-benefit trade-off. You're giving up your precious and valuable time now to get something that you believe will pay off in the long term. I'd love to learn everything under the sun but I only have time to learn a few things. So, I will spend the time where I think the biggest payoff is. A bucket of 30 slightly-related but "hot this month" technologies is a lot of cost for unknown benefit.
If you asked this question 20 years ago, there was a similarly-sized laundry list of hot technologies one could have learned, but I'd argue only a few really would have resulted in lasting long-term benefit. C++ was probably one of them. Linux was probably one of them. HTML probably. WebTV? Probably not.
TLDR: ES6 and its surrounding environment.
You may get skeptics who scoff at the new approaches and say you should learn traditional computer vision or machine learning first. I strongly believe these people are wrong.
The best tool in your toolbelt. You could easily build apps for the desktop, mobile, server, watch, tv, linux, etc. It's the digital clay to build whatever you want to build. Your imagination is the limit.
Android: Java -> Kotlin
iOS: ObjC -> Swift
Web App: React + Coffee -> React + ES6 (Backbone models)
Website: React/ES6/Redux/Babel/Webpack with server rendering
Backend: Clojure at the core; Python for heavy number crunching
- software defined radio projects
- ketamine as an antidepressant
^ note, I just think these are all technologies that have yet to reach their true potential
- Immutable architecture via Docker & containerization in general
- React & React Native
- Most of the fully-managed services on AWS... a lot of them are turn-key for things that used to take a lot of overhead
Try to avoid structured programming and mutable state where possible. Apply functional programming idioms and use immutable data structures if you can. Rust adopts many features from functional programming languages: http://science.raphael.poss.name/rust-for-functional-program...
Borrow checker will interfere only when you are trying to manage mutable state that is hard to reason about. If you absolutely must keep some mutable data structure around, you can fall back to unsafe code. There is nothing wrong with it, but make sure to put all unsafe code into separate module and provide only safe interface, that is absolutely unbreakable no matter how you use its public API.
Make sure you know about this module: https://doc.rust-lang.org/std/mem/ It is nearly impossible to create complex data structures without it, even linked list implementation requires it. Learn to use replace, swap and .take(). These functions provide great example of a safe API for unsafe operations.
Initially I would use constructs such as Rc<Box<T>> in an attempt to write Rust code in my old style.It took some time for me to realise that Rust's borrow checker was not just designed to avoid occasional data races, but shared ownership of state as a whole, and the problems it causes. Once I ceased trying to resolve each localised problem with the borrow checker, and I designed my code such that each and every object has a clear owner responsible for creating, maintaining and destroying it at all times during execution, I have had no further problems.
At the point you "get it", it is worth comparing the code you eventually wrote to the code you would have written initially. For me, it seemed that Rust's borrow checker had forced me to code in a better, safer style, rather than brainwashing me into thinking it had, so I have continued using Rust.
When you're writing (or read someone else's) functions, you should be considering three types of parameters:
* (&) borrowed * (mut &) mutably borrowed * () moved
Anyway, borrowed means, "I just wanna read some stuff off of that. I promise not to change a thing!"
Mutable borrowing means, "Gimme that--I'm going to change it! Expect it to differ as part of the output of this function."
Moving means, "That's mine now! I'm going to wreck it beyond any usage you'd try to do after I'm done. If you think you still want it, better hand me a clone."
It might also be good to spend some time working through the book if you haven't already: https://doc.rust-lang.org/stable/book/
Here're some HN comments about advanced patterns:
* https://news.ycombinator.com/item?id=13470592#13470904 * https://news.ycombinator.com/item?id=13470975 * Also recommends http://cglab.ca/~abeinges/blah/too-many-lists/book/
To set expectations, I tell everyone that I've encouraged to try Rust that they will hit this same problem, then hate themselves and want to give up on computers and live in a cave. Once they understand that they aren't just going to "get" Rust in four hours reading the book while Seinfeld is on in the background, I tell them that when they get frustrated with the borrow checker, just re-read the "Ownership" and "References and Borrowing", "Lifetimes" chapters from the book and then rinse and repeat. I tell them that by the fourth or fifth time it will "just click". So far, so good.
I know this isn't the most ideal method, but until it's cemented, you don't really understand the mechanics of what you're able to get away with. Persist... we've all gone through your frustrations, but can see the awesome bright light at the end of the tunnel (no, it's not a train).
I get most of my help on #rust on IRC. But for those who don't prefer that the discourse site https://users.rust-lang.org/ is probably idea. Or if you prefer reddit, do /r/rust -- they have a weekly sticky thread for questions IIRC.
The community is super friendly so "I'm really not sure where to turn for help" should be easy to solve. IMO just keep asking questions until you can internalize the rules you're getting help with.
>It seems like everything I know about structuring a program goes out the window when borrowing comes into the picture.
I know squat about borrowing rules, but why not just toss things on the heap (is that 'Arc'?) until you get better?
BTW -- do you already have some familiarity with 'C'? IMO that might be a simpler place to start. It has virtually none of the borrowing rules but perhaps you could quickly find out why they exist in Rust.
When a variable owning a value goes out of scope all the children goes with it. Remember in rust, there can only be one owner to a value (Rc and Arc variables lets you have multiple owners but that's for special cases). Therefore, if you're passing a variable to a function you should either
1.) transfer ownership to the function being called.
2.) have the function being called borrow the value through references. Since this doesn't transfer any ownership you can have multiple references to the same value. The value and its children (think of a Vec<Animal>) are taken down from the tree it belongs when the variable owning this value goes out of scope.
That's the cool thing that does rust does. The compiler knows when to free things just by following this one rule. A value should have only one owner. The responsibility of managing memory is now taken by the compiler instead. Hence no dangling pointers or segmentation fault unless you use `unsafe` blocks where this assurance isn't valid anymore.
Visualize your program to be manipulating these multiple trees made up of diverse types.
Learning Rust With Entirely Too Many Linked Lists: http://cglab.ca/~abeinges/blah/too-many-lists/book/
The point of this tutorial is not "wow it's hard to write linked lists in Rust", but that Rust supports a number of different memory models, and this tutorial takes you through each of them by writing a linked list using each one.
Additionally, it's snarky and entertaining.
All that said, I think it's a really good crash course on the Rust memory model, and once you have your brain wrapped around the various approaches, it should hopefully make it easier to understand how to avoid encountering those borrow checker errors.
Perhaps if you understood why these are rules are in place, or compare to other rules from other languages? GNOME project has nice strict rules for C: https://developer.gnome.org/programming-guidelines/unstable/...
(Full disclosure: never written any Rust, have just skimmed docs.)
By the sounds of it didn't have quite as much trouble as you're experiencing.
Having said that, I found experienced Rust developers grossly under estimate how hard it is for newcomers to the language (having asked questions on Reddit's r/rust which gave the impression these are some concepts developers can learn, then move on without too many troubles).
A re-occurring problem I found is while everything I could read made sense on paper - composing concepts to make real-world, you run into _many_ random problems that you don't even have the vocabulary to properly question or troubleshoot.
I found this works well:
* Ask general big-picture questions on Reddit.
* Ask spesific technical questions on StackOverflow.
* Ask various short/general questions on IRC (#rust).
As for fighting the borrow checker and compiler errors generally - ask some more experienced Rust developers if you're taking the wrong approach entirely.If this project is too complicated, try pick some simple projects where you're not continuously running into borrow checking errors. You'll still hit them from time-to-time, but then at least you're not overwhelmed by compiler errors.
> I'm really not sure where to turn for help.
both StackOverflow and reddit.com/r/<yourproglanguage> have rarely if ever failed me..
You can substitute concurrency for borrowing. Congrats. You're on the path towards understanding another paradigm. You're on your way to expanding your mind and growing a bunch of new neural connections. The learning curve means the eventual triumph will be that much better.
If you are implementing data structures and stuff, you might want to read more about the actual limitations of the borrow checker. Some kinds of code just can't be done with the constraints of the borrow checker. Embrace unsafe blocks and then gradually try to move as much code as possible away from those unsafe blocks. Try to think of "unsafe" as merely "unverified by the compiler". There is nothing inherently evil about unsafe.
If you are doing more application-level programming, I recommend you to get acquainted with the functional style of programming, if you haven't done this yet. Pick a more conventional language and then try to implement something using as few assignments as possible. Get used to and embrace immutability. Once you are used to immutability, Rust will be much easier too.
The other big thing that I wrestled with was my idea of in place mutation of data, and how much rust hates that. It took a while for me not to feel so bad about making a local variable to maintain ownership of some memory and "moving" it in and out of some parent structure. While it might look bad, there is a deal of trust you need to have with the compiler that it will in fact optimize out those move, and your main goal is to make sure ownership is explicit.
1. An outline of the problem you're trying to solve helps2. You should really stop by the #rust-beginners channel on IRC. Everyone is super friendly
Glad to see that you're trying Rust, and if I'm there when you stop by - glad to help if I can!
1) Unless you can afford a $1.5M US house, don't bother thinking you can just sweep in and buy a home within a month. The competition is way too fierce these days. It will probably take you about 1 year unless you're very rich already. Since you have a daughter, you need to figure out if you want to live in a cheaper area, far away from your work with a long commute, and send her to private school, or live closer to work, and pay an exorbitant amount, and probably still pay for private school.
I suggest paying the exorbitant rent for 6 months or a year, in a place close to work so that you familiarize yourself with the area, and then start the search to buy a place.
2) $30k sounds like a very generous relocation package. I think your expectations as to what it will cover are way too much. Things like multiple airfares and real estate broker fees sound like you have a sense of entitlement. Those shouldn't be covered in my opinion, those are the cost of leaving your home.
I would suggest doing a little more research on the tax implications of moving. The only major expense you can write off is what you pay the moving company. Everything else is counted as regular income and taxed. This can especially bite you with the USA's confusing AMT tax system.
Also, try and get the move done prior to May. Prices will go up 20-30% and availability will be a lot tighter for moving companies
 co-founder of https://www.movebuddha.com/
The first time I was given $2,500 to move from FL to AK to work for a small consulting firm. Really just a token gesture, but it paid for the ferry and hotels for the drive up. I had to arrange everything myself, pay out of pocket, and submit receipts for reimbursement.
Second time I moved from AK to TX to work for a large financial institution and the total was $22,000 and some change all together. They flew me down to house hunt for a week all expenses paid, then flew me down again when I actually moved. They had my car shipped, I had to drop it off at the port in AK but it was delivered to my house in TX. They had movers come to my place and pack everything, then deliver and unpack everything on the other end. All I had to do was pick the dates for everything to happen. It was like a military move but better, because I wasn't in the military anymore.
That said, $30,000 is pretty decent, though I've only moved within the US, so I'm not sure of the costs associated with moving from Canada.
The one relo package I've received during the course of my career reimbursed the cost of moving my household goods (we rented a 'POD' and a couple of helpers at either end of the move), gas/mileage for the long drive, per diem for meals, and up to X nights in a Hotel. It didn't cover things like rental deposits, costs associated with setting up utilties/services, DMV fees in the new state, etc. All in all, it probably covered about $15-$20k worth of moving expenses for a coast-to-coast move.
Also, be sure to check whether the money you receive is taxable income because that potentially will take another large bite.
Everytime I hear about similar subjects and people talking about business expenses I'm always spooked by how much business money people spend. When it comes to other people's money (company in this case) it seems that one doesn't care like it was theirs.
- Company A: $10k for relocation or cover the cost of a moving company to pack and move all of our stuff including our vehicles.
- Company B: $22k relocation "lump sum" (this varied depending on your circumstances; I was a home owner in another state so I got the max), company paid moving company to pack everything up and move it across the country including two vehicles, reimbursed airfare for flying out to house hunt and again for the final relocation airfare, paid for closing costs to sell our existing home, paid for company to help us buy or rent a home in the bay area. I also got a starting bonus but that wasn't technically part of relocation.
I know a lot of people who have relocated in the past. Everyone seemed to agree Company B offered probably one of the best and most thought the average for the area was a range with Company A at the low end and somewhere in the middle between Company A and Company B being at the high range.
Hope that's helpful!
Send me a message if you have any questions about my experience or any advice/follow up.
One key recommendation that no one seems to have noted here, don't sell your house or belongings yet or buy new stuff. The comment about the role not working out and then having to figure out what's next from x0x0 is coming from someone who knows what they are talking about. Give yourself at least 6 months to understand if the job will work out before buying at your new location. This is especially true given that you will be on a visa. With the job gone, you will have 3 months max to unwind and leave the US.
$30K seems reasonable, if not even generous. I guess it's all relative to your base comp and if you're getting any other bonus. For instance, I also received a sign on bonus that was divorced from anything about the moving costs.
To move from Portland to Seattle (I know, not THAT crazy of a move) it cost us about $10k including having the moving company pack up the entire house, storage fees, etc.
If the wife hadn't have been pregnant and I would've taken more time off (I literally ended one job on Friday and started the other on Monday) we could've probably halved that cost, if not more.
If it was me and I had a $30K lump sum I'd do what I could to minimize the charges the moving company was hitting me with by packing up myself (I hated how they packed us up and I had more things broken in that move than I have ever had in any move and I've moved across the Atlantic and back).
You also will want to look at selling anything that's kind of big or heavy that isn't sentimental and worth less than a few hundred dollars.
For example, get rid of any IKEA furniture you have and buy it again when you get to where you're going. It will literally cost you more to move than it is worth.
On that note, especially if you have lots of stuff and/or are in a fairly big house now- try to sell or give away as much as you can. Use this as an opportunity to clean out the accumulated life cruft and start fresh. If it was up to me when we moved we would've been able to fit it in the back of my pickup.
Save money by driving instead of having your cars shipped and flying- and take a vacation while you're at it. Shipping your cars costs a lot, it's a hassle, and they'll probably get banged up. Plan a road trip and have fun with it.
1 - I think that you want to be reimbursed, not given a bonus. The difference is you'll pay tax on the bonus, but if you're just reimbursed, no tax. If you must get it as a bonus, take your estimated expenses and divide by .6 to get the required bonus. Also don't forget that the US has two tax systems and this could bump you up close to AMT.
2 - make sure that, in case the job blows up, at bare minimum your required repayment falls by 1/12 each month. Better yet, no required repayment. You don't want to be in a situation that just happened to a friend of mine where 6 months in he and his manager mutually agreed it wasn't working and they want $25k back.
edit: I'd suggest 6 months with it falling 1/6 each month. If your new employer pushes back, I'd point out you're taking the far bigger risk here by moving countries.
The free rent allowed me to provide my future landlord with a previous address and a landlord reference.
When I was looking for a place, many places asked me to provide 1 to 3 months of rent as a deposit, because of a lack of a credit score. However I found a nice location that didn't have that requirement.
Taxes and rent are high in California. In that sense, working in another state... in a city like Seattle, allows you to keep much more of your money.
Then, I would interpret it as "up to $30,000". So keep the receipts/invoices.
The big problem in NGO space is obviously finding engineers: we've got some budget for this stuff, but getting people to join us, work at a lower salary and then code their heart out (because teams are tiny) is hard.
On the fun side, you get to see your code applied to fighting real-world problems every day :)
The value is in the dataset. Most of what's on top is handmade by fresh grads.
Spend your effort getting access to the firehose, and the rest will follow.
If you truly want to provide an open source alternative then curating some jupyter notebooks with the right libraries and integration is all it takes. A properly curated set of R libraries with a nice interface would also do the trick.
Demo video: https://www.youtube.com/watch?v=g0O8UNM0B7Y
There is a minimum physical hardware cost in the multi-million dollar range just to get started.
Not to mention the labor cost to operate and architect said hardware. Any thing in the Petabyte scale is looking at a minimum skeleton crew of (if they are top talent, more people if they aren't top talent) maybe 3-4 people between sysadmin architect and data engineers to keep things production worthy. The industry is still light on people with those skills so ontop of the bare hardware you are probably talking about 600 to 800 K in annual labor cost as a starting point.
This would all be before you get that much usage, the minute that utilization becomes high that skeleton crew won't cut it any more. The SysAdmin will need to turn into an on-call ops team. Data Engineering will need specialists for on-boarding vs analytics vs access layer.
If you are doing anything controversial don't forget the importance of a solid security organization which is highly challenging in the distributed computing space.
These are just the technical hurdles. Depending on the data you would be bringing in there are quite possibly legal barriers as well depending on the locality.
So again its not so much that this isn't possible, more that there hasn't been someone willing to endow the kind of funding that would be required to scale something of this nature solely for the benefit of the public good.
If you're a journalist or educator and want to check it out, shoot me an email, I'm andy@
I wonder if they'd release under the GPL3 or or BSD licence. Maybe they'll let me fork them on github.
As it gets a bit more common place, or if tools to do some of the heavy lifing get out.
Keep an eye on some programs like the one at CU Boulder, it should produce some interesting research that moves this along outside of the halls of industy.
The easy part is really the interface and information displays, the harder part (and where they make the lions share of their money) is in data connection services and software customization.
Building an Open Source Palantir tool wouldn't be all that difficult, in fact a great many organizations just build some subset of that tools using readily available open source components and with tighter coupling to their business needs. But these efforts are fractured and disorganized and there isn't a great centralized open source tool that really replicates their system.
Should there be? I think the general problem of pulling together lots of information into a common pool, then being able to annotate that data and map it to a semantic model is useful, and it generalizes well. But at the same time, many many sources of data are already available in nice semantically organized ways, with simpler interfaces (think IMDB, Pouet, Wikipedia, etc.) it's not quite clear that their approach offers enough payoff over these easier methods.
Do you know how it looks in Palantir's case? I've never actually seen it ..
The paid versions are called Google, Palantir, the CIA etc.
I use simple short serial codes, automatically generated & able to be emailed again when customers inevitably lose them. (Try to avoid doing manual generation & manual lookups, it will save you a ton of support time.) I avoid characters that are easily confused & can cause support issues, so no O and 0, no I and 1, no 5 and S etc.
As part of usability, I like how iZotope include the name of the product in their serial codes (eg SN-MYPRODUCT3-XXXXX). I've had issues with customers mixing up serial codes, and it helps if you can give them a hint/prompt (eg your key begins with SN-MYPRODUCT3).
If your goal is just to put a small indie product out and sell it, you don't have to over engineer the licensing. I've seen apps where every customer got the same unlocking code, and it still sold plenty of copies.
Brandon Staggs' article on implementing serial codes is still my favorite:http://www.brandonstaggs.com/2007/07/26/implementing-a-parti...
For the version I sell on Fastspring, I use a library called Aquatic Prime, which uses public key cryptography to validate license files. It's integrated with Fastspring, so that's convenient.
I've had a couple of customers where Aquatic Prime failed for hard to debug reasons -- I think the issue was that they had names with special characters that caused sorting issues. If I'd do it again, I'd probably do something simpler, since bugs in license validation code are really bad.
I wouldn't worry about piracy or cracked versions. Someone did crack my apps, but it doesn't seem to affect sales. The only people who care about cracked versions of my app are shady companies promising to get rid of cracked versions by sending takedown requests on my behalf. I wonder if those guys cracked my app in the first place...
EDIT:You asked about missing features. It would be nice if business customers had a way to see how many licenses they are using, and they should be able to easily buy additional licenses. However, building such a system would probably be very complicated and not worth the effort.
To be honest I think I've tried to do something too complicated. If I was doing it again I'd go for something much simpler since, anyway, no matter how complex the protection is, the application can eventually be cracked.
So I'd suggest a very simple system where the user inputs a serial number (that fastspring.com can generate directly), then the app verifies if it is valid. If it is, save it to the Windows registry (or similar place) and check it again every time the application starts. That way, you don't need to bother with any manual process like I do and it won't add much complexity to your app.
Your customers' sysadmins are probably already dealing with a bunch of commercial software, more dominant than yours. Go with the flow and lower the workload for everyone.
Seems simple to implement your own; you also get security through some degree of being less mainstream. But don't underestimate the variety out in the field or the amount of hardening that existing solutions have had.
In our case, I've never experienced a vendor's 'home brew' solution actually work properly when faced with the load of a renderfarm or HPC cluster (normal for customers like us) without several revisions. Hardly unsolvable problems, but then a dialogue back and forth is needed to fix such issues; wasted time for both parties, unless you are in the business of developing licensing servers.
Obviously there's a balance here with how much it costs to bring in a tried and tested solution (flexlm and rlm are the ones I know of) vs cost of the other options.
What we would like is a truly different approach that is compatible with other licensing systems. It does not need to be perfect, just a pain to the crackers so that it adds another hurdle they have to deal with.
The other question is the ease of integration and the cost of the software - if you spend weeks integrating and troubleshooting it, I'd be tempted to forego it for anything but a high-value product.
Keep in mind that troubleshooting it will be an ongoing process when some paranoid BOFH has locked down the user's machine to the extent that they can't do anything, including their job.
Paddle take care of licensing, trials, payments and associated VAT/tax obligations through to analytics either through the web or a number of SDKs for Mac and Windows.
Worth checking out
Previously - on PC, there was no Mac version at that time - the 'licensing' was encoded in an INI file which users worked out they could share. QLM has eliminated this kind of 'dumb' piracy, and via the application and logged attempts we can see if people are trying to activate the application on multiple PCs or Macs and so forth.
Next step is to get automatic license key generation working via Paypal payments. I can't really think of any features that we are missing with QLM.
We wanted to protect against this but, at the time, the keys did not have any built in date tracking so we tried to implement last date used tracking by writing a timestamp to the keys every few minutes - this proved to be quite flaky and keys would eventually become corrupt. The keys could be recovered by rewriting the original license file, but it was annoying to the users.
There are newer Sentinel keys that include an onboard, battery backed clock which we could have migrated to to solve that problem.
However, our company was acquired and the software team was merged into a larger group. The larger group had standardised on a third party software based license management system. So we migrated the simulation software to this system based on some guidance from the other teams. The migration was painful, taking many weeks. The functionality provided by the license management system is far less flexible than what we could do with the dongles. The license management system worked by fingerprinting the client machine via various keys/ids of installed hardware. The license files contain an unencrypted list of the keys/ids that the license was checking. So it is trivial for someone to read the license file and know exactly how to modify or fake the keys on a second machine to replicate the license. It took me less than 15 mins to perform a license replication to a second machine using just the license file and tools available as part of the default OS installation.
Realising this, I read the docs thoroughly myself as it seemed crazy that this could be the correct way to implement the license management system. Sadly it was correct. If effect the docs said a pure software approach is weak and if you need stronger protection you should use a hardware dongle. This is essentially why they call it a license "management" system vs a license "protection" system.
You should choose a license system based on who you target market is and how much you sell the software for.
If you are selling to the general public, having many users and (probably) lower license fees, then look to the pure software based solutions as managing hardware dongles will be onerous. If the pricing is reasonable and you make it easy for people to buy/renew then there is less incentive for them to pirate.
If you are selling to a enterprise or niche market with high license fees (thousands of dollars per licenses and up) then there is a stronger incentive for someone to try to break your licensing system. This is where a hardware based solution starts to make sense.
Note that even the hardware dongles can be beaten by a truly determined attacker. By going the dongle route you are just raising the bar higher.
HN discussion: https://news.ycombinator.com/item?id=12634577
Honestly, though, I'm doing everything with GraphQL now. It is a huge benefit for all aspects of application stack design now.
and their blog for featured posts...
Gulp for task (test/build/etc.)
Webpack for bundeling
React/Redux for the front-end
Bootstrap for the styling
Koa for the back-end
Socket.IO for the realtime stuff
RethinkDB as the datastore
Nginx as the reverse proxy to the API and static file server
What would I change in the future?
Getting rid of Gulp, most of the time Make should be enough.
Replacing Redux, Socket.IO and Koa with the Apollo stack. GraphQL with its subscriptions solves most of the problems I had with REST and WebSocket APIs the last years.
I'd probably use Preact instead of React, because it's much smaller. The React eco-system is unbeatable, so I wouldn't switch frameworks in the near future.
Don't know about Rethink, it's a really nice DB and the change-feeds play well with GraphQL subscriptions on the other hand the company behind it went down the drain :\
Angular 1 on the frontend unless you have over 100 bound variables on a page, then consider ReactJS or VueJS.
I've used third party libraries like devise_token_auth and I understand how JWTs work but is there a standard? Oauth2 maybe? I sound like I'm lost because I am. I still don't "get" authentication. The Oauth2 RFC confused me. Is there a dummy friendly tutorial on rest API authentication that also supports invalidating user sessions (unlike JWTs)
GraphQL / Couchbase / Node.js / React / Redux
Personally, though, I am a fan of ASP.Net Core + Angular 2,
If a project doesn't need a backend (boy howdy do I love keeping things in localstorage), Elm. I keep meaning to use Phoenix and Elm together but it never seems like the thing to do. I do love Elm a lot, though, I have a couple dozen widgets and what-have-yous written in it, and it's my preferred prototyping / build it in anger toolset.
Rails (Ruby) and Laravel (PHP) are some of the other solid options for building the backend.
Just bought "Getting Mean with...", which describes a MongoDb, Express, Angular and Node stack. (IMHO) However, first of all, the book is a waste of time and angular sucks.
So in the end, I'm planning my upcoming project using Node, Express, CouchDB and plain ol' static pages with a slice of ECMAScript (yah... I admit, Bootstrap and jQuery will join the party).
The application itself is hosted on a VPS running Arch Linux, behind nginx, and uses Postgres with PostGIS for a database.
Backend: Elixir (using Maru [it's like Ruby's Grape])
Frontend: Vue.js or Elm (maybe)
What is NOT popular anymore: RoR, Angular1, Express
I find then pretty productive and quick to get started with.
I don't buy into the whole Node.js thing, I much prefer the stability and maturity of apache. Mongo just because it's easy to use with python, and python because I love it <3
1. Draw.io  for general charts. Someone has already mentioned it. It's open source software. Draw.io supports flow charts and other diagram types. One thing that I love about Draw.io is compatibility. You can import and export the XML file that contains your diagram. So, I don't need to worry what platform I use. The final diagrams can be exported to SVG and images too.
2. UMLet  or StarUML  for UML diagrams. I have no experience with UMLet. I recommend this because it's open source UML tool and actively developed (they need contributors ). I know open source UML tools are not as good as paid tools, like Visual Paradigm and Enterprise Architect. Alternatively, you can use StarUML (not open source). It's free although you have to buy a license for continued use.
I don't know if it's the best thing out there, but it's pretty low risk to try it out. I haven't needed to look for anything better, and it does have some neat features.
Graphviz and a text editor for quick structured or hierarchical diagrams.
AsciiFlow, for rough and ready diagrams that I need to share quickly or for inclusion in documents where Graphviz is unsuitable.
Those three are my go to tools depending on what kind of diagrams I am working on. I'll use yEd from yWorks on FreeBSD and Linux.
Finally when push comes to shove I'll wind up with Microsoft Visio usually because of either compatibility or having to work on windows.
For UML I think your going to struggle with a pure open source stack. I've found diagramming tools to be one of the weakest parts of open source productivity suites. UML is quite likely to produce a lot of diagrams and your going to want good tools to deal with this. I recommend you chose the best diagramming tool for your platform of choice and just pay for it if it's not free. Wrestling with poor diagram tools is a complete waste of time when good tools that make working with diagrams very easy. I've yet to see a diagramming tool that costs more than the time it saved me. Even Microsoft Visio earned its keep over the few years each license lasted me.
Startups: 1) The goal is to make money, not build something. Focus on that. 2) It typically takes a long time (many months or years) to create a business. Be patient, stick with it. Think of it as a marathon, and an experiment.
Courses, e-books: 1) There's much more involved in their creation as what you initially think. It'll take much longer to build than you imagine (if you're about doing a proper job) 2) They won't sell themselves, you need marketing channels. 3) the trick with courses / books is to build audiences and funnel the audience into them. You can do this by creating free books / courses and upselling collected emails, or by collecting emails from other places / affiliating and collaborating. So don't count on a single book / course from making you so much money you can quit work. Build a series of books / courses instead - you'll see the results of compounding.
Before I started my career, I thought there was a point where products mostly built themselves. Coding changed that.
When I was in engineering, I thought there was a point where products mostly sold themselves. Sales changed that.
When I was in sales, I thought there was a point where the message mostly spread itself. Marketing changed that.
When I started my own company, I thought there was a point where most of the business ran itself. I certainly never reached that point.
I say it jokingly but early on -- I gained quite a reputation among people far smarter than I am, for being able to solve the most difficult problems.
But I never really did anything other than read. And most of the time I never had to go beyond the documentation.
The trick I guess, is to slow down and really read. There is no shortcut to understanding. And there is no solution without understanding.
- RTFM - Slow is smooth, smooth is fast
What this has allowed me to do is 1) recognize that I'm really not a failure because I can't do X, just that I haven't yet gotten experience with X, so I need to read and play/experiment with X more (and therefore there's pretty much nothing that I or anyone else _can't_ do with enough experience), and 2) learn how to better talk to my coworkers and technical friends so as not to say things that might make them feel impostor-y (because there are definitely things other say that will set off that anxiety in my brain, even unintentionally). I feel like both of these things have allowed me to be more effective and productive at work.
2. It's infinitely easier to produce excellent results when you like the job you're in. You may never find "The perfect job" but the closer the match to your skills, the better.
3. You'll be amazed at how few people give a sh*t about your new startup.
4. Paychecks are addictive. Then often essential. If you want to start your own business, try not to become dependent.
5. Learn to recognize The Dips from the cul-de-sacs (http://guykawasaki.com/the_big_dip_ten/).
1. You work for your direct report not for the company's mission.
2. You leave your manager, not your job.
3. People got to management at some point based on the amount of words that came out of their mouths. The more words the more "visibility"
Startups - Anarchy
1. Warm referrals - we value your network because who cares about your product???
2. "We just got $30 million in series B, you should come work for us you'll be engineer #4, with close to zero equity (sorry we took all the risks already) but you'll get a competitive base-salary! We're backed up by sequoia, etc. Oh... and we're building the next eCommerce t-shirt website!"
3. "Do you want to become my cofounder I have the best idea that will change the world! I'll be the CEO working on the idea and you'll build the rest. You'll be the developer!"
These are my highlights over the past 10 years.
When you're working, look to take the initiative when you can and always try to over deliver. Work hard and find opportunities to take leardership roles on something. Good managers will encourage this. But don't be annoying, look for real needs you can fill.
Talk to your manager very explicitly and figure out your career path. You can and should talk to your manager about exactly what it takes to get to take the next step in your career; a good manager will define this very clearly. Then, I'd say every 2-4 1on1s with your manager, check in on your progress. This is also a good opportunity for for him/her to point you to additional learning resources to get there. You should do something similar with other members of your team, especially those you respect the most. It also doesn't hurt to ask everyone what they're favorite books and blogs are.
Being on strong teams and working on complicated problems is key. Once you feel like you're not learning a lot anymore, make a career change. Early on in your career, I think your rate of learning should be the main factor in changing jobs. Change a few times early on (1-2 years a job), I thinks is also very healthy since you get exposed to some different environments/perspectives.
When you are just starting out, get good at a tangible skill that people will pay you for, and which will let you play in the arena where you ultimately want to be. For me, it was IT development, even though I had a business background.
If you are in technology, or work as a developer, work in a non-tech firm that leverages technology, rather than in a technology firm. It will be easier to stand out, and your contributions will be held in much higher regard. This point was actually made by Zed Shaw in one of his books, and although he took some flack for it, it's actually very good advice. I've seen it play out a number of times.
Don't let it dominate your life, of course, but you are unlikely to make money unless you actually want to, and you are unlikely to build a successful business without actually making money somewhere along the way.
There's nothing wrong or distasteful about money. It's a neutral substance with a lot of good uses.
- For me, doing what I am good at makes me happy.
- "what I am good at" is often very different from what I think I will be good at, or what I think I should be good at, or what I would like to be good at.
- I find working on big, daunting, time-bound things where I need to educate myself to deliver on, very rewarding (not necessarily easy and not necessarily fun).
- The right job for me is a mix of doing things that make me happy, and doing things that I find rewarding.
These are all broad generalizations but they are derived from my career. I worked in the music industry as a technologist for many years, and because I'm also a musician, I thought I should be happy doing this. I wasn't. I moved to working at an investment bank, the work was a mix of very challenging things that were a huge stretch for me, and also specific technical things that I was very good at delivering. I loved it, my career took off, and has been great since (I've done a number of different things after said investment bank).
Superficially, you wouldn't think that a person like me would be happy working in a large bank, but it turned out I really liked it, and was great at it. and if you met me, you would have thought I'd have loved the music industry, but I didn't, and didn't do very good work as a result.
- The core value of a company is its assets (market & placement, employees, financial situation) and its ability to execute iterating upon a product. If a company is in a changing market or is a startup the value is nearly wholly driven by the later. There are hacks around this, but they are rarely pretty or pleasant. This is "the" hard problem in making money.
- Big corporates are almost entirely dysfunctional. It beggars belief but its true. The simple fact is the markets are so mature that they don't need to do much beyond a few basic, core, routine actions. All they can do is fail from here, so everyone inside are afraid of doing something wrong instead of failing to do something.
- Always, always go the extra mile for people, loose gracefully, be nice - even when the situation is completely unfair. Your time will come, and when it does you will have gained an undervalued but lucrative chip. The moral high-ground :)
- In addition to being the right thing to do, playing nice and paying it forward are great strategies in business
- Given a task find out its context/goals. You may have been asked to do the wrong thing.
- For most, your mentor's will have the largest impact on your career. Find good ones.
- Don't be responsible for surprises. If you see something strange - shout.
- Be methodical in whatever you do: Analyse. Record. Measure.
- If you need a raise ask, but have your line in the sand.
- Read, research. Know your stuff.
- Ask questions. Speak up.
You will come across many very competent people with only a few years of experience, who are still at the bottom of the ladder due to how organisations are structured rather than a lack of ability.
Understanding this is key to overcoming impostor syndrome.
Seriously, I was one who used to sneer at the advice, thinking I can handle multiple things and by trying several things in parallel I increase my chances. Boy, was I wrong!
Pick one and only one battle (market), and fight it with all you have. Iterate quickly.
It's good and normal to ask people who might know, or research the answer. But sometimes the quickest way to learn is doing the thing naively, and then asking yourself what worked and what didn't.
Don't let your own second-guessing remove your confidence in what you're doing, or slow you down to the point of inaction.
When I started programming, 1968, minimizing these was the core value used in judging how good a programmer you were. This has not changed in many people's minds. Once I stopped caring, my imagination became free to consider doing things others wouldn't even consider. One program ran for three days. People thought I must be brilliant because of the unheard of things I was doing. Nope. I was just uninhibited by these hobgoblins of the past. I wasn't even a very good programmer.
I do admit there are situations where this principle doesn't really apply.
Shakespeare was right: we are poor players that strut our hour upon the stage and are heard no more.
"No, stop fucking around, do it right."
Part 2: if you want a big raise, get a new job (then get another new job for yet another big raise, etc.)
"We don't have a tech blog"
"This process is annoying"
"No one has fixed X yet"
You earn a lot of recognition if you make yourself that person.
So if you are an AWS user for example and want to be in multiple availability zones the Elixir distribution model will not scale and you'll have to use the same techniques and tools other languages use for distribution.
With that in mind, I think the whole distribution buzzword is way over hyped since the majority of companies will be leveraging cloud platforms like Azure, AWS, Google Cloud, etc.
I write Elixir code daily because it's an awesome language to write in and not for the distribution features.
I think the positives outweigh the negatives. It's nice to replace a lot of moving pieces in a RoR application with just Elixir and Phoenix.
You end up having to use tools such as Distillery and Conform in tandem just to be able to configure your app at runtime.
Another thing that worries me a bit is how such a large part of the community comes from Ruby. I wish it was a little more balanced with more diversity in regards to people's background.
Other than that, it is a great language, and I'm having a lot of fun with it :)
I think of it like the sculptor: Rejections should be like the process of removing all the material that is not part of what you are sculpting. Each rejection should chisel another chunk off.
If it seems like it's been a while since you learned something from a rejection it's time to review.
Even after refining to the point of having a finished sculpture, you still need to consider the possibility that you've got something good, but simply haven't pitched to the right person yet. Look for comments like, 'that's a really compelling|interesting|novel|worthy idea, but it's not what we get involved in'. In those cases, ask for referrals to people they think might be interested.
The point to cease then, would be when you're not learning anything new, and you're not getting references to someone who might be interested.
Each of the examples you listed would have a different protocol. If you get a no when asking for a raise, or pitching investors, you should be able to get an explanation for why. But if you get rejected asking for a date, you'll likely not get a reason you can use. So some intuition is always going to be required.
Goals + perseverance + time = your magic formula.
No pitch or message is going to get to the logic center of the other persons brain without passing through the survival filters of the crocodile brain system first. And because of the way we evolved, those filters make pitching anything extremely difficult.
ON this subject, Oren Klaff is brilliant > https://audioboom.com/posts/2273663-oren-klaff-pitch-anythin...
Eventually you'll break in a very interesting way. The rejections will just stop stinging, and they just become another part of the journey to your goal.
Your number one rule as an entrepreneur is finding your true believers.
Every rejection gets your closer to a yes.Learn from your mistakes (if any), optimize and try again with the expectation of getting a yes.
I know its hard but try to be more robotic and take emotion out of it as much as you can.
Lastly, know your audience. Cant use the same pitch with every person.
Every rejection is finding one way that doesn't work. Get enough and you will end up succeeding through a process of elimination.
Transparency is a dependency of trust. If any component lacks transparency, then it cannot be trusted. Period.
This means neither macOS nor FileVault are sufficient; neither are transparent, and therefore neither are trustworthy. Even a fully-free operating system like a Linux distro or OpenBSD is insufficient if you rely on closed-source drivers or firmware.
Next step is to detect tampering. This means that your laptop needs to prevent booting any operating system unless you've signed it with some private key, and needs to clear any full-disk encryption keys if any attempt is made at physical tampering. This is also the step where you ensure the physical security of that machine.
Once you've established physical security and full-stack transparency, you can start worrying about the encryption itself (which will need to be much stronger than the norm) and about sandboxing untrustworthy software.
Really, the only perfectly-secure computer is an incinerated computer. The best anyone can do is minimize the opportunities for such a state-level actor to, well, act. Transparency, tamper-resistance, cryptography, and isolation are the keys, and even the slightest error or concession for "convenience" can and will permit the likes of the NSA to actually infiltrate your systems.
If access to data "after the fact" is what you're really asking, then you use the strongest encryption possible (a few options), and have a deadman switch to physically destroy the hardware (e.g., melt the platters/chips) including any caching mechanism(s) that's off-drive.
Can somebody explain in more depth whether this is likely true, or an over reaction, and why?
Is there literally no way to stop the NSA from snooping? What if I built a laptop from multiple separate components ordered from different websites or purchased from different B&M stores using heavily tumbled bitcoin and ordered to several different addresses or PO boxes from a public library, encrypt all of the drives, boot Tails from a flash drive, use a yubikey or some other physical authentication method in addition to passwords, and never connect the laptop to the internet (remove the Ethernet and WiFi cards)? Put some dynamat in the case, just to avoid some type of fancy-ass soundwave-based snooping... maybe even throw some thermite activated by 5 or 10 failed password attempts. Oh, and a super-silent keyboard to avoid password grabbing via the sound the keys make. And a pop-up visor to avoid people looking behind your shoulder.
If your objective is instead to prevent data theft by identity thieves or commercial spies, the FileVault type precautions and standard security practices are probably good enough.
If that is insufficient it's not a fight over security. It's a fight about mobilization of lawyers and political contacts.
'Persistent intrusion' involves long-term monitoring to gain psychological and behavioral insight. The industry has evolved, it's not always just about running a keylogger and capturing some files, anymore. Some example of what persistent intrusion is about: running a 'wmctrl' equivalent every 12 seconds to capture classes and titles of windows currently opened, which is then uploaded and assessed. Keyboard typing patterns are also captured. Your music collection is captured, including which tracks you listen to and how often. Over the course of months/years an large amount of information is ultimately collected which is then sent to a team of data scientists and psychologists for data mining and analysis. The wealth of information allows you to predict the target's thought patterns and movements.
The microphone is NOT captured for standard targets.
Persistent intrusion is easier to prevent:
- Prefer Linux to OSX/windows. Prefer Arch or similar but Ubuntu is infinitely better than OSX/windows.
- If you are using Ubuntu, never download apt-get packages over http (the default), switch to a mirror that uses https. The reason is there is MITM monitoring on the packages you are downloading in order to look for packages they need to find exploits in, and to gain information about your system.
- Obviously, never connect to a website unencrypted. The connection will be MITM'd, a 0day will be injected in-flight on the return path from the remote host and your browser will crash.
- On Linux, in the event of a normal crash, never use the crash reporters to send a crash report. The connection will be MITM'd, a 0day will be injected in-flight on the return path from the crash acknowledgement server.
- Routinely reinstall your operating system every 2-3 weeks. It's easy on Linux and you can automate the install using scripts. Additionally you can mount your home directory seperately. Physically change the installation drive.
Unfortunately, incidental (one-off) intrusion is more difficult to stop since assumedly a single attack is all it will take to lose your data on disk, if this is the resource you are trying to protect.
Even if you are not a high profile target, any connection to a VPN or TOR is monitored, and your IP address is added to an array and entered into a lottery for penetration.
First they need an RCE, probably for your browser, maybe your TLS library. For a state actor, this is not a problem. Let's assume it's your browser. They need you to visit a page with their malicious payload. They can use phishing, they can take over a site you visit. Or they can take control of some machine in the path between you and sites you visit. From there they can MitM a TCP connection to inject the payload. (They might not even need to be in the path, but most exploits to MitM a TCP connection not in your path only work for long running connections). Now all you have to do is make an un-encrypted connection to any site, and they've got you.
Now they have taken over the browser process. Maybe you decided to be safe and do all your browsing in a VM, or use something like Qubes. Then the NSA has to break out a virtualization escape from Xen/VMWare/whatever. Difficult, but not impossible, and entirely within the NSA's capabilities. Once out of the VM, they can use an OS exploit to get into kernel space, or just do some privilege escalation and load a kernel module.
From here they've got complete control of your machine. They can do disk and memory capture, capture all your keystrokes, record your screen, etc.
All of the above can be done without leaving a clear footprint in network traffic or on disk. An analyst could find it, given time, but I wouldn't trust any sort of AV program or network monitor to catch any of this automatically. Exfilling data is a little more complicated to avoid leaving a giant footprint in the network traffic. Probably the best thing is to take advantage of that staging server they set up in your path: your machine can make a TCP connection to an innocent-looking IP address and get the connection MitM-ed. Break the data into pieces and hide it in innocent-looking requests to generic places and have it intercepted.
Notice everything I've described can be done completely remotely, without any physical access, and can be applied to basically any setup you have. The bottom line: once you're dealing with a adversary sophisticated enough to be able to use multiple 0days against ubiquitous programs, there's not much you can do. Your best defense at this point becomes security through obscurity: force them to have to figure out what setup you have to progress through your system. This might slow them down enough that they get caught.
edit: assuming it is not "connected" to the physical world, I'd partner with an embassy to house the laptop there. preferably a communist state where we don't have good relations.
It's maybe the wrong question, or part of a bigger question of how do you secure information you want to keep from a state-level actor. Your laptop may be part of that but also your mobile device, home phone, cloud services, and other people who also have access to the said data. Also how determined they are to get the data is another factor, and can they achieve what they need to another way without 'your' data.
Oh, you mean a usable laptop?
This might not work for everyone but for me I've actually built a few useful tools that I use everyday and have been able to continue building on. The only 2 requirements needed before I undertake something is 1) that it is something I see myself using on a semi-daily basis and 2) that I can build it within a day.
1.) Make it very crappy, and put it live for the world to see.
2.) Be embarrassed that this thing you made is so crappy.
3.) Use that embarrassment to make it better.
However, I suspect that the problem might be something else.
They say you should always be working on your best idea. Maybe you are jumping from project to project too fast?
Maybe you need to take more time to think about why you're starting certain projects.
Maybe the answer isn't finding more time working on projects. Maybe the answer is spending less time working on projects and more time thinking about possible projects.
Some random thoughts here. Sorry that it sounded a little Seth Godin-ish.
1. Put the project in a private GitHub repo. Paying for it adds incentive to work on it.
2. Break up the work into small tasks and add them as issues in the GitHub project. Aggressively separate them into milestones to stay focused (Milestone 1 == MVP, less important stuff in Milestone 2, etc).
The reason I think this works is that it is easy to get overwhelmed by all the work on a side project, and you have limited time to work on it. Now when you have time, you grab a ticket, complete it. Each ticket should be doable in a few hours or the scope of your ticket is too broad.
1. Work on your project most days. It doesn't need to be long - 15-30 minutes. This is mentally doable most days, and you'll find days that you just work. After a while, this becomes part of your daily routine and it gets easier. It might be even easier if you do right after something else you do every day - yup, make it a habit.
2. Have a variety of tasks to choose from when you can. This helps with the motivation as well.
3. Be able to congratulate yourself for getting chunks done - or something similar. Whatever works for you.
The things I have finished are nearly all things I have put a price tag on.
They may have been done before I shipped them, but most weren't. But once there's the threat of real users sending you money and expecting things to work, that's incentive enough to actually wrap up loose ends and polish what's there.
Notice that what actually happened was a slight redefinition of "finished" to include all the features that currently work, with non-working features hidden and no pointy bits sticking out the sides. As distinct from "all the things I wanted to include are now working to my satisfaction."
Eventually you can work toward including all those other things, but step one is to polish what's there. Then it's just a matter of polishing each additional feature after they're built and before they're exposed to users.
Add the housekeeping parts and extra features later (if it's worth it i.e. being used by you or others).
Eventually when you do enough personal projects you will find that the housekeeping parts are the same and can be bolted on easily. That's another reason it's not worth doing anything except the minimal viable part of the project.
4) Do something on that list
5) Go back to #3 until you are launched
By postponing additional work you give those ideas time to mature while making concrete progress and finishing your project at least to some sort of functional state. By the time you're up to those tasks you will probably have identified why most of them weren't ever worth doing let alone derailing projects for.
* Know the definition of "done" from the start. Working against a moving goalpost is a motivation killer.
* Have a consistent way to measure and track progress (word count, features completed, etc), and graph it over time.
* Break the big project into smaller, bite-sized projects. Each time you mark a small part as complete, you'll feel a sense of relief.
* Make progress every day. Even if it's just a bit, it'll feel good to know that you're that much closer to finishing.
For example for a long time I used to do very "philosophical" projects.
Huge ambitious ones where before you even start you already know it's by definition going to take years for it to get to somewhere worthwhile.
Except I wasn't ready to commit to such things, and I knew it.
That tiny half-assed part of a huge project will not amount to anything.
So overtime I accumulated a great graveyard of "this would be cool if I had worked on it for a year instead of 2 weeks" projects.
On the other hand if the idea is small and practical you can work on something for 3 weeks and have something nice and practical that is a concrete achievement.
So if finishing is your goal and you don't have tons of time to dedicate to a project my advice is to ask yourself how practical and realistic is it for you to finish an implementation of that idea in your desired time-frame?
If it's a huge idea you have to accept the reality that in your amount of time you can't finish a significant % of it.
And 5% of a huge project is often not as useful or impressive as 120% of a tiny project.
Bottom line, both of the projects I've started and finished have had monetary gain to it. The product and then the task. The task is helping with contracting I'm doing so making my job easier is sure a big incentive.
2. Break it into smaller tasks.
3. Prioritize those tasks and start with the easiest.
4. This is not time to learn, this is time to build. Use only tools that you know. Even if you know there is a better way, do it the best worse way that you know than the better best way you have heard of but don't know and will have to stop and learn. This is key, separate learning and building.
5. Work on it everyday, at a consistent time, preferable first thing in the morning.
6. Since you will be waking up early, go to bed early too and get enough sleep.
7. Work on only one project at a time, meaning, you can't work on other projects in between. Everything else goes on hold till this is completed.
8. Find ways to motivate and inspire yourself when you are feeling mentally down and low and focus is hard to come by. If you really like music, don't listen to it all the time. work without it, when you find yourself drained, that's when you should turn on music. Unless you absolutely can't work without it. Whatever that gives you extra boost, hold off from it till you really need it. Coffee? Don't drink it, till you need it. Think of it like power up. Save it till you need it.
9. Is it ship date? Release it, only 70% done? Release it!
1. Solve an actual problem. E.g. I built a library based on some use cases I saw at a training session I did at Cisco. Building yet-another-thing-that-has-900-implementations doesn't count.
2. Set a really hard deadline or limit. E.g. "must be feature complete by end of the weekend."
The goal either way is not to end up in place where it's 20% done: either you have problem or a deadline to keep you focused on completion
1) Define a single, easily understood high-level goal. Something that's easily understood and can be accomplished in a timespan of days or weeks. It's important that this is not defined technically, but in terms of what the application can actually do.
2) Repeatedly ask myself whether what I'm doing is directly contributing to the current goal, or is required to reach it. If it's not, stop doing it and figure out what's going to get me there the fastest.
3) Wake up early and work on my project before doing anything else. Every morning I wake up, take a shower, kiss my partner on the forehead and then I am out the door to work on my project at the cafe down the street. This is the part of the day where my mind is the most fresh, and it's not possible that something else has taken my attention and distracted me from the goal at hand, or tired me out so much I don't have the energy to work on it. Also once you get in the habit it's hard not to work on it once you wake up.
On a day to day basis, I dedicate 2 to 3 hours to my side project (side business). This includes maintenance for previously launched projects and work on the "new" project.
I only ever have one "new" project going that hasn't been launched.
1-Plan, prioritize, schedule;2-Use a scrum.. even if you are the master, the team, the stakeholder all at the same time. Tip: don't forget the stand-up meeting.
I've learned it from a German colleague (and great friend) who even use scrum to manage his own house activities... yeah he was kind of sick.
It might be better to get some value out of it and/or convince your brain why it's worth doing.
That being said, I do finish side projects from time to time, mostly because I can still see the potential after working on it for a couple of ours.
It's pretty good, and it goes into details on why we can't launch products/finish personal projects.
It's been frusrtating.
The links are only half of the equation (perhaps less, to me).
I scan most comments but I usually don't read discussions that have become too long (more than 2 or 3 back and forth replies) unless they're really relevant.
And I save time using this:
The comments are what make HN good.
The format isn't the special sauce, which is very similar to Reddit. I think the special sauce is the audience doing the commenting and voting, who seem to me to be experts who enhance the content in the links.
Like several others, I confess to mostly just reading the comments here, and mostly not the articles (the headline is usually enough).
I'm relatively good at scanning large volumes of text but it's a bit of a chore. So far I feel it's worth the effort though. The comments are usually more interesting than the linked articles.
One note: While I do think HN is reasonably effective at ranking interesting stories, the ranking of the comments do leave something to be desired. I do feel like I need to scan all of the comments - something interesting/valuable is almost about as likely to appear towards the bottom of the comments page as towards the top.
Jokes and other low-effort replies are thoroughly discouraged.
When I do go comment diving, I'm looking for substance. Not grammar, spelling, or minor wording or terminology back-and-forth.
Jokes aside, I actually do tend to value the content of HN comments more than the actual links. Very often, only the comments are read-worthy and not the linked articles. Sometimes, neither are read-worthy. After browsing HN for years, things tend to repeat. Yes, we know C++ templates are turing-complete. Yes, we know IoT often has terrible security. Yes, we know depression and burnout are bad. Yes, we know functional programming is super awesome. It repeats over and over.
I only skim the top comments though (and maybe their direct answers) and I only visit HN when I'm bored. Hackernews makes me restless and unproductive.
I scan the top 25% of the initial high level comments and if I don't see anything interesting I move on. I know that sometimes newer comments show up at the very top so I push through those to make sure I get to the higher upvoted ones.
There are commenters I like and ones I dread, I've experimented with extensions to allow notes and highlight colors / imagery to make it easier to find comments and prompt my poor memory for some information about the poster. If I ever get something I like, I'll release it, but the first efforts have been ick.
- View an interesting-sounding title in my RSS reader
- Click on the link to the HN comments
- Scan the top comments to see if the article is clickbait/insubstantial
- If it is not, read the article
- Either return to HN and read most/all of the comments or close both tabs, depending on the subject
I rarely find the comments on political links here particularly useful or informative, but I've derived a tremendous amount of value from the conversation on technical links.
If it's something I'm really interested about, I check back in ~12 hours to see if something new has shown up - at which point it's a scan to see the new comments.
There are however not so constructive conversations once in a while, but it's usually people that must have the last word, rather than irrational discussions.
Most of the value is in the comments, specially during these times where a lot of content on the web has a commercial purpose.
Yes, it's definitely worth it, if you are selective.
"read not to contradict and confute, but to weigh and consider" ~ sir francis bacon.
If discussion is interesting - I read more comments.
I may even decide to read the original article is discussion is good.
No one is looking out for you except YOU. PERIOD.
Don't forget this rule above. If your boss decides that they don't want/need to hire you at the end anyway, you are screwed.
Tell your boss "I look forward to working with you if it happens" and then keep applying wherever you need to apply.Your boss may mean well but at the end of the day, he has to report to someone and he has to look out for himself/herself.
Never ever put your career in anyone else's hands except yours.
You don't have to say you're applying elsewhere. Him asking you not to apply elsewhere, is not the same as him demanding you to tell him if you are doing so.
Business deals fall through all the time, I wouldn't put all my eggs in one basket. A contract is not a contract until it's signed. Even if they sign it, there's no guarantee that they will keep you on.
A minor issue, but something still to note: Your boss said the contract "may" be secured, not that it "will" be secured.
Which, of course, is completely unreasonable. Even if you have a written piece of paper with signatures on it, if they decide they don't need you anymore or can get another intern for less, they will effectively tear that piece of paper up and send you your way.
Moral: as others have already said, keep applying and let the cards fall as they might. Unless they have a full-time offer in hand for you today, you have no obligation to them. And I can guaran-damn-tee you that they feel absolutely no obligation to you. I mean, read your 2nd-to-last sentence: do you sense any commitment or obligation on the part of your employer? No, the commitment is completely one-sided.
BTW, if you're dealing with "contracts" (implying a consultant/independent contractor relationship), then he's not your boss, he's your client. That's a big difference.
The main thing here is that he's asking you to commit to something that he's not willing to commit to himself. To me, a measured, non-commital response would be in order. Keep it polite and let him know that you'd be happy to discuss a contract for the summer once he's able to commit to one.
No point in aggravating the client but this is a business deal (selling your time and expertise). Treat it as such.
Just respond saying something like: "Thank you for the heads up. I look forward to it."
Nobody looks out for you in this life except you! (within reason...). An employer has to look out for the company first.
It seems you don't have any hard stake in the startup, you have a soft stake in the work relationship there - but I would suggest that if that relationship doesn't stretch to accommodate the risks of both sides than it really wasn't that much of a relationship to start with.
You can be as kind as possible and say you're not looking specifically to leave, but that you feel you have to keep your options as open as possible too, and I think that is perfectly fair on your part.
Honestly, there isn't enough info in your post for anyone here to give a proper answer. eg the city you are in makes a difference. No worries, some general things to think about in your last year of college:
1. Don't work for a bad boss if you can avoid it.
2. Figure out what a bad boss means to you. But my criteria (especially right out of school) includes working for a boss I can learn from and a boss with high EQ (a boss who understands when his/her employees are stressed or exhausted or confused it makes a big difference).
3. Learning how to not burn a bridge is smart. But burning them happens sometimes. Try to please everyone and you will lose. It gets easier with experience (plus if someone is talented at their job, these ppl seem to be able to not burn bridges no matter how big an asshole they are). Maybe one reply to your boss could be: 'Thank you. Please let me know when you get that contract so I can discontinue my current talks with other companies'.
4. Believe in your startup and its product. Maybe more important than a good boss, ymmv.
5. Always be networking and getting to know people in your industry/in your city. Even if you don't call it "applying" I would be reaching out to other startups now. Email them say you are graduating and ask to learn more about what they do.
Apply elsewhere. Sounds like a fishy environment to work in to me.
If that "burns a bridge" then they're not very reasonable. They might not be happy about it, but that's a separate issue.
What if you want to explore a different area of technology? It would be very unreasonable to not talk to other companies and limit yourself to the same tech.
Why are you limiting yourself to one city?
And BTW if you are a developer in the US, $22hr is easily 1/2 what a real job would pay. Companies tend to not give a raise to market rate if they get you "cheap" initially. Absolutely do shop around and find your market value. I think you might see why they'd love to keep you on after you graduate.
"Hey! We're giving you a bad employment deal, so don't talk to anyone else, so you don't figure it iut"
I don't know if you actually want to use this phrase...
But to me, it's like this: If they guarantee, in writing, in a contract that gives you recourse if they fail to perform, that they will hire you, then it's reasonable for them to ask you to give them, in an enforceable contract, your promise that you won't look elsewhere. If they're not giving you that kind of guarantee, your answer should be "no", however politely worded.
I ask because I use Qt and c++ professionally, and have no use of QML. I could elaborate, but I'm more interested in why exactly you'd go for QML first.
Did you see https://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html already?
Shamless plug: You can also ping us at email@example.com and we might be able to help with architecture/development of Qt applications.
Interfacing C++ to QML is clearly not a priority in the design of the whole system. You can do slots/signals or you can register C++ objects into the QML namespace. Something along the lines of this tutorial: http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example....
Overall, I find the whole QML environment to be disappointing and I don't plan to use it again until it becomes more mature.
Their site has amazing documentation. I personally found Qt even in the KDE2 days miles better than React/Redux and non-Smalltalk MVC's. Since then it's only gotten better. Check out the examples here, the diving in section here, the book here, Stackoverflow has an overview of the whole system here.
You emit signals. Slots consume them. QObject::connect links the two. Queues are just queues in the traditional MQ sense. You don't use them in for, say, local GUI controls since it's generally a 1-1 unidirectional link (and if it's bi-directional, although I rarely need to do this, just ::connect( a,b,SLOT(),SIGNAL() ) then ::connect( b,a,SLOT(),SIGNAL() ). If you're still having problems read this. If you have issues, that blog also has a preceding page which has a comprehensive analysis of the underpinnings of the entire slot/signal system in QT. If you still have problems, get on IRC and someone will give you a hand. If you're having a major issue, contact me. If it's a quicky I'll lend a hand, if not I know a few absolutely spectacular HN engineers who I'd recommend in a heartbeat.
I'd be real curious as to what's you consider 'messy' about signals/slots is you're having re: slots/signals (I guess since I've used Moose's MOP with Perl 5 and CL they sort of came naturally to me). I have no affiliation with Trolltech/QT/Nokia/whoever-owns-whatever-now at all; I just think C++ is real easy to mess up, libraries are even easier and they did a way-above-average job with their code-base (not to mention, documentation, ecosystem, etc).
The setup you want to use for cross-platform is Qt5.x + QML 2.x + QtQuick 2.x (aka QtQuickControls 2 in newer versions). There's licensing issues on some of the fancy-schmancy widgets but most of the things follow LGPL, so just dynamically link, follow the rules, and you won't get sued. If you're working on a legacy codebase (gcc2.95.3 hollaaaaa), don't try to force new-style QT into an old project, or your experience will be similar to @bwoj. 5.6(or there abouts) and up is where QML started to shine.
N.b. you don't have to use QTcreator. I find it satisfactory but that just might be years of Stockholm Syndrome. Most people coming from the C++/MFC (or C++/WTL/ATL/COM/WinAPI world) are more comfortable with Visual Studio. No problem, the 'standard' procedure is just to do what you would do with any .sln and split GUI into another project.
I maintain a list of remote friendly companies. Here are a list of companies that might be doing embedded stuff.
I don't have enough information to help you, but on the website there is a chat community for remote workers. Feel free to ask questions there.
For anything low level where the company needs you specifically to keep the project going I doubt there are widespread remote opportunities.
Since this seems to be a throwaway account could you maybe disclose how much money you get after tax and how much you pay in rent? I'm curious because I'm from Europe and at a crossroads. I started doing mostly C++ but now considering switching to web because of the remote opportunities.
It would be nice to know what to expect from a carrier in low level stuff even though the salaries sound very good (150-200k) it's more important to know what one can realistically save in a year with that salary.
In your case and in order to be %100 remote, you would need to have access to a company intranet, access to the source code, be able to compile, deploy, run, etc. Can you easily do that in your space? If it's web, desktop or mobile all you need is an internet access. Just curious...
Also, there are places like Texas or Oregon where you can make 80-100k per year in a tech or related company. The cost is much lower outside of the main cities unlike SF/NYC where you need to drive 2h away to start getting into a 2-5 acre lot..
Outside of Austin TX for example, 1h away, you'll find huge lots for cheap. Contractors are super good and fast at building houses over there because they don't have to deal with stupid laws like "we" have in California for example. No state income tax in TX, Austin city is amazing (super crowded now though), then you get to be in the middle of noware at only 1h away from Austin. In the bay area 1h is the average commute to work. Same for Portland oregon, 1h away and you live like a king. No sales tax in OR.
The key is to find the right balance, being %100 isolated in the middle of nowhere isn't necessaraly healthy. I thought about it because I want land as well. But imagine being an hour away from a major city, living in a 15 acre property with a nice custom 5000 sqft house, a flexible state not far from a mini tech hub... sounds like a good alternative to your goal right? People don't realize how much work it involves to own a huge property. With 100 acres, it will become your fulltime (unpaid) job! 10-20 acres is enough for you to feel isolated.
Last but not least, the key here is to make sure you land a mortgage/construction loan while being at your current job. Lock it first because you will use your buying power and stable job situation to buy in a cheap place. Your current salary will help you qualify quickly and will help you initiate the process of getting/building a new house. Then look for a job in one of these places (cross your finger). Now you'll have the house, you'll have he job, you'll be able to quit-pack-and-go.
It is theoretically possible, but you would need to take an incredibly hard line about certain kinds of behaviors. Politics tends to actively encourage taking sides (pick your party, pick your candidate, etc), so this would likely remain an uphill battle for all eternity. But there is a lot to be gained by fostering genuinely civil discourse between people with very different views and backgrounds.
I have a long history of promoting the ability for people to share diverse views in online discussion. So, I know how that happens and how to make it happen. I don't do as much of that as I used to, because it makes me a target, benefits other people and seems to mostly bite me in the ass. So, based on personal experience, I will say it can be done, but it is incredibly hard.
Everyone has to adopt a set of beliefs. This includes non-religious people. Beliefs or worldview are the foundational system of default nodes in your cognitive framework that shape your perception. They are, by necessity, unshakable -- because if your beliefs were easily upset, then your entire understanding of the universe would collapse.
One thing that makes this confusing is that many people adopt a belief system based (supposedly, at least) on empiricism and the scientific method. Basically the idea is, all of our beliefs arrived through careful testing and calculations. Therefore they are valid. However, the reality is that, since no one actually does the majority of these experiments themselves, the _supposed_ empirical nature of all of these 'facts' just plays the same role as faith in religious worldviews -- it is a way to hand-wave away any rebuttal ('its a scientifically proven fact').
The other confusing thing is that even though core ideas are basically immune to rationality, people have absolutely no problem whatsoever constructing elaborate rationalizations for their beliefs on top of them. And most people are quite motivated to try to spread their beliefs. Its a way of recruiting a new member to your world. Perception of reality is actually so different between different groups that this is basically a literally different world you are trying to bring them into. Look at the divergence between left- versus right- leaning media streams.
Its not that worldviews cannot change, but you are much more likely to be able to change them early on in someone's life, and after a certain inflection point, core aspects of beliefs are extremely unlikely to change.
I also mentioned social identity. The belief systems are mixed up with the social groups, because it is necessary for acceptance in any group to adopt that group's belief system. And be careful not to contradict it in front of the group, even if they hear some 'rational' argument that a momentarily lapse lets them see as reasonable.
It'd be a challenge, but perhaps you can build one. Good luck!
We're working on making a curriculum out of it. Reach out to me if you want to discuss via chat or email. I have some ideas for an online forum as well.
One probably needs to ask the question. What is the intent of such a platform? Popularity or creating a balanced, mature repository of arguments on a particular topic. The first shouldn't be too difficult, the second would be the holy grail.
When it comes to politics, /r/politics was a good place until it was overrun by the Correct The Record folks. It's been one sided ever since.
> - A diverse set of opinions. For example not dominated by either liberal or conservative views.
Sure, that used to be the norm before up and down voting because the trend. It's the voting system that has made sites like Reddit complete cesspools, coining the term "down-vote brigade." Perhaps then most communities were more left-wing because conservative people didn't have internet-connected computers. But they were less exclusionary than today.
Hmm... meta-moderation is an excellent advent of the slashdots.
I tried to for many years with paper and pen. It never worked for me until I started using DayOne  on iOS and Mac. Simply superb design and one of my favorite pieces of software to use because it does (almost) exactly what I want it to .
When I type, I'm able to render my thoughts directly into text, whereas when I write with a pen I have to think about the physical process of writing. I imagine I'm not the only one here who feels this way.
A valid criticism of DayOne is that they don't currently support strong encryption, and their (optional) sync service stores your entries on their server. Their blog said that they are working on a good client side encryption implementation , however the last update was some time around the middle of last year .
If yes, do you find it useful?
What tools would you recommend?
A well-crafted acid-free paper notebook, comfortable pens.
Is there any specific methodology that you follow?
When journaling, do you try to track any specific aspects of your life or just write about anything that is currently occupying your mind?
I keep a system of journals. One series for personal thoughts, current life events, moods, reflections. One series for my mathematical explorations. Another for ruminating on the literature and polemic I consume. One for musical notes and development.
Any advice on how to get the most out of personal journaling?
Develop a process. A habit. Have a plan. Journalling for me is about making my thoughts concrete and objectifying my beliefs, opinions, and self. Writing is thinking.
Thanks for the answers!
Hope that helps.
1) Five minute journal. Used to keep track of mental state and review day mostly.
2) Way of Life app for iPhone
I track about 40 things from floss, to running, to meditation, etc. It's a very easy way to, in under a minute, run through and check off the things you did, or didn't do if the task is something like "eat fast food".
It's great for reviewing over time like a month or quarter to see how you are making out.
I really think these guys have nailed simple task tracking.
Yes. I mostly do it to unwind/relax. I think it's a good way to get your brain to slow down and collect your thoughts.
I use pen and paper. I stare at a computer all day and it's nice to take a break. Obviously, there are a ton of upsides to doing things digitally but for my particular use case I wouldn't benefit.
I used to keep several notebooks for various purposes. I found it to be a burden. I'm way less organized now but it's easier to just put everything in one notebook.
A lot of what I write about are problems I'm working on. I also write a lot of reviews, movies, restaurants, things I drank, etc. If I can't think of anything I'll usually write a short story from some writing prompts. I have no aspirations of being a writer, it's just fun sometimes.
Try to do it everyday. My life isn't exactly full of excitement so sometimes it's hard to get motivated to write about it but there's always something I could be writing.
For people who have the same issue, I came up with https://www.60secondseveryday.com
It's the fastest way of daily journaling - you make a 60 second phone call every night to answer the question "What do you want to remember about today?". From there, it gets transcribed, archived, and it's all searchable as well.
Disclaimer: I came up with the service after having a need for it myself
Goal setting, Mood Tracking, Habit Tracking, Reflection Etc. is hard to lump into one system, but I have seen it done by a few people.
I personally (and know hundreds of others) spent years writing in a blank notebook with a structure that I created for myself.
Something that would allow me to write my goals, map out my day, write what I'm grateful for, track my important tasks, etc.
I saw this as a problem, asked some friends if they had the same issue, and decided to create something that would have everything above.
You can check it out here: https://bestself.co/products/self-journal
This is not a "plug"
You can download the PDF on this page and check it out first.
I believe in it that much that I want everyone to have access to this.
-AllenCo-Founder | BestSelf Co.
It's intended for my eyes only. I record my moods, personal battles, health and weight information, self-development. I record snippets from good books, attempts to implement changes in my life, what happened and why.
It's a real eye-opener to look back over the years and see myself hitting the same problems over and over, such as overeating and procrastination.
Occasionally I distill all the positive, uplifting and useful bits into a "Highlights" document, which is really good to dip into when I need self-motivation. Whilst reading books and articles by others can be useful, there's nothing like reading your own advice from years ago, and re-living your victories, to get yourself back on track.
I recommend it, making it private, and being totally honest in what you write.
I write down all things in my mind, things I tried out, things that did not work, etc. Every time I get new results or evaluate something, I also try to include a table or graph with intermediate results.
The journal helps me to see my progress over time. I can grep through it and see if I already tried something. I can go back and see how my results get better over time or whether I hit a dead end somewhere.
I also write a small summary directly after meetings and talks and note feedback from supervisors.
I use org-mode (emacs) for this and can recommend it. All my entries are sorted by year and week number, so I try to write a summary at least once a week. As I use Emacs for all my programming related tasks, the org-mode file is open all day anyhow, so I usually add things more often than that.
I tried a bunch of different programs, but I ultimately ended up writing a python script that creates a new .txt file with the datetime as the name("2017-01-20-22-02-50.txt"), launches vim, appends the day, date, and time to the top of the file ("Friday, January 20, 2017, 22:02 PM"), and then I just write my thoughts down inside vim.
I'm fairly disciplined about writing an entry everyday, but if I weren't, I'd just have it run as a daily cron job.
Having each entry as its own file is nice since you can just grep a term and find all the dates + times that the term was mentioned.
It's been incredibly useful - just this week I realized that my daily headache started when I began taking a new supplement, so I cut it out and sure enough, no more headaches.
Last year though, I made a significant improvement that changed the way I keep my journal: I added a bit of magic that moves all journal entries marked as "todo" from the previous day to the current day when a new daily file is created. This allows me to keep a persistent to-do list that I slowly work through, where finished steps end up in the journal.
https://ifttt.com/applets/14412595d-quick-ohlife-replacement... (I have no idea why we now can't share recipe on IFTTT, that's sucks...but it's basically, every day at 8pm, send me a mail with the title "How did your day go? #ohlife")
I started to aid my sleep, putting all the racing thoughts in my head down on paper and closing the book on them was very calming, I can then forget them for a while.
I also love the act of translating your nebulous thoughts into (semi) clear language of written words, to me it's a focusing lens on your life, and allows associations, perspective and ideas that may not come about otherwise. Even if just because it forces you to reflect for more than some fleeting seconds.
I never see myself changing the primary method of writing these down freeform. But every time I finish a journal I do read back through and write up in google docs some bullet point style wisdoms and take-aways to remember for the future .
Glad to know there's others that get benefit from journaling too.
Yes. There are many advantages to keeping a personal journal. It allows you to have better recollections about what actually happened in the past, which is important taking into account that memory is constructive and prone to distortion. Many ideas and insights are forgotten, recording them is a way to fight that.
Emacs and Org-Mode. Git. Markdown and any other editor is a good option also.
I use some ideas from GTD. Explaining my whole methodology would take more time than I have right now.
Make it an habit. Put a time or word limit and just let the words flow. Make it seamless, for me capturing an entry is pressing 3 keys.
I've given it a shot several times but have failed in the past, but what has made it easy to keep up as a routine this time around is a finite duration to write within + the requirement of continuously typing w/o breaks; to achieve those two things (shameless plug), I built http://write.surge.sh: it basically allows you to set a duration within which you journal, and if you stop typing for more than a few seconds within that duration, your current session is completely reset.
It's also open source at http://github.com/krrishd/write for those who are interested in how I built it :)
As far as tools. A pen and paper, that's it. If you want to get fancy flip a notebook over and write from the backside in for a simple two topic book. Earmark pages. No methodolgy. I prefer to keep it messy, then I don't have to deal with constraints. Learning cursive helps
To get the most out of it I keep a extra notebook and pen folded in my breastpocket of my jacket. When I'm commuting, need a quick scratch, out for a dart it's right there. I prefer loose stream of consciousness writing to just codify the damn ideas.
For me using paper for note taking is relaxing and more natural then trying to fill a text box or fighting software to make a graph. I refuse to use some service for this on the same grounds that I refuse to work with digital painting programs. Physicality matters
Funny you should post this now - the solution that is working for now - is a google form for which I have a shortcut on my phone.
I did as much as a could to minimize typing - lots of multiple choice, linear scales, checkboxes, etc. Then one open text field at the end for notes.
I've actually been sticking with this - before I go to sleep I open the shortcut and fill out the form. If I feel up to it I elaborate on the notes, but at the very least I fill out everything else.
Been working so far - quick, easy, and the fact that it's in a spreadsheet makes it useful.
Over time, you notice patterns about what really energizes you. For me, this is the high-order bit, more important than any specific time or life hack.
(Examples and analysis here: https://betterexplained.com/articles/life-lessons-10-years/ )
Last November I started keeping a physical Design Diary, though, and I've managed to keep it up since. I come up with tons of ideas for games, stories, websites, etc, and I tend to lose the ones I don't actively pursue over time, so now I just write it in there. It's nice because with pen and paper I can actually draw the designs of things too, although it's still mostly text. I also put notes from lectures on design I listen to in there also. I also just record whenever I work on those projects and some of the decisions I made while doing so.
I also put some personal things in there as well to provide some context and help aid my memory of when things happen (I have a terrible memory), but I do write this with the idea that somebody might read it or I might want to share it someday, so I try to fully explain the ideas as well as I can.
In fact, I don't just take notes in there or anything. I take notes on scrap paper first, since my natural notetaking style is pretty messy and filled with gaps, and then I sit down later and take those scraps and expand on them in the diary, sometimes days later.
It's already become one of my favorite physical artifacts (that's not an actual game I've made), and I'm trying to start a second one that retroactively goes back to previous games and stuff I've worked on.
The only structure I have in there is I keep things segregated by the day it happened on, more or less. Sometimes I have lecture takeaways put in there weeks after I actually watched it though.
I don't use any computer tools at this time. I use a Black and Red notebook, because I didn't like the ratios of paper quality, sizes, or lining of others that I tried. Writing on the computer doesn't seem to have the same effect (and this is confirmed by various studies, from the looks of it).
There's no particular methodology. I try to write often, but don't find it necessary to write every day. If I don't feel like writing, I don't, usually, I do. I put the date down, and that's it.
Pretty much anything goes there. Events that happened, predictions and outcomes, personal concerns, dark thoughts, quotes, prayers, litany, ideas for projects, mini-stories about fictional worlds, notes about topics, insights, poems, math problems, diagrams, doodles.
But seriously, I've thought about doing journaling for a long time and have never really done it in earnest. I keep copious work notes on a combination of a pen and paper notebook and a digital notebook. I've developed my own system for tracking tasks and notes over the years that works for me. Its not too unlike Bullet Journal except I don't do all of the monthly tracking stuff.
I started a personal notes journal on my PC, but I only put goals and important ideas that I have in it. I haven't made a good habit of writing daily. I believe that a honest journal would consist of daily freewriting and recalling/reflecting on the events of the day.
For my digital journals I wrote a couple of scripts for automatically entering in the dates. Used to use Evernote, but I dropped it after I started realizing it was a kind of shitty walled garden and it would be hard to get some of my notes out of it down the road. Plus they began restricting the amount of device for the free tier.
I have over 100,000+ words sprawled across 15 years of plain text notes and it works wonderfully.
I've already filled up one notebook in a month's time, and it has served as a very low-stress way to keep my stream of thinking clean and unburdened from previous thoughts. I know that they're safe on paper, and I can move on from them. When it's time to pull all my thoughts together (for example, I just finished a lengthy proposal) all I have to do is refer to my notes, which were put down when they occurred naturally, and not in a "forced" deadline environment.
The paper/pen comes in most useful at night at bedtime when my mind throws up two or three ideas that I'd like to keep. (But not get out of bed or stare at a screen.) After I jot down my two or three intrusive thoughts, I sleep more soundly.
I use it primarily as a todo-list.
Each morning I write down what I plan to do today.
I also try to plan each task in terms of time, so for example:
9am - 10am: work on task A
10am - 11am: look into task B
Then as the day progresses I mark down things as [DONE] when I finish them.
What's cool is at the end of the day you're left with a journal of:
1. What you intended to do2. What you actually did3. What you didn't do
Usually when I think a thought of note, or I'm experiencing a particularly strong emotional response, or just general dilemma running through my mind I'll write down what it is I'm experiencing or thinking.
Some days are quite long with multiple entries, some times I go a few days without writing a thing. I've thought about littering my entries with "tags" for easier searching, but I haven't done it yet. I don't really review what I've written very often. Plus the entries don't take long to review whenever I'm in the mood.
I use it more as a therapeutic tool, a way to discuss my thoughts with myself.
As for an application, I use Writely pro. But any text editor for Android that can open/save text files to a folder will work for what I do. Plain text synchronized across all my devices is the main thing. Future proof, plus it's my data.
Since 1999, I've been using DailyDiary  to journal and track specific topics such as my personal day-to-day activities, weight, exercise, health issues, kid's day-to-day, specific projects, etc. The key for me is to be consistent, and the email nature of DailyDiary tries to reduce that friction as much as possible.
Having so much (searchable) written history has proven immensely helpful on occasion. And it's fun to reminisce when reminded of an event in the past. The kids get a kick out of hearing stories of their past too.
Disclosure: I'm the founder.
I use plain text files where I just prefix every entry with a timestamp. Whenever some major topic starts reoccurring I create a separate file for that topic. For example I have separate files for various project ideas, a file with a list of things I want to teach my children, a file with a list of things to consider when choosing a residence country.
I'm storing four types of content:
- J, journal entries, one file per day with a summary of what I've done that day. Already proving useful, I forget what I did three days ago.
- N, notes, working notes on a topic. I treat this like a half neat half messy notebook. I write things in topic files while working through a problem.
- T, thoughts, similar to notes but much neater. Often longer form and drafted and rewritten a few times these are small 'articles' on my thoughts on a particular topic. One or two may get converted into blog posts.
- Q, quotes, if I find a quote in a book or online I find interesting it gets a file in here.
The output is a linear weblog style currently.
I've only had this running for a few weeks and it's rather cumbersome at the moment. What I hope to improve on:
- Improve onboarding, hugo has a nice tool which sets up new documents and opens the editor: `hugo new n/topic.md`. I want to build on top of this to reduce friction when writing.
- Away from PC. This system works very well when I'm in front of a computer. When I'm not I have read-only view on mobile. I take notes on paper, the best of these get transcribed into the system. I'd like a way to write on mobile and have that automagically get added into the system. The backend would probably be an AWS lambda function, frontend, perhaps a web app?
- Frontend, I want search and better browsing, tagging &c. But this will come later, when I have more content.
I'm trying to stay detached from any 'app' and maintain control of my data. The 'solution' I'm building will hopefully serve me for a long long time.
I had tried journaling before but a full, blank page was too much in terms of time commitment and stress I put on myself around it. This format gives 6 lines per day and feels easily doable.
Each page has 5 entries on it so you can read what you were doing on that day in previous years. Its nice to have a direct comparison to remember what you were doing last year and see how you have improved, fallen short, or stayed the same as well as remembering what you were doing then. More than once I have been reminded of a friend's wedding anniversary through this.
Totally recommend it, but keep it short and don't judge yourself if you miss a day.
I wrote a simple script 14 years ago to automate the organization for me.
I just alias a simple one letter command to "jour.py work" or "jour.py blog" and running it will open a file with a date-based name in my editor of choice. Re-running it on the same day gets me the same file.
This method has the advantage of a very organized, timeless format. The disadvantage is that it's on my local machine. Of course, a cloud based file store could be used, but there is no default encryption and there is no mobile option.
I have one file per year, I write one entry per day, mostly what happened during the day, in the "journal" part, and make notes in the "notes" section, notes can be writeups, code snippets etc. Each new year, I condense the best of the notes section into the next years new note section.
I do this in org-mode, using Spacemacs, its a bit of learning curve involved with Emacs/Org-mode but Spacemacs sets it up for you very neatly.
I store the files on dropbox.
Since its my journal, that I want to make sure that my kids still can read when the times come, this UTF8 text file format that Org-Mode is, is absolutely essential.
> Do you keep a personal journal?
For the last two years I've written a journal entry almost every day. Some days I didn't write, like during travels, but I added information about these days afterwards. Sometimes those entries were pages long and contained conversations or dreams, sometimes it was just: "1. Dezember - 3. Dezember: much work, travelled to Budapest"
I stopped writing about three weeks ago.
> If yes, do you find it useful?> When journaling, do you try to track any specific aspects of your life or just write about anything that is currently occupying your mind?
My purpose of the journal was to keep track of my motivation and good mood, so I put mostly positively worded events in there, like "* Went to training, despite mismotivation of the last days". I also recorded things that I never / seldom do.
It served that purpose well. I don't need it anymore, that's why I stopped, but I'll probably pick it up again someday.
> What tools would you recommend?
Plaintext Files. Or MacOS Notes. It doesn't matter really. Finding the perfect journal is procrastination to prevent having to write a journal.
> Is there any specific methodology that you follow?
Write an entry for every single day, no matter when, no matter how short it is (but make it at least one grammatically correct sentence). If you forget, just write the entry for yesterday.Mark the entry with date and time.
> Any advice on how to get the most out of personal journaling?
After doing it for a while, you will develop a feeling about whether and how it benefits you. Follow that feeling.
Apart from that: Keeping a journal will always enable you to reconstruct and remember details of your life 10 years from now. One key sentence is often enough to help you remember the day.
That is why I'm going to pick it up again.
so what I do is this. Date at the top, I write out what I am greatful for in as many lines as I need, typically 2 or 3. I put down a big goal, and I put out my tasks for the day and mark them off as i go.
It serves as a scratch pad, its not holy, I rip pages out, or whatever.
I use the moleskine volant because it is rugged, but not stiff, I can roll it up and sort of stick it in my pocket if I have to. I try to take it everywhere.
I have yet to find looking back over it useful. I helpful in organising my thoughts when writing it down.
I used to use Day One but now I use a simple web app running that I built to replace Day One and Evernote late last year.
I'd build your own journal setup. Plain text files would likely work too. Make sure to back it up. It's a pain changing the system after you've written out 1000's of entries.
I tend to write about what's going on and what's coming up as well as what I'm thinking / worrying about.
Advice would be to just write it for yourself - assume it'll only ever be read by you. I find that helps me get things down without fussing.
- It is useful to process my thoughts, capture high and low moments in life, braindump when feeling overwhelmed.
- I use VIM + markdown, with a new file per entry. I find it very effective. I journal whenever I feel like I need to or should.
- I don't track aspects, I just write about whatever I feel like writing about.
Like most things in life, the answer is just do it!
I keep an unstructured, personal journal, and half of what's in there are thoughts I have, going to bed or waking up in the morning. There are some good pieces of writing that've come out of it and just yesterday, a former coworker and friend thanked me for some observations I had about the company we once worked at. Sometimes the things we reflect on can be a big deal.
I have been writing in it for the past year and it has really improved my life in many ways. I have written about it detail here :
The feeling of knowing that not a single day has went unwritten about is amazing. I know what I did on every single one of these days and it feels really empowering to see yourself evolve with time.
I tried Day One, but I got mad that they switched away from dropbox. They honestly could have solved the problems, but I can't fault them entirely for taking the easier route here to make supporting it much easier.
I'm not sure what I would journal if I did keep one for real.
Very much. But my useful is mostly about personal stuff and once in a while revisit. Looking at things in retrospect. Sometimes I get something to learn, sometimes it's just fun or once in a while it makes me sad too.
I have been doing it on notebooks (paper journals; and not the fancy and famous ultra costly ones). Really. It's very recently that I started to put some entries on Android Journey app which are kinda too personal to leave in my daily diary which I don't lock in a box. So, I will recommend a paper notebook and pen. I am from India and I am always in the hunt for good and affordable notebooks and fountain pens - we don't have many in the former category. Anyone looking for something good here try Brahma Series (or Brahma Forces) notebooks - they sell Moleskine like notebooks (honestly paper quality is actually a lot better) minus Moleskine's marketing cost in its price. (disclaimer: nothing against Moleskine)
Not really. Some days I just write about something that happened. Or something I thought or just anything. Some days I skip. Somedays I just pen a poem or so (or something that I kinda thing are poems). A short story. Or a sketch (yeah, I make sure the notebook I get have good pages and works well with pencils, ballpoint pen and fountain pens - the latter being my favourite), a caricature, a schedule, sometimes card game score when I am travelling with my friends and we had a game, travel itinerary. I have found some pages where there's some math of splitting trip expenses among friends. Something from a book I am reading, or a film I watched, or something about it. I travel/backpack a lot and that's when my diary gets maximum attention. But these things don't happen very frequently and it's mostly the typical diary entries. So, it's my personal diary and I wrote it just because I like it. It it helps me in my development in some way then it's entirely coincidental and it wasn't the intention at all.
Yes, as explained above. It can just be anything.
Well, I don't think you could get something useful from my kind of journaling (I believe you are looking for journaling that is done from the productivity point of view and similar expectation; I maybe wrong though). Keep writing is all I would say. I have been writing since I was in class 6 - pretty much 20 years now. Yeah, frequency has gone down a lot since school. No doubt about it.
I use Evernote.
Again, I don't do this (though I want to) but I'll follow this discussion with interest!
The idea is having a mobile application for tracking to a self-hosted api and a web-client for having a feed (like facebook about myself).
This will be released open source once it's somewhat presentable.
the switch from analogue to digital has been interesting. my content is now organized by topic, rather than being a chaotic mess of thoughts and feelings; tags make things searchable, but i don't sketch as much as i used to, which i miss. i'm slowly getting used to having a stylus rather than a pen, but i don't know how long it will take for it to feel natural.
Reviewing them really helped me evaluate and improve my software architecture patterns.
Time distorts self-awareness, and having a written record would help.
Here's an example empty page for a week - https://www.instagram.com/p/BPUIKR1Am3o/
I track some things daily:
* quality things
-- energy levels
-- activity level
* tick-box things
-- did I wake up before 8am?
-- did I get to work before 10am?
-- did I hit my step goal?
-- did I do any additional exercise like a really long or strenuous walk?
-- did I do some work on a personal project? (taking photos, working on my game, looking at houses, whatever...)
-- did I record my weight and blood pressure?
-- did I follow my morning/evening routine? (pack/empty dishwasher, did I remember to take my pills, ...)
On a weekly basis, I tally up a few things from my activity trackers - how many days did I hit my sleep goal of 8 hours, what was my average weight/blood pressure, how many total steps did I do, and so forth. I also convert the daily quality things into the number of "good" days and "bad" days in that week on that scale - so maybe one very good mood day and two bad mood days (and the rest acceptable).
I then write down any non-technical-work tasks (we have a task tracker already at work for technical things, after all) I want to get done (either in the future, or on a particular day), or events that I need to remember, generally in the bullet journal style. These are things like:
* Collect building badge
* Write talk submission for conference
* Develop the iPhone photos from the weekend
* Remember that the new X book is out (today, on day X) and I should read it next
* On the 30th of January, remember to send out the invite to the event
Then every Sunday I make a new weekly page, migrate all the unfinished entries forward into the next week, and start again. I'll cross out things I realise that I don't care about any more, and move things that are further in the future than the upcoming week into the "future log". Pick two to three main things to keep in mind, schedule some work onto particular days, if appropriate, and the rest into a general weekly tasks list.
I also move things like vacation or camera gear or game idea one-liners onto a dedicated page - either a full page for the idea, or a page that has a list of those one-liners.
Yes, I find it very useful.
> What tools would you recommend? Is there any specific methodology that you follow?
Sure, here is my current framework:
I keep all text files in a journal folder with subfolders for each year. At the end of each week I review the last week's journal entries for information which is applicable to future projects or needs, and move that information into systems of frameworks, which are also described in text files in a different location.
> When journaling, do you try to track any specific aspects of your life or just write about anything that is currently occupying your mind?
I track my mood, as you can see by the DaySCOR item (this rating system is a work in progress and has an alternate look when I use it on paper; it's more of a multidimensional graph on paper).
I've learned that most days are around a 3/5 _no matter how much I accomplish_ unless I make a conscious effort to enjoy the day and just be a happy person. That has been a lesson I didn't expect. I thought that getting more done would make me a happier person, but upon reviewing my numbers, that hasn't been the case at all. Productivity is something of a psychological fake-out, but I haven't gone too deep into why just yet. Psychologically, it seems that a person is much more than just their accomplishments. Also at HN many of us tend to project a very strong productive aspect, which could compound this issue. (That would indicate that we repress an inner lazy person, for one...lack of time off, time out, time away, inability to give the finger to work and just waste a day...the boundary there is not an easy one to navigate for productive people)
I also open a new file for each client project and keep those separate. It's helpful to be able to open my last client project file when working on a new file. I also try not to let information build up in email threads and immediately move project information out of emails and into text files. This is in part because GMail search is so slow and long threads are a pain to search.
Build your own journaling framework to improve your journaling system. Watch for leverage points that work for you, write them down, and change/refine your framework. This will keep the practice enjoyable and effective for you.
Through two years of journaling I went from obese to healthy weight and only did it by addressing the subject of my weight directly. If you feel like you cannot address tough subjects directly, you may need to change your journaling technology or system or it may fail in its role as a problem-solver. In order to address difficult subject in my paper journals, I leared the simple Ford Shorthand technique at fordshorthand.com and am worry-free when it comes to others possibly prying through my journals. I keep one on the mantle in my home, in fact. Being able to address difficult topics at a time of your liking is crucial.
https://www.reddit.com/r/technology/comments/5k4dn8/im_becom... (6086 comments)
https://news.ycombinator.com/item?id=13252242 (109 comments)
https://news.ycombinator.com/item?id=11833718 (49 comments)
https://news.ycombinator.com/item?id=10360761 (54 comments)
We will be talking about, say suddenly needing new Swiffer pads. Face to face conversation, emergent and organic conversation, no prior searches in the last few weeks or anything like that. Then, next time you're scrolling through instagram, there is an Amazon ad for Swiffers.
Or is it likely that the audio is being analyzed client side before pushing results to a server somewhere?
Also, if this was actually happening, should this be announced in some terms of service?
What interests me more is whether the broad user base cares enough to change their habits. Does it become freaky enough for them that they'll change the way the use the platform? (Doesn't matter if it's Facebook or any other website.)
Or generally anything that helps user experience: documentation, improving web site/documentation design, testing, finding bugs and making high quality bug reports, evangelizing the project to users who need it but aren't aware, becoming a expert user of the project (which will almost certainly lead to bug reports, suggestions for improvements to features and documentation, etc.) and triaging tickets, answering questions in the support forum, etc.
However, if they don't or someone doesn't have a $20 to throw at open source, there are a lot of ways to help. Just to mention a few (assuming you are at least an active user):
- help less experienced users (answer community questions, reported issues etc.),
- improve documentation (documentation is never finished),
- share your knowledge about a tool (write an article, tutorial),
- take part in tests and report bugs,
- apply your skills (design, writing, community management etc.) to aid project's needs,
- create (and maintain) a useful "resource" (e.g. list of example projects, plugin reviews).
There are many ways that often go "unnoticed" or rather... no one may officially pat you on the back for it, but it helps.
Anyhoo, we did find that such a service exists. I haven't looked at it of about a year, but at the time it seemed interesting though a little lacking in features. They do seem to have improved over the year. You might want to check it out!
There is a chat feature and I've used it to give free 1:1 consulting/support.
There are lots of answers linking github issues and code playgrounds like jsfiddle and codepen.
I use the Github plugin myself where each time I push to repo or create/close an issue, it triggers a +1 on a habit (which results in Gold and XP) so indirectly, perhaps you might enjoy it?
I always forget about it then an pleasantly surprised to see a heap of gold + level ups later that day
Thank you for saying that.