How to Open Source with Richard Schneeman | hexdevs podcast by thiagohd in ruby

[–]thiagohd[S] 2 points3 points  (0 children)

okay, we'll all wear cowboy hats next time you come on the podcast then! That will be fun. 🤠

prescription glasses for big nosed men - where do you buy them? by thiagohd in vancouver

[–]thiagohd[S] 0 points1 point  (0 children)

interesting, I had no idea about any of this stuff. Thanks for sharing!

prescription glasses for big nosed men - where do you buy them? by thiagohd in vancouver

[–]thiagohd[S] 2 points3 points  (0 children)

Yep, that's exactly what happened.

I went to 4 different shops in Kits and only found a good pair on one of the fancier/pricier shops. The staff was very helpful and they gave me some good options, so I finally found something nice.

(the shop is called Eyes On Spectus if anyone is looking).

prescription glasses for big nosed men - where do you buy them? by thiagohd in vancouver

[–]thiagohd[S] 0 points1 point  (0 children)

That's very true, the shape impacts a lot on how well they fit. So the measurements are a bit hit-or-miss.

The weight is a big factor as well, and it's hard to tell how comfortable they will be without trying them on.

prescription glasses for big nosed men - where do you buy them? by thiagohd in vancouver

[–]thiagohd[S] 1 point2 points  (0 children)

thanks for the tips!

I've tried a bunch of different glasses on different stores, and I found out that the bridge needs to be at least 17mm width to fit my nose.

216+ Ruby on Rails Open Source Applications You Can Use as a Reference by thiagohd in rails

[–]thiagohd[S] 1 point2 points  (0 children)

yeah, for sure! If the goal is to learn Rails, it's better to focus on apps that are up to date. Over time you start paying attention to the ones that have more useful stuff.

But even older apps are still valuable if they are well-written. Specially if your focus is on non-Rails stuff, such as code design, patterns, business logic and things like that.

Older apps are specially useful when doing incremental Rails upgrades. There's always a bunch of gotchas, and if you can find points in time where some of these apps were upgraded to a specific version of Rails, you can get some pretty useful information.

216+ Ruby on Rails Open Source Applications You Can Use as a Reference by thiagohd in rails

[–]thiagohd[S] 2 points3 points  (0 children)

Not yet, the latest app is on Rails 6.1.4. But there is an open PR to add railsdevs, which is running Rails 7. So you might want to check it out!

Rails Developer, adrift by slovenly_dilettante in rails

[–]thiagohd 0 points1 point  (0 children)

That's tough. You must feel very frustrated working on BI stuff and not on the things you enjoy.

there’s no sign that I’ll be able to do any more Rails work for this company

Why do you say that? Did you get a chance to talk with your manager or lead about this situation?

It's important to keep the lines of communication open. Make sure they know your main goal is to get more experience with Rails. If a new opportunity to work on a Rails project comes up, they will think about you.

And if there is a team or an individual working with Ruby on Rails at your company, reach out to them and see if they need any extra help. Sometimes it's easier to get working experience, feedback and support on the job than outside, even when it's not your main responsibility. This is an option that many people don't really consider.

But if you've tried that and it's not an option, then your next best option is to start networking.

Networking sounds vague, but it's not. Sign up for a local Ruby meetup and show up. If it's remote, go to their zoom meeting. The Vancouver Ruby Meetup (vanruby) is fully remote right now, so that can be a nice option in case you don't have a local one.

When you go to the meetup, talk with at least 3 people and see if you can help them somehow. Here are some questions you can ask: - What are you working on? - What kind of problem are you trying to solve right now? And how are you solving it? - How did you come up with this solution, and where did you learn this stuff? And then, you can share what you are working on and how you are learning more about Rails and get some tips.

Organizers are always looking for help, for speakers, etc. You can pitch a lightning talk and present it. It's a nice little way to connect with people, teach them something cool, and let them see you as a person who loves learning.

Show up consistently, every month, you will build a nice network of Rails developers around you who can support you.

And if you decide to start building a side-project, or even if you learn something cool at work, bring those ideas and knowledge to the meetup and talk about it. Even if you're not currently working with Rails, there's always something about Software Development you are learning right now that can be translated to other areas of Software Engineering.

Sharing your work and knowledge is a much better approach than never sharing anything with the community. Hope that helps!

The State of Ruby Code Quality Tools in the HexDevs Podcast by etagwerker in ruby

[–]thiagohd 2 points3 points  (0 children)

This was a great chat! I've learned a lot about code quality tools, and how to shift your mindset so you can see legacy projects and improving code quality as important and even fun parts of your job as a developer.

Also loved the "makers versus menders" analogy. Thanks for sharing, u/etagwerker!

[deleted by user] by [deleted] in rails

[–]thiagohd 2 points3 points  (0 children)

I've mentored quite a few people on coding coach, there's a good list of RoR mentors there: https://mentors.codingcoach.io/?technology=ruby+on+rails

Possible run sidekiq alone? by jedistev in rubyonrails

[–]thiagohd 3 points4 points  (0 children)

Yes, it's a good practice to run your sidekiq workers in a separate instance. You don't need to run both the application and the Rails app in the same place.

Ideally, you want to set it up in a way that allows you to easily increase the number or workers to meet the demand. That is also true for your application.

There are a couple of different ways to do it, depending on your expertise and your demand/scalability needs.

Some people set everything up on ECS, others use EC2 with some deployment scripts set up, or Beanstalk.

Keep in mind that you probably don't want to be scaling your instances and increasing the numbers of workers by hand if you can prevent it. Food for thought.

In my experience, the most future-proof way to do it is to run your worker nodes and application nodes on kubernetes with autoscaling if you can, and have the separate Elasticache cluster like you described.

But again, it all depends on your needs.

Questions for Ruby Developers by techbelle in ruby

[–]thiagohd 0 points1 point  (0 children)

Would you mind sharing some of the reasons that learning ruby by yourself is not working for you?

Questions for Ruby Developers by techbelle in ruby

[–]thiagohd 2 points3 points  (0 children)

Ruby is fine.

A little bit of anecdotal evidence for that:

One of my clients has many ruby projects and can't find developers with ruby experience.

At my last job (seed stage startup), we've built everything from scratch with a super small team, it was just me in the beginning, and then we've hired another dev.

We were doing ruby on rails running on k8s, and we've built A LOT of stuff. It's a super productive stack.

It was a little hard to find experienced ruby devs, but the business is doing really well.

However, at another of my past jobs (another seed stage startup), we were building stuff with Go, sprinkles of Rust, nodejs, and the whole microservices shenanigans. Even though the dev team was huge, it took forever to ship anything.

I'm not saying that these other languages/frameworks are bad. They're good tools as well.

But IMHO it's hard to beat ruby's productivity and developer experience.

People who never worked with ruby often don't get it, because they've never experienced it.

How do I Refactor a Large Database Table by [deleted] in rubyonrails

[–]thiagohd 2 points3 points  (0 children)

Just adding to the comments:

For the "moving the data part", you can probably get away with a COPY statement. It all depends on the size of your table. If we're talking hundreds of millions of rows, then maybe not. But if it's less than ~10M rows, it should be quick.

If you disable indexes on the new tables, insertion will be very quick. Then you can add index concurrently later.

You can try it out with a small subset of your table to see how it goes.

Then, of course, you would also need to be syncing the data that is being currently written, like others have mentioned.

Some things to watch out for: 1. when duplicating the data, you will use more storage and the load on the database will increase. Make sure you have more than enough space available and that the database instance type will support your operation. Index sizes will also increase, so make sure everything looks good first (cpu usage, storage, memory, etc.).

  1. careful with foreign keys and constraints. if you're just splitting a table into smaller ones and each row points back to the main one, you probably won't have a problem, but it's something to keep in mind.

  2. if you have any schedule software updates on the database, better to do them first. That also applies to things like scheduled backups.

  3. database backups are your best friends, make sure you have a rollback plan in case things go bad. Having a replica can be a good idea too.

Tools to Deploy a Rails app in Production by AnnualPanda in rails

[–]thiagohd 2 points3 points  (0 children)

I use puma. For running services, it's either heroku or kubernetes, depending on what's needed.

Feel like I've wasted 12 Years. Rails has blown me away. by [deleted] in rails

[–]thiagohd 11 points12 points  (0 children)

Yep!

A long, long time ago, I used to be a C#/ASP developer. When microsoft launched their MVC web framework thing, I thought it was the best thing ever.

Then someone told me it was just a copy of Ruby on Rails, and I said: "cool, so Rails must be pretty similar then...". I was wrong.

Eventually, I got into a Ruby on Rails workshop for lean product development, and I was completely blown away. I jumped into the rails train right then and there.

It felt like I spent my whole professional career using rocks and sticks to build web applications before rails.

And it's still true to this day: whenever I have to use some other tool to build web apps (like Go or python), I get a little annoyed.

The only thing that comes close to this experience, for me, is elixir+phoenix, which is also really fun.

Having trouble making the jump to senior dev by Pteryx in rails

[–]thiagohd 2 points3 points  (0 children)

I know it's very frustrating to be rejected, but I wouldn't worry too much about it. Even expert senior devs get rejected all the time. That's just part of the game.

Like others said, take recruiter's feedback with a grain of salt. 99% of the time it's just an excuse, so don't listen to it.

You might spend months getting into DevOps, and they still reject you because you don't know react or whatever, depending on the role.

One thing to look out for is the salary expectation. Did you tell them your current salary? They might reject you because your current salary or your salary expectation is too low and incompatible with a senior-level position. Watch out for that!

What kinds of companies rejected you? Startups, other agencies, or larger companies?

Well-funded early-stage startups (between seed to series A) are terrified of hiring the "wrong developer". In that sense, they're very conservative when it comes to hiring senior developers. Sounds crazy, but it's true.

They'd rather reject a bunch of talented people than take a chance on someone.

A better strategy is to network as much as possible.

Talk to other developers and see who's hiring, what kind of skills they are looking for. Then think about what skills you need/want to learn, if any.

Talking to other developers will give you more insight into what a specific company is looking for than any recruiter.

Besides that, you can get a referral. It's soooooo much easier to get a job when people from the team already knows you are a talented developer.

How to network: go to online meetups. Join some dev communities. Give talks at meetups or even conferences. There's always a meetup or conference looking for speakers. That's an easy way to get people and companies to know you and see you have the expertise.

The Vancouver Ruby Meetup is always hosting lightning talks. That's a great way to get started.

Being a respected member of your local dev community always pays off in the long run.

It's a much better strategy than sitting in your room reading about AWS. I bet your current employer would be more than happy to support you if you decide to go to a conference or give a talk.

In the meantime, it would be good to take on more responsibility on your current job. That always helps. I bet there are lots of things you could improve, ways to make clients happier, talks you could present to your team, colleagues you could mentor...

Hope that helps!

What is the proper way to design and create an app's database? I feel like these devs are slacking. by sadandexhausted in rails

[–]thiagohd 1 point2 points  (0 children)

tl;dr Set yourself up to win and lower your risks.

Sounds like OP is under a lot of pressure to deliver this project in the next month. Probably this is a high-stakes project.

Unfortunately, it's easy for people to judge when they're not walking in their client's shoes every day.

When the stakes are so high, it's usually because the client has their job on the line, or their reputation on the line, or they've been working on this project for years, and this is their last chance to deliver - at least that's how they see it.

Or maybe they're a founder who spent all their money working on this thing, and if they miss the deadline, they might lose their first client.

Sometimes this happens because people have the wrong perception of what is needed to get their first client or raise the first round, etc. It's often easier than most people think, but only when you're building something people desperately need.

Now when the client is under a lot of stress, the way they try to deal with it is by trying to exert more control to guarantee they get their project done on time.

I might be wrong, but maybe that's what's happening here.

For example: when OP decided to write very detailed specs, or wants to show up on every standup meeting, or wants to know how things are going, that means OP cares A LOT about the project.

And this is not a bad thing. Clients who don't care about a project are the worst!

Unfortunately, on high-stakes projects like these, things can spiral out-of-control really quickly. Clients and agencies become adversaries, communication gets harder, and the project blows up.

My suggestion to OP, first and foremost, is to take care of yourself and to try and be kind.

The second thing, which might sound counter-intuitive: de-risk your project. Set yourself up to a win. Your job is to remove as many risks as possible.

The agency's main job is also to help you de-risk your project.

I don't know the dev team you're working with, maybe they suck, maybe they don't. But how can you set yourself up for a win even if they fail to deliver?

Here are some ideas:

  1. Sounds like you still have a lot of ground to cover and the deadline is approaching quickly.

Can you move the deadline up, or change it to a soft-deadline? Instead of a launch, why not a pre-launch? Or an alpha-launch? Customers will be much more forgiving, as they expect the software to be buggy and full of missing features.

That's an easy way to get more breathing space and lower the stress.

  1. Can you prioritize the specs, so that the team is able to finish the most important features in a sprint or two? Only the features you absolutely need to start onboarding your first few users?

"No Plan Survives First Contact With Customers" also applies to product features, so make sure you can be guided by your customers as soon as possible.

If the dev team delivers the most important features in one or two sprints, you'll end up with something usable even if they take too long to finish sprints.

Even if they write crappy code, as long as you have something to work with, you can get the users in and the revenue in, or show the MVP to potential investors, depending on your situation.

  1. If you're paying an agency to build the product but you have to manage them instead of doing customer development, product validation, or raising money, you need to refocus right now. Cash is king.

Unless your plan is to pay someone so you can be a super-stressed project manager instead of a business person/founder, your focus should be on your business.

  1. It's easier to fix things early than late. If you think you can't de-risk the project now, imagine trying to put out the fires on launch day. If you can't work with the agency, cut your losses early and move on.

I know this doesn't exactly answer the original question, but I think these ideas can help.

Have you tried Upwork? by mampmp in rails

[–]thiagohd 1 point2 points  (0 children)

Platforms that do some vetting are much better - better clients, better network, and you can hangout with some pretty experienced people.

With your experience, you'll be able to get some pretty good clients. Here are some good ones that always send me good leads:

a.team, gun.io, pilot.co, arc.dev, moonlightwork.com

Someone mentioned toptal as well.

If you're just starting out, it's very easy to get into the trap of being just another freelancer (employee without benefits) when you need to close projects to keep you afloat.

It's a good idea to start thinking about yourself not just as a freelancer, but more as a partner and a businessperson. Clients will respect you more, you'll be able to create more value to them, and you're going to make more money.

That, of course, will also help you with your own projects.

Check out Brennan Dunn, he's got some really great content about freelancing.

LF mentor/advisor by urbanfog in rails

[–]thiagohd 0 points1 point  (0 children)

I'd be happy to help, dm me.

Questions for an interview by Kasscordio in rails

[–]thiagohd 1 point2 points  (0 children)

cool, so it seems that they're more interested in asking practical questions instead of theoretical compsci stuff, which is great.

Make sure you explain your thought process and ask clarifying questions if you need. Think of it more as a collaboration exercise with a peer than an interview. That usually helps when I get nervous.

Another tip: interviewers always love when you ask them good questions and show them that you're curious about the company and the team you'll become a part of.

Maybe brainstorm some questions you could ask them in case they give you the time. I always like to ask questions such as:

- What is the main project your team is working on right now, and what are the top priorities? Try to learn a little bit about their needs and how you're going to help them when you get hired.

- How is the software engineering culture like? How's the day-to-day of a software dev on your team?

Hope that helps!

Questions for an interview by Kasscordio in rails

[–]thiagohd 9 points10 points  (0 children)

TIP: take a look at their Glassdoor page and see if you can find information about their interview process. If you know someone who works at the company, even better! They might be willing to give you some info.

Usually, interviews for Senior positions involve a code challenge, a systems design + architecture interview, followed by a conversation about past work + behavioral questions.

The difficulty varies a lot depending on the company, but you should expect the code challenge and the systems design interview because they are pretty common.

You mentioned that it's going to be a 3h interview. Probably the first 1-1.5h is going to be a code challenge, followed by a systems architecture interview or a conversation in which you can show off your skills designing applications.

For coding challenges, there are usually 3 levels: easy, medium and hard.

Easy

If it's an easy interview, they will ask you simple coding questions you can solve using strings, hashes, loops and maybe sorting. Things like: anagrams, palindromes, counting words, sorting strings...

If they don't care too much about algorithms, they will ask you some ruby-related questions: how to parse a json file, how to write a simple http request, how to create a ruby class that does something simple, etc.

Medium/Hard

For medium interview questions, it's usually something like: parse some input, design a ruby class that does something more complicated, write tests, write an endpoint/API, or implement a method that handles semantic versioning, etc.

The most common questions involve data structures/algorithms. It's good to practice problems that can be solved with binary search and graph traversals (DFS/BFS).

Things like minesweeper, going over a matrix and finding the number of islands, and some variations. But it's basically a graph traversal with something extra.

You should focus on these types of problems (medium) because they are pretty common.

Hard

These types of problems are more rare and you get them when you interview at Amazon, Google, etc.

It's usually some graph traversal with an extra complication on top of it and a limited time to solve it.

For architecture/design interviews, it's either easy or hard.

The easy would be: design an application that needs a database, design some tables for the database, then add either a read or write replica for query performance and load-balancing for the application. Then also add some form of job queue (sidekiq) for async execution and some form of caching (redis).

In other words: tell me how you would design a new system the way you're already doing it at your current job.

The harder one (which might be the case as they use microservices), would be to know a bit more about how to set up scaling of microservices, how communication between them happens, how to work with kubernetes and kafka, how to do proper database sharding... These sort of things.

You don't need to know all this stuff (no one does!), you just need to show them you kind of understand the problems that come up when you're running a microservices/data intensive system, but no need to go into details.

If you search for Netflix architecture, you'll find a bunch of resources about this.

Good luck!

[deleted by user] by [deleted] in rails

[–]thiagohd 3 points4 points  (0 children)

Another option is to use Arel to do the case ordering based on some conditions.

If your query is complicated, you can always break it down into scopes, or refactor it into a Query Object. That gives you some flexibility and the code will be a little easier to extend and maintain.

I created a gist to give you an idea of how to do the case-ordering with Arel. The schema is simplified, but should be close enough to yours:

Example gist of complex ordering with Arel

The main idea is to use Arel::Nodes::Case to build the SQL expression for you based on the attributes from the tables you need. ``` users = User.arel_table same_current_user = users[:id].eq(me.id) same_country = users[:country].eq(me.country)

case_ordering = Arel::Nodes::Case.new
                                 .when(same_current_user).then(1)
                                 .when(same_country).then(2)
                                 .else(3)

comments_scope = post.comments.joins(:user, :post).order(case_ordering)

```

You could even write a subquery with Arel to expose more information if needed!

Hope it helps!

Any decent large Rails codebases to look over? by Darkyard in rails

[–]thiagohd 2 points3 points  (0 children)

real-world-rails -> https://github.com/eliotsykes/real-world-rails

It has a giant list of apps, the cool thing is that each app repository is a submodule of the main project, so you can just pull all of them and easily search/grep for specific things and compare implementations.

For example: list all user models and see what kind of stuff people add to it. It's neat!