mmanulis
Our tech stack is: Node.js / Mongo / AWS shop.
We're looking for:
* Strong backend experience * Strong REST API experience * Some project/team leadership * Mongo / NoSQL data modeling experience * Node.js on the backend specifically. You've worked on and contributed Node.js-based APIs * Infra / Cloud experience. Ideally AWS
The interview process is fairly straightforward: * 30-minute experience screen * 1-hour pair-programming to build an API endpoint in Node.js and JavaScript * 1-hour system-design * 30-minute culture fit
No agencies or contractors.
I'm sure there are topics you're curious about or sound interesting to you. Maybe there's a hobby you wanted to try out? Spend a little bit of time watching YouTube, listening to podcasts, reading blogs or joining discord/slack communities for that topic.
This doesn't have to be some huge investment. Spend an hour or two looking at a topic. This can be in 5-minute increments or a 2-hour block, w/e.
Are you still interested? Do you want to learn more about the topic? Do you want to try your hand at it? Go for it. Go as deep as you want on it, actually make your own version of w/e you're interested in.
Now go talk to people in various communities online. There are so many slack and discord groups out there, you'll find something you connect with. Ask questions. Engage in conversations. If you're feeling up to it, reach out to people to setup video calls. Some meetups are starting to offer in-person events, if you're comfortable doing that.
Still interested, still want to turn it into something more? Check out The Mom Test by Rob Fitzpatrick. It's fantastic guide on how to actually do customer development. Doesn't have to be about making something into a business. He's got great tactical advice on how to get info from people in a regular conversation and learn about stuff.
Rails is amazing at standing up a CRUD app (really API) in a matter of minutes. I can have a basic CRUD app with authentication, authorization, API, caching, background jobs, local development (docker compose), production in any cloud / k8s and CI/CD done within a day. Adding business logic that's well tested is simple.
Once the app starts to get serious usage, needs to integrate with complex enterprise systems, handle huge loads of data, etc. it becomes necessary to step away from Rails-way of doing things. All of a sudden you can't push more into Sidekiq cause of how much it impacts the DB via ORM loading. Now you're writing custom SQL. It's not all that hard to do in Rails, but at that point, you're writing Ruby and not using Rails magic any more.
Your dismissive comment does not address the realities of building a solution that goes beyond CRUD. It ignores the many levels of experience present on a team or the amount of technical debt one accrues while building a non-trivial production system.
While it doesn't take much experience to get started with Rails or to get a good amount of progress on a product, it takes skill to keep the technical debt under control. Or to make good decisions about architecture. Or to understand which parts of the system to optimize. It requires actual experience building web solutions without the crutch of a framework to know when to ignore Rails and when to double-down on it.
Main issue with Linux on an MC is lack of MMU, though YMMV
Also, different modalities will produce different quality images, how was that accounted for in training models? Did they use all the images for a single scan or a subset of the images of a single scan?
The problem is you're trying to train a model where you have many images for a single scan, like slices. Depending on the modality, you'll get different resolutions, different "visual" inclusions, etc. etc. So labeling the individual images and labeling the entire collection is really hard.
If you're just looking to better understand memory or pointers or something similar, K&R + What Every Programmer Should Know About Memory are all you really need. Throw in a book on linkers and loaders, even an old one, and you'll have more than enough info to understand what most programs are doing under the hood.
I learned the language in school and at the first few jobs I had, all embedded or systems work. If I had to learn it today, I would do the following:
1. Read K&R book on C - https://en.wikipedia.org/wiki/The_C_Programming_Language - your goal here is to just learn the syntax. Build some simple programs with what you learned, like replicate echo or cat commands.
2. I like Learn The Hardway series of books for the tools he teaches. It's really hard to be effective with C without knowing how to use a debugger or some static code analyses tools. https://learncodethehardway.org/c/ You can learn make, GDB, valgrind, etc. on your own too - plenty of O'Reilly books on the topics. I do recommend learning at least make, GDB and valgrind - they will help you build your code and figure out where you screwed up with your pointer arithmetic - which you will do.
3. Decide on what kind of projects you want to work with C. I learned by rebuilding some of the standard Unix utilities (e.g. curl or wget) as well as some systems programs, like a network scanner.
4. Build something a lot more complex, like a bootloader for an Arduino board. As in, get a cheap Arduino nano and write your own little bootloader that will load a simple program that blinks an LED. Plenty of other alternatives, e.g. build a basic git implementation. Try your hand at building a JSON parser - you'll hate strings by the end though.
5a. Get a book on Linux device drivers and go through it; build a few of the drivers - it's really not that hard. The Linux kernel is just another framework. You can also just look at https://kernelnewbies.org/ to see what else you can do and find other resources.
5b. Alternatively, build your own database. Can be a clone of Dynamo or Redis or some kind of RDBMS. You can even build your own pub/sub system if you want. Whatever you're curious about.
6. If you really like working with C, go through a Data Structures course and implement all of that stuff in C. You'll hate yourself but you'll learn a lot about the language. By now, you'll have picked up a bunch of that stuff anyways, but don't let not knowing quicksort algo stop you from building something. All the sorting/searching algos are better learned once you're comfortable debugging your code and looking for pointer issues.
Personally, I love working with C. It can be incredibly frustrating, but it's the first language I learned, so it's my home. In the last 10 years, I only worked with it when doing embedded work. I'll reach for Go as a system's programming language first (haven't learned Rust yet). For web development, there are too many modern frameworks and languages that are much much better than C.
You could take something like a NooElec (http://www.nooelec.com/) and connect it to your phone. Though you'll need a rooted device.
I tried it and it wasn't the fastest thing out there but let me do some basic scanning.
I've used Linux as my primary system since late 90's. I switched to a Mac for a few years twice and back to Linux. My motivation for the (latest) switch is the complete lack of quality hardware and the cost of buying a Mac (not to mention Apple's complete abandoning of the desktop). For details, look at all the discussions on HN about the latest MacBook Pro.
I would echo what several people have stated here, about getting a Developer edition from Dell preloaded with Ubuntu. Those Precision laptops are not the same as the XPS's, though they look alike. The hardware is just different enough to make it easier to run on Linux.
The way it worked for me is: I took stock of the apps I spent 90% of my day using on a Mac, which are: gVim, Terminal, Chrome, Firefox, Slack, Spotify, Keybase, Dropbox and a few system monitoring things.
All of that runs great on Ubuntu out of the box and with an hour's worth of Googling, you'll have your laptop configured exactly as you want. The only real issue for me was dealing with the touchpad; all that took was installing a different driver and I was done.
I do install the latest kernel when it comes out, but that's cause I like pain and is completely unnecessary.
It's been a year since I made the switch and the only thing I miss from my Mac is Sketch. There is Gimp and Inkscape, but it's not the same.
My workflows are the same, if not better. Running the same OS as the EC2 instances I'm running keeps a lot of dumb mistakes from deployments.
Being able to spin up a bunch of Vagrant boxes or Docker images and not have the UI come to a halt is fantastic.
Easiest option, install a Vagrant box with Ubuntu desktop on it and use it for a day. You'll see if you like it very quickly.
Keep in mind, it comes with a bunch of stuff enabled by Dell and using their own repos.
I upgraded the kernel as I'm using the WD15 dock and the thunderbolt firmware/drivers are flaky on older kernels and will lock up the system.
If you've never ran Linux as your primary machine, be prepared for occasional snags, especially around suspend.
Overall, it's an easy system to fiddle with with lots and lots of online resources and how-to's.
I have really enjoyed this machine and don't miss my MacBook Pro at all.
The machine worked great out of the box, I made a few minor changes to how I like to work.
The two major changes I made were:
* Install a libinput and get rid of synaptics driver * Install the latest kernel
I run with a bunch of proprietary drivers (nvidia, intel, etc.) and don't have any problems
The only thing that I miss having is Sketch. But I just run a small Windows VM and use PS when I need it.
Majority of my time is spent in Chrome/Firefox, Terminal, gVim and Slack, so I don't miss anything Mac-specific.
If you're looking for help on how to get yours configured, there are plenty of guides if you search for: Dell XPS 15 Ubuntu or variants of that.
One can still run Concourse on a Mac Mini if one chooses, not that much extra work. This is the simplest solution but you will still need XCode Server last time I checked (been a while). I'm sure there are ways to hack around it, just a matter of time vs money question.
Both Travis CI and Circle CI offer Mac builds, so if one is willing to spend some money, that's an option.
Having had to run my own CI infrastructure, I'd rather pay someone else to deal with it. Especially if your deploys are tied to it, as once it breaks, and it will do it, your entire pipeline is down.
I ended up spending a good chunk of my own time dealing with failing builds or having a couple of people on my team be the point-persons for CI/CD infra.
I described what I was working on, what research I did on those industries and that I was looking to better understand the existing problems that might fit what I was interested in.
Some conversations did not lead anywhere, other times I got excellent, tactical, advice. That gave me more information and ideas, until I landed on my current project.
The reason this approach worked for me this time (as opposed to the other times I've tried this) is that I had a direction I was presenting and I did a bunch of research to get educated about some of these industries. I don't mean I studied it for some long time, but reading related subreddits, searching for conferences and looking up sponsor companies from that, learning some terms specific to those industries, etc. helped to have a better conversation.
While YMMV, getting warm intros to smart and successful people for a 15-20 minute phone conversation will expose you to what you don't know yet. This will result in you asking better questions, which can lead to more ideas.
Though I did start out with an idea that I flushed out by talking to people in the industry.
Would love to hear more about your experience, let me know if you have time to compare notes.
Since he's the one offering a mentorship relationship, how is it going to work? What is he getting out of it?
I need to have a fail-safe where one device will usually be connected to WiFi and other devices may not for a myriad of reasons.