Our original panel podcast, Ruby Rogues is a weekly discussion around Ruby, Rails, software development, and the community around Ruby.
Similar Podcasts
Flutter 101 Podcast
Weekly podcast focusing on software development with Flutter and Dart. Hosted by Vince Varga.
Views on Vue
Vue is a growing front-end framework for web developments. Hear experts cover technologies and movements within the Vue community by talking to members of the open source and development community.
React Round Up
Stay current on the latest innovations and technologies in the React community by listening to our panel of React and Web Development Experts.
RR 319 Machine Learning with Tyler Renelle
RR 319 Machine Learning with Tyler RenelleThis episode of the Ruby Rogues Panel features panelists Charles Max Wood and Dave Kimura. Tyler Renelle, who stops by to talk about machine learning, joins them as a guest. Tyler is the first guest to talk on Adventures in Angular, JavaScript Jabber, and Ruby Rogues. Tune in to find out more about Tyler and machine learning!What is machine learning?Machine learning is a different concept than programmers are used to.There are three phases in computing technology. First phase – building computers in the first place but it was hard coded onto the physical computing machinery Second phase – programmable computers. Where you can reprogram your computer to do anything. This is the phase where programmers fall. Third phase – machine learning falls under this phase. Machine learning is where the computer programs itself to do something. You give the computer a measurement of how it’s doing based on data and it trains itself and learns how to do the task. It is beginning to get a lot of press and become more popular. This is because it is becoming a lot more capable by way of deep learning.AI – Artificial Intelligence Machine learning is a sub field of artificial intelligence. AI is an overarching field of the computer simulating intelligence. Machine learning has become less and less a sub field over time and more a majority of AI. Now we can apply machine learning to vision, speech processing, planning, knowledge representation. This is fast taking over AI. People are beginning to consider the terms artificial intelligence and machine learning synonymous.Self-driving cars are a type of artificial intelligence. The connection between machine learning and self-driving cars is abstract. A fundamental thing in self-driving cars is machine learning. You program the car as to how to fix its mistakes. Another example is facial recognition. The program starts learning about a person’s face over time so it can make an educated guess as to if the person is who they say they are. Once statistics are added then your face can be off by a hair or a hat. Small variations won’t throw it off.How do we start solving the problems we want to be solved?Machine learning has been applied since the 1950s to a broad spectrum of problems. Have to have a little bit of domain knowledge and do some research.Machine Learning Vs ProgrammingMachine learning is any sort of fuzzy programming situation. Programming is when you do things specifically or statically.Why should you care to do machine learning?People should care because this is the next wave of computing. There is a theory that this will displace jobs. Self-driving cars will displace truck drivers, Uber drivers, and taxis. There are things like logo generators already. Machines are generating music, poetry, and website designs. We shouldn’t be afraid that we should keep an eye towards it.If a robot or computer program or AI were able to write its own code, at what point would it be able to overwrite or basically nullify the three laws of robotics?Nick Bostrom wrote the book Superintelligence, which had many big names in technology talking about the dangers of AI. Artificial intelligence has been talked about widely because of the possibility of evil killer robots in the Sci-Fi community. There are people who hold very potential concerns, such as job automation.Consciousness is a huge topic of debate right now on this topic. Is it an emergent property of the human brain? Is what we have with deep learning enough of a representation to achieve consciousness? It is suggested that AI may or may not achieve consciousness. The question is if it is able to achieve consciousness - will we be able to tell there isn’t a person there?If people want to dive into this where do they go? Machine Learning Guide Podcast: http://ocdevel.com/podcasts/machine-learning The Master Algorithm. https://www.amazon.com/Master-Algorithm-Ultimate-Learning-Machine/dp/0465065708 Andrew Ng course: coursera.org/machine/learning Machine Learning Language The main language used for machine learning is Python. This is not because of the language itself, but because of the tools built on top of it. The main framework is TensorFlow. Python in TensorFlow drops to C and executes code on the GPU for performing matrix algebra, which is essential for deep learning. You can always use C, C++, Java, and R. Data scientists mostly use R, while researchers use C and C++ so they can custom code their matrix algebra themselves.PicksDave:20-gallon Husky oil free air compressor: http://www.homedepot.com/p/Husky-20-Gal-Vertical-Oil-Free-Electric-Air-Compressor-0332013/207040335 Charles: Twitter T gem: https://rubygems.org/gems/t/versions/2.10.0> Ruby Dev Summit: www.rubydevsummit.com Rake: https://www.sitepoint.com/rake-automate-things/ Tyler: Machine Learning Guide Podcast: http://ocdevel.com/podcasts/machine-learning Philosophy of Mind: Brains, Consciousness, and Thinking Machines (The Great Courses): https://www.amazon.com/Great-Courses-Philosophy-Mind/dp/1598034243 Special Guest: Tyler Renelle.
RR 318 Metaprogramming with Jordan Hudgens
RR 318 Metaprogramming with Jordan HudgensToday's Ruby Rogues podcast features Metaprogramming with Jordan Hudgens. We have panelists Jerome Hardaway, Brian Hogan, Dave Kimura and Charles Max Wood. Tune in and learn more about metaprogramming![00:02:00] – Introduction to Jordan HudgensJordan is the Lead Instructor at Bottega. Bottega has locations in Salt Lake City, Utah and in Phoenix, Arizona. They’re a full-stack development code school.[00:02:55] – MetaprogrammingMetaprogramming was one of those scary concepts. At the code school, when the students learn about metaprogramming and how it works, you can tell that it’s definitely a pretty exciting thing. Its formal definition is it’s a code that writes code. It can dynamically, at run-time, render other methods available to the program.[00:04:10] – Use cases for metaprogrammingThe best use case that Jordan has ever seen is implemented in Rails and that’s code that can run database queries such as User.find_by_email. By passing the email, it will go and find the user with that particular email. Now, there is no method in active record or in the user model that is called find_by_email. That’s something that is created at run-time.Another one is something that Jordan has implemented and that’s a phone parser gem. It essentially parses and validates a phone number. It also has a country code lookup. With all the countries in the world, that would be very time-consuming. But within 8 lines of code, it could do what a hundred lines could do without metaprogramming.[00:06:50] – Performance implicationsJordan never had performance issues because the generation of methods is not something that’s incredibly memory intensive. You might run into that but it would be a poor choice to do in terms of readability.In Brian’s experience, it comes down to the type of metaprogramming you do. If you have a bunch of logic somewhere and method_missing, that’s going to be a performance bottleneck. And if you’re generating a bunch of methods when the application starts up, it might increase the start-up time of the application. But after that, the performance of the application seems to not have any fluctuation at all.There are 2 main types Jordan works with. First is method_missing. Method_missing could have a little bit of performance hit because of how Ruby works. The system is going to look at every single method. The second type is define_method. In define_method, you’re really just creating a large dynamic set of methods at runtime. When you start up the Rails server, it’s going to build all those methods but it’s not going to be when you’re calling it. Whereas in method_missing, it has a different type of lookup process. [00:11:55] – Method collisions on monkey patchingThat’s one of the reasons why monkey patching can have a bad reputation. You don’t know who else may be overriding those set of methods or opening up that class. Jordan’s personal approach is trying to separate things out as much as humanly possible. If there’s something that can be done in the lib directory, you can place that functionality inside of a separate module. And if you’re creating a gem, you have to be sensitive to other gems in that space or even the Rails core.[00:17:25] – How to be good citizens to other developersMetaprogramming has a lot of potentials to do great things but it also has a potential to cause a number of problems in the application. For Jordan’s students, what he usually does is walk them through some examples of metaprogramming where it can be done poorly. But then, he will follow it up with showing exactly when this is done right.He shows examples of poorly written classes that have dozen nearly identical methods. And then, he also shows how they could take all those methods, put the names in an array, and show how to leverage things like define_method to generate them. He also shows them how doing monkey patching can cause issues, how they can actually open up the string class and change one of the basic functionalities. Show that when they override that, that affects the entire rest of the application.[00:24:45] – Worst examples of metaprogrammingJordan ran into this hive of metaprogramming. When he opened up one of its classes, he had no idea what that class did. It was method_missing all over the place. Usually, there are 4 or 5 lines of code inside of that. It’s relatively straightforward and makes logical sense when you read it. This was nothing like that.They had multiple conditionals inside of the method_missing. One other hard thing about it is it does not have any test whatsoever. You need some test to make sure you’re capturing that functionality and to check if changes broke anything. You can’t also decipher what the inputs and outputs are.[00:28:35] – TestingFollow as much as real world examples. For example, in the phone parser gem, you can see some tests in there for that. You can also pass in the input that you plan to give. See if that matches the output. Jordan tells his students that respond_to_missing is as important to putting method_missing in there[00:35:25] – Resources to get started Paolo Perrotta’s book Metaprogramming Ruby is one of the standards for metaprogramming in Ruby. He also gave some fantastic examples. He created a story about a new developer who goes into a company and learns how to implement metaprogramming from senior devs. It’s very entertaining and it also covers all the different aspects to think of metaprogramming, when to use it and when it could be a very bad idea to use it.PicksJerome HardawayDon’t Know Metaprogramming in Ruby? By Gavin MorriceDave KimuraSherlock TV Series on BBCBrian Hogan iOS application: Workflow Overwatch Charles Max Wood Ruby Dev Summit Angular Dev Summit Focuster Jordan Hudgens Petergate Comprehensive Ruby Programming by Jordan Hudgens Twitter @jordanhudgens Instagram @jordanhudgens Blog crondose.com Special Guest: Jordan Hudgens.
RR 317: Computer Science at University and the Future of Programming with Dave Thomas
RR 317: Computer Science at University and the Future of Programming with Dave ThomasCharles Max Wood interviews Dave Thomas about the Computer Science course he's teaching at Southern Methodist University, Elixir, and the future of programming. Dave is the author and co-author of several well known programming books including Programming Ruby (also known as the PickAxe Book), Programming Elixir, and the Pragmatic Programmer. This episode starts out discussing Dave's course and Computer Science education, then veers into Elixir and the future of programming. Tune in to hear where Dave thinks the programming industry is heading next. [00:02:30] Dave's Computer Science Course at SMU Dave's advanced computer science course covers topics like source control and testing. He's been wanting to get into formal Computer Science for a while, so when he pulled back on his work at the Pragmatic Bookshelf, he approached SMU about teaching a course. He selected Advanced Application Development since he could teach pretty much whatever he wanted. The class is made up of Seniors and Master's students whose coursework primarily focused on theory, but lacked in the basics of coding as it happens "in the wild." The plan was to go in and subvert them with Elixir. All of the assignments are coding assignments and must be submitted with a pull request. Chuck recalls taking a class similar to the one that Dave describes. [00:06:22] Computer Science's focus on theory People who go into academia generally get their degrees and don't spend any time in the non-academic world. So, they don't know what's important when it comes down to nuts and bolts programming. This serves the students that stay in academia, but fails to teach the skills needed by their students. They also focus on the mathematical aspects of Computer Science and fail to show students that if they get excited about software, it can be fun. [00:09:55] This is a job where we make a difference Sometimes we do great harm. and sometimes great good. [00:10:23] How do you communicate all of these aspects of coding to the students? You can't just tell them. Mostly, Dave just tries to be enthusiastic. The teaching as it's done now is like a eulogy given by someone who doesn't know the person. Instead, Dave shows his passion for coding, tells stories, and shows how fun it is to write code. Imagine walking down the street and seeing the code you wrote being used. Dave's code was used on the satellite sent to see Haley's Comet. [00:13:04] Software as a tool for change A painter's medium is paint. Sculptors' stone. People in software don't "write" per se, but they still express themselves. This is a medium for programmers to get their thoughts out and interact with other people all over the world. We do a really crappy job explaining this to students.Dave is involved in after-school programs for software development as well. The ones that succeed don't approach software head on. They do fun and fancy stuff with Raspberry Pi or put a webserver up and then point out the concepts used in the programming. This approach is the future of development training. [00:16:01] Do you feel like CS programs aren't preparing students well? or have the wrong focus? Students come out well versed in the theoretics of programming and can write programs. These are good things to know. The assumption is that they'll pick up the rest in their first couple of jobs. They're not preparing people to walk straight into a job, but prepares them to learn the rest on the job.A 4 year program should be done after 2 years working in the real world. Most of the things not taught don't make sense until the student has the problem that it solves. For example, source control. This would give them context for the things that are important and bring the knowledge back to the [00:20:26] What is in the curriculum? In a few years, these students will probably be writing a functional language like Elixir. They start out writing a hangman game using Elixir. Then they add Phoenix. Then they add a webserver. The focus is around the fact that what you care about is state and transformations. Then someone will realize that you're really just implementing objects. Dave is trying to teach how to think in decoupled services. [00:22:28] The future is functional? Elixir is a practical functional language and solves some problems that programmers have been trying to solve for a long time. Clojure has a strange relationship with the JVM. Elixir is not as cleanly functional as other languages, but it's functional enough. At the same time, you can write kick-ass web services as well. You also get the power of the Erlang virtual machine.Looking at Moore's Law, why aren't our processors getting faster? Over the last 10 years, they're not that much faster and the next generations are slower. But they have more cores. If you double the clock speed, you 8x the power dissipation. So, there's a limit to how fast you can go before you melt the processor. So, you run more cores at a lower speed. This vastly increases your processing power and lower your consumption.If you're writing processes that run on a core from start to finish, then it only uses 1/16th of the processor's power (if it has 16 cores.) So, we need a programming paradigm that supports parallelism. Concurrent programming is hard. Making data immutable makes it so you can eliminate common problems with threading and concurrency. Read-only (immutable) Object Oriented programming is effectively functional programming. We should see this change occur over the next 3-7 years. [00:31:05] Most of the people at Ruby conferences are using Elixir When Dave goes to conferences about Ruby, he finds out that about 50% of speakers and many of the attendees are doing Elixir and/or experimenting heavily with it. Ruby and Rails changed the way we work, but in many ways the functional programming is changing things again. Scaling matters. We can't just throw hardware at it. You can drop your server bill by 10x or 100x.Elixir can get you there fast like Ruby, but it can also cut costs of running your server. [00:35:43] Is a computer science degree that way to get in? or should people get in through bootcamps or self learning? It depends on your learning style. You do not want to get into Computer Science because your parents wanted you to have a good job. The students that get into it because of family pressure don't love what they're doing and are kind of stuck. Programming is hard enough that if you don't enjoy it you won't excel.In any case, do what works for you. You don't need to do a 4 year course of study to be a successful programmer. Quite a few good programmers Dave knows never took a CS course. If you do a course, find out that if the teachers are doing or have done the kinds of things you want to do. The better IT shops also tend to recognize that it's the person, not what they know, that really matters. So go to them and ask to apprentice with their good programmers at a lower salary. Then if you're contributing, ask for a competitive salary. [00:41:03] What do we as programmers assume about CS degrees that we need to change? Don't let the HR department do the hiring. Making them happy is what gets you bogus job requirements. Instead, put together some requirements that hint that enthusiasm trumps everything else. Or, have criteria like "must be able to fog a mirror" and pick for enthusiasm. Or, go to local maker groups or users groups or community colleges where the kinds of people you want are, and talk to people. Then network into the people you want. Ignore the qualifications and pay attention to the qualities.One of the best people Dave hired was an alcoholic chemistry teacher, but he could get into a project. [00:45:00] You don't want a career. Spend the next 5-10 years job hopping. You want experience, not a career. You have no idea what you want to do right now, so try lots of things. Then if it's not working move on.Picks Charles: Ubuntu Bash on Windows VMWare Workstation: https://www.vmware.com/products/workstation.html Dave: Have something in your life that is relatively simple and relatively mechanical that you can fix if something goes wrong. (Dave tells us about his tractor.)Special Guest: Dave Thomas.
RR 316 Learning Rails 5 with Mark Locklear
RR 316 Learning Rails 5 with Mark LocklearOn today’s episode, we have Learning Rails 5 with Mark Locklear. Mark works for Extension.org. The discussion ranges from the introduction of Learning Rails 5 to the strategies that most successful students have for learning Rails. Stay tuned![00:01:30] – Introduction to Mark LocklearMark Locklear works for Extension.org, a USDA-funded or government-funded organization. He serves the Cooperative Extension Service but a lot of people know about 4-H Youth Group. They got a handful of websites that they maintain that are mostly Ruby on Rails-based.He has been with Extension.org for about 3 years. He is also a staff at a community college mostly doing Rails and IT things. He is also an adjunct instructor at the same community college. He was mostly doing quality assurance and testing work but moved into development work in the last 7-8 years.Questions for Mark Locklear[00:03:00] – You authored Learning Rails 5? It was an actually an update on an existing book – Learning Rails 3. Mark is an adjunct instructor and used that book. He contacted the developers or the original authors in O’Reilly so he can update the book. He updated a lot of the syntax and rewrote a couple of chapters. He also wrote the authentication chapter from scratch.[00:04:15] – What’s unique about your book?For Mark, there are all kinds of learners out there. There’s nothing necessarily unique about this book. It approaches Rails from a standpoint of having really no development skill at all. The only assumption would be that reader knows some HTML and basic things like for loops and conditional statements.[00:05:30] – Has Rails gotten more complicated?That was one of the challenges with this book. The original version of the book didn’t have any API stuff, any Action Cables, or anything like that. But now, we’re looking on adding chapters on those things. Mark doesn’t think Rails is hard to learn now. It’s been pretty backward compatible over the years. It looks very much like it did 5 or 10 years ago.Dave thinks Rails started to standardize a lot of things and with Convention over Configuration, a lot of it is taking care of it for you. The also added a lot of new features like Active Job (Rails 4), Action Cable (Rails 5), Webpack (Rails 5.1). He think that when someone gets accustomed to it, it’s almost second nature. Thanks to Convention over Configuration and the support for the community.According to DHH, Rails is not for beginners. It is a toolkit for professional web developers to get stuff done. But Brian disagrees that it’s not for beginners. It’s not so much that it’s harder to learn but it’s just a little harder to get started with. There’s just lots of different ways you can do in a Rails application by using RSpec, Cucumber, etc.[00:12:20] - What are the core fundamental things to know in order to write Rails apps?Mark spends a week on testing in his class. He focuses more on the Model View Controller paradigm. He also used RSpec and the basics of CRUD. Those things are transferable across whatever framework that they choose to work in. He also want to hit testing, sessions in cookies and user authentication.[00:18:30] - Is there an approach for people to enhance their experience as they learn Rails?Jerome believes in the “just keep it simple” methodology. When it comes to Rails, just learn Rails. Just focus on CRUD apps. Focus on the entirety of the framework, and not only on Rails, focus more on Ruby.Another suggestion from Brian is to start cracking open the Ruby source code, Rails source code and see how things work under the hood. Look at things and see if you can reproduce them or write your own implementations as you learn.[00:24:30] – What are the strategies of your most successful students that you’ve had for learning Rails?In Mark’s class, they have final projects with very strict requirements, basically going back and incorporating everything that they’ve learned. The app has to have a user authentication. It has to have sessions and cookies. And students who are most successful want to solve some problems and have the passion.One of the things that Brian have always seen that separates people who are high performers from the rest is that they’re doing a lot of practice. Spend a lot of time practicing and building apps.Dave encourages the listeners to work on some personal projects that they are passionate about. Deal with someone else and get some experience with some peer programming. Try to see what it’s like working with other developers on the same application, you’ll find that your codes much cleaner because you have to take into account multiple users working around the same code set.Jerome suggests to find a mentor, someone who’s willing to spend time to help with your programs. The students who are talking to their mentors every week usually come to be the strongest. And mentoring is a rewarding two-way street.[00:40:05] – Are there any other aspects of learning or teaching Rails that we should dive into?Mark says you should be uncomfortable every once in a while in implementing new technology. It puts you in the same mindset as your students becomes sometimes it’s becoming incredible overwhelming. And when teaching, Brian does not start with complex examples. He starts with simple ones.A faculty mentor has to observe Brian in his teaching. The mentor will say, “Just a reminder. You are the guide on the side, not the sage of the stage. You’re not there to tell them everything. You’re not there to make everyone think that you’re the coolest person up there. It’s your job to guide someone to the solution.”[00:49:25] – If I’m a Rails 3 developer, how do I learn Rails 5? Mark thinks that the approach is probably the same if you’re doing Rails 3 to Rails 4. The questions you will start asking yourself is, “Okay, what areas do you want to dig deeper? Do I have to use Active Job or something like that? What are my mailers? Are there additions to the framework?”Whenever Rails releases a new version, Dave reads the blog which highlights the new features that were added in. Pinpoint those features, do a little bit of independent research and think how you could incorporate them into your application. Use them as guiding tools to upgrade your older Rails application to a more current version. [00:52:15] – Two Writing Assignments for New Programmers Mark wrote a Medium article entitled “Two Writing Assignments for New Programmers.” In his class, they have two writing assignments. One of it is on diversity and technology. They also use Moodle as the learning management system where they can post questions.He got some push back from students but his explanation was that, part of being a developer is to be an effective communicator. Brian agreed and said, “Your job as a software developer is 20% coding, 80% dealing with people, their problems and their requests.” You have emails to read. You have emails to write. Brian always asks, “What are the most important skills you want our students to have?” The top 3 are always soft skills like communication, work ethics, etc.Mark adds that if you can’t do writing, if you can’t show up to work on time and communicate with your colleagues, then, none of your technical skills matter. However, if you can’t past the technical hurdle, you’ll never get a chance to use your soft skills. Dave also adds that if he can’t get out of these people what they’re envisioning, then, they’re going nto develop the wrong things.PicksDave KimuraGruvboxBrian Hogan Keys to Great Writing by Stephen Wilbers Rails Jerome Hardaway Rails 5.1 Loves Javascript (Medium article) Hackerrank Charles Max Wood Castle Clash railsmentors.org Mark Locklear Grammarly History of Pi by Petr Beckmann Sierra Nevada’s West Coast Stout Github @marklocklear Site locklear.me Special Guest: Mark Locklear.
RR 315 Offshoring and Latin American Developers with David Hemmat
Offshoring and Latin American Developers - David HemmatFor this episode of Ruby Rogues we have Jason Swett and Brian Hogan for our panel along with Charles Max Wood and a special guest, David Hemmat from BlueCoding.com. David and the Blue Coding team work to connect developer talent to businesses in need through a thorough process of vetting as well as a database collection of potential developers. Check out this episode to learn more!How did you get started?1:34David talks about going to school in the Dominican Republic worked locally, but later found work with US companies. He also set up a friend with a US job and they realized that there may be a demand as someone to bridge the gap. Developers did not have the access or a way to reach opportunities aboard so he started BlueCoding.com.About Blue Coding2:32BlueCoding.com has clients in the US and Canada. They focus on Latin America due to having close timezones in relation to the majority of companies that would be looking for developers. Also, Blue Coding helps in regard to bridging the cultural gap. Latin American work culture can be different that US or Canadian culture. David talks about how it’s much of a communication difference. Developers sometimes will agree to jobs they are unable to do and are timid to communicate and often just disappear. Despite this, many Latin American companies spawned from United States companies and will tend to have a similar working environment and culture as US companies.The General Experience With Offshore Hiring4:17David and the panel chat about their offshore hiring experiences. David expresses that there is sometimes an issue of many developers taking on work, and then seemingly disappearing. Often times coming back with excuses or in some cases actually over committing to work and just failing to communicate properly from the start. In some cases, like with countries like Venezuela, has a less reliable environment for the developers with things like power outages.“Not All Good Developers Are Good Freelancers.”6:18Freelancers tend to need a different skillset. Extra communication and need tools in place like time tracking and daily reports , etc. Companies that hire freelancers or offshore hiring in general need to have tools setup as well. David expresses that the best developers often are the ones that already have full time jobs. Blue Coding tries to help those developers find a better opportunity and has structured systems to create a workflow that works for both parties. David talks about having those tools in place for the developer including the time tracking and daily reports.The Companies Tools.8:33Blue Coding will also check with the client companies to make sure they have tools as well to help both parties have a smooth workflow. Project management software for the developer to see what they should work on next.Rates9:04Rates vary between $30 and $45 an hour. David tries to stay away from junior developers, looking for developers with 3–4 years working experience. Some companies pay $30 to $60. Latin American countries generally see a starting rate of $30 an hour. Asian countries can start as low as $10 an hour, but in rare cases. Some developers on the opposite side of things charge $100 an hour.Getting Offshore Developers10:47Most people start with upwork.com or Freelancer.com or something like that. Lower overhead but very limited vetting. Buyout fees are very high as well on these sites. There are companies similar to Blue Coding that are staffing companies that exist. Also, direct networking. Networking directly is extremely efficient. If you have a bad work history, networking also comes into play. David talks about their biggest source for developers are other developers, reaching out to find good hires by networking through the community.Dealing with ‘Boom and Bust.’14:19Freelancers tend to run into boom and bust cycles, loads of work followed by slow spells. David tries to avoid this by hiring carefully and picking clients carefully. Looking for long term projects, either be a continuous flow of projects or one large projects. With this focus on long term relationship building, BlueCoding is able to have much lower rates. Other companies usually don’t have safety from downtime, offering internal work to make up for it.Finding Companies that Hire Offshore16:08Most countries have job boards to help. Also, technology specific job boards. But it’s hard to compete there. US companies won’t hire offshore developers for the same rates and the same skills. You have to be really good. David pushes developers to have plenty of experience.How to Get Noticed?17:46Companies can be prejudice, but isn’t seen too often. Becoming a top level talent is key. Being average is harder. As an average or novice in an area with no community, finding online communities, Facebook groups, LinkedIn communities, working on open source projects, and going to events can help.Working remotely and being good at it [22:02] It’s a two part effort. Companies can have tools to make things easier, but as a developer, you can request them. Communicate all online. All of the office talk should be online via Slack or some other documented system. Code reviews and Peer programming helps remote developers feel like a part of the team.Onshoring vs Offshoring24:28Some companies are hiring remote developers from the US. Why would someone want to hire from outside the country? Ultimately it comes down to finding a developer that fits in with what a company needs as well as matches the budget. Cost of living can change the rates for developers as well as where the company is located. David expresses that he wants to find really good developers, even if it means reaching out to Brazil or other parts of Latin America.Medical, Taxes, and Benefits24:43Each country has different laws. For example Dominican Republic has a law that states if you contract someone for over 3 months, they are considered employees and require benefits. Some countries allow Freelancers to work long term. Health care varies between companies.The Finical and Risks.32:14Freelancers and hourly workers tend to have less working time, spending some time each day to chase down work as well as managing time. Developers in general should notice that projects in general can have budget cuts and even end prematurely. In general a developer working as an employee will need to account for the benefits and extras thrown in when considering their rates.The Companies34:02What kind of companies are looking for this as a solution to their staffing problem? Most companies are smaller companies, 1 to 20 employees with a lot of long term development work. Generally three sectors, non tech companies that need tech work, digital agencies, and tech startups or established companies that already have a software product that needs to be maintained.How to find the Companies?36:30It’s a work in progress. References are vital, David talks about how vetting for developers ends with a very happy client that gives references. Also they spend a lot of time networking, conferences, meeting people online as well as cold calling. David mentions that it’s hard to express the quality of their service through email.Getting Started with Blue Coding?37:22For DevelopersGo to BlueCoding.com and find the link that says “join the team if you’re a developer” and you can connect that way. Just reach out to them and they will set up a conversation with you and see if there is a good fit. Then once a project comes in they will set you up with the vetting process.For CompaniesBlueCoding will want to set up a call with you. Reach out to them and setup a call. They will work through if you need a developer and what that developer looks like in regard to technical skills, personal skills, and general ability.Then the developers and clients have a meeting to make sure everyone is comfortable. Being comfortable is the most important part for this connection to end in a long term relationship.PicksJasonSamsungnite Columbian Leather Flat Over The Top Laptop BagBrianNew MacBook with Touch barCharles My Ruby Story Podcasts Online Summit Format Ruby Dev Summit Ruby Rogues Parlay on Slack David Micro Conf. Macbook Air One Minute ManagerLinks to Keep up with David His Medium BlueCoding.com Email him Special Guest: David Hemmat.
RR 314 DynamoDB on Rails with Chandan Jhunjhunwal
RR 314 DynamoDB on Rails with Chandan JhunjhunwalToday's Ruby Rogues podcast features DynamoDB on Rails with Chandan Jhunjhunwal. DynamoDB is a NoSQL database that helps your team solve managing infrastructure issues like setup, costing and maintenance. Take some time to listen and know more about DynamoDB![00:02:18] – Introduction to Chandan JhunjhunwalChanchan Jhunjhunwal is an owner of Faodail Technology, which is currently helping many startups for their web and mobile applications. They started from IBM, designing and building scalable mobile and web applications. He mainly worked on C++ and DB2 and later on, worked primarily on Ruby on Rails.Questions for Chandan[00:04:05] – Introduction to DynamoDB on RailsI would say that majority of developers work in PostgreSQL, MySQL or other relational database. On the other hand, Ruby on Rails is picked up by many startup or founder for actually implementing their ideas and bringing them to scalable products. I would say that more than 80% of developers are mostly working on RDBMS databases. For the remaining 20%, their applications need to capture large amounts of data so they go with NoSQL.In NoSQL, there are plenty of options like MongoDB, Cassandra, or DynamoDB. When using AWS, there’s no provided MongoDB. With Cassandra, it requires a lot of infrastructure setup and costing, and you’ll have to have a team which is kind of maintaining it on a day to day basis. So DynamoDB takes all those pain out of your team and you no longer have to focus on managing the infrastructure.[00:07:35] – Is it a good idea to start with a regular SQL database and then, switch to NoSQL database or is it better to start with NoSQL database from day one?It depends on a couple of factors. For many of the applications, they start with RDBMS because they just want to get some access, and probably switch to something like NoSQL. First, you have to watch the incoming data and their capacity. Second is familiarity because most of the developers are more familiar with RDBMS and SQL queries.For example, you have a feed application, or a messaging application, where you know that there will be a lot of chat happening and you’d expect that you’re going to take a huge number of users. You can accommodate that in RDBMS but I would probably not recommend that.[00:09:30] Can I use DynamoDB as a caching mechanism or cache store?I would not say replacement, exactly. On those segments where I could see that there’s a lot of activity happening, I plugged in DynamoDB. The remaining part of the application was handled by RDBMS. In many applications, what I’ve seen is that they have used a combination of them.[00:13:05] How do you decide if you actually want to use DynamoDB for all the data in your system?The place where we say that this application is going to be picked from day one is where the number of data which will be coming will increase. It also depends on the development team that you have if they’re familiar with DynamoDB, or any other NoSQL databases.[00:14:50] Is DynamoDB has document store or do you have of columns?You can say key value pairs or document stores. The terminologies are just different and the way you design the database. In DynamoDB, you have something like hash key and range key.[00:22:10] – Why don’t we store images in the database?I would say that there are better places to store the, which is faster and cheaper. There are better storage like CDN or S3.Another good reason is that if you want to fetch a proper size of image based on the user devices screen, resizing and all of the stuff inside the database could be cumbersome. You’ll repeat adding different columns where we’ll be storing those different sizes of images.[00:24:40] – Is there a potentially good reason for NoSQL database as your default go-to data store?If you have some data, which is complete unstructured, if you try to store back in RDBMS, it will be a pain. If we talk about the kind of media which gets generated in our day to day life, if you try to model them in a relational database, it will be pretty painful and eventually, there will be a time when you don’t know how to create correlations.[00:28:30] – Horizontally scalable versus vertically scalableIn vertically scalable, when someone posts, we keep adding that at the same table. As we add data to the table, the database size increases (number of rows increases). But in horizontally scalable, we keep different boxes connected via Hadoop or Elastic MapReduce which will process the added data.[00:30:20] – What does it take to hook up a DynamoDB instance to a Rails app?We could integrate DynamoDB by using the SDK provided by AWS. I provided steps which I’ve outlined in the blog - how to create different kinds of tables, how to create those indexes, how to create the throughput, etc. We could configure AWS SDK, add the required credential, then we could create different kinds of tables.[00:33:00] – In terms of scaling, what is the limit for something like PostgreSQL or MySQL, versus DynamoDB?There’s no scalability limit in DynamoDB, or any other NoSQL solutions.PicksDavid Kimura CorgUIJason Swett Database Design for Mere MortalsCharles Maxwood VMWare Workstation GoCD Ruby Rogues Parley Ruby Dev Summit Chandan Jhunjhunwal Twitter @ChandanJ chandan@faodailtechnology.com Special Guest: Chandan Jhunjhunwal.
RR 313 Do I need a Front - End Framework?
How to Handle WTF'sToday's Ruby Rogues podcast features How to Handle WTF's. David, Brian, Jerome and Charles discuss front end frameworks. Tune in to learn more about when to use rails, and other frameworks!How do you choose your Framework?How do you want the app to behave, would be a good question to ask before you choose your framework. When you're mocking something up, it's paramount to think of the end product.Who are you doing choosing your Framework for? Are you using it for you, for your peers, for your business? Tune in to hear what our panelists think!Hey, this is cool. I want to share it.A great way to communicate with folks in the community, is to not force newer technology on each other, but share it. Encouraging stretching of skills is great, but trying to force yourself or someone else to use a Framework may not be the way to go. The panelists discuss their experiences in the community, and how different attitudes have affected members using different technologies.CollaborateAsk around! Need help? Reach out to devs in users groups, etc. Make the investment in your own skills, in your team skills, and don't be afraid to learn something new and ask questions.Picks:David: Get OpenJerome: Edibit, Extreme Ownership, New Rules Brian: Elm Charles: The Vanishing American Adult, Giftology Episode Links:Hacker News
RR 312 How to Handle WTF's
How to Handle WTFsOn today’s episode of Ruby Rogues we are chatting about WTFs. On our panel we’ve got Dave Carmona, Brian Hogan and I’m Charles Max Wood. We talk a bit about some of the recent WTFs we’ve encountered and some of our tricks for handling it, including talking to a Rubber Duck. It’s a fun episode so check it out!WTF’s in Two FlavorsCharles starts out the episode inquiring to the panel about two different kinds of WTFs. The whats and the whys. WTFs that happen and developers don’t understand what the WTF is, and then on the other hand WTFs that happen and the developer doesn’t know why it’s happening.Unreadable Perl and the Rubber DuckDavid talks a bit about how hard it is sometimes to read and understand what is happening with Perl code, even if you wrote it yourself. Sometimes debugging Perl codes many years later, running into syntax errors end up being a ‘Why’ WTF. He introduces a method to use for ‘Why’ WTFs that he calls the ‘Rubber Ducky Debugging’ method. The ‘Rubber Ducky Debugging Method’ is when you place a rubber duck on your desk, and when you encounter a WTF you can simply talk through the issue to the duck to help you think through your issue. Brian and Charles add that this method works fine with real people as well and have done it many times with their wives, even for issues that don’t involve code.Blaming it on Past BrianBrain mentions that sometimes when working with someone else’s code, it’s easy to blame the previous developer. Unfortunately in his case, Brian finds that “Past Brian” has often been the culprit.Dave and Code he Doesn’t UnderstandWhen encountering classes that are really big with many different methods, find the entry point. If it doesn’t have a traditional initializer or call method for the entry point, you can look around other relevant parts of the code to try and figure it out. Sometimes if it’s obfuscated, you can go through variables and rename them to more relevant names to identify what they are doing to help understand the method at hand.Puts Debugging Aaron Patterson had written an article on his blog about ‘Puts debugging’ that turned Dave onto the the untraditional debugging method. Dave will sometimes write a separate debugger class to separate puts into a different log to keep it organized.Brian’s Version of Puts DebuggingBrian mentions that when working on a rails application he will sometimes raise the object he wants to inspect. Errors in Ruby are often something you wouldn’t expect and being able to quickly inspect the object using raise .Using raises the whole stack including the object, session, and cookies , etc.Dave’s Ruby LifesaversDave also adds that adding the gems to your development better_errors, and then en binding_of_caller are lifesavers. It allows for a more interruptive session with raised errors. Also, in Rails 4 the console feature was added, allowing you to tweak things and play around to debug. Also, Pry is really useful for loop through and investigate. Dave also notes that Pry, while being a great tool, can sometimes be a bit annoying if you have a large number of loops.Crazy Bug Story - BrianBrian talks about how in Elixir the declaring of methods is very similar to Ruby but at the end of Elixir method calls you add keyword do. If you do this in Ruby, the interpreter’s error message is unusual and doesn’t give any information that helps you find the issue, making it very hard to find the issue. This could be very time consuming for the debugger. He adds that having a second pair of eyes helps with issues like these.Crazy Bug Story - DavidDavid talks about working on a personal project late into the night. Using Rails 5.1.1, he thought that maybe his issue with the enumerators. He considered that maybe the issue was with Rails 5.1.1 being that is newer. To test to find out if he caused the error, he recreated a simple bit of code that uses enumerators and saw that it worked, then created the same project in 5.1.1 and it also worked, concluding that he created the issue. Later he found he declared the datatype for the enumerator as a string instead of an int. Brian added that creating a fresh application to test for errors is a great way to start debugging, in comparison to immediately to asking others what the problem might be. This method of checking can have a quick pay off if the code is simple. Also, creating new applications to test gives a great foundation of knowing that the problem is in your own code.Crazy Bug Story - CharlesCharles’ bug was something he encountered in his podcast feed application he created in Rails 4. Charles didn’t read the error message very well so he tried it debugging it with Puts Debugging. It’s turned out that he was using a strftime method that he had accidentally formatted the string wrong, using -’s instead of /’s.Characterizing with a TestIn issues like Charles’ you can take input that’s going into a method and then setup an integration test. Tests like this can be made fairly quickly. By copying and pasting the input parameters into a test like a Capybara test, then you can get a better idea of where the issue actually is.Creating the Error to Fix the ErrorBrain mentions that sometimes when he has a specific error, he will try to write a new set of code that reproduces the issue. Then from there he will try to ‘break’ the broken code in efforts to find a debugging solution in the original code.Making your Production Environment The Same as Your Development EnvironmentIf you’re using something like caching in your production environment, make sure it is set up in your developmental environment. Debugging caching issues can be some of the most complicated bugs to fix. If you set up your environment to be the same it helps. If you need to start the caching over during development or tests, it’s as simple as a CLI command. When you’re doing feature tests, if you do it with caching enabled, you can use timecop. Timecop allows you to essentially time travel to test timing issues without having to wait.Favorite Development ToolsSome of the panelist’s favorite tools are Pry, binding_of_caller, better_errors, Konami, and Sinatra. Google Chrome’s RailsPanel extension Works like MiniProfiler, but digs in further. By adding this gem to your development environment and running it on Chrome, it shows you all the requests that come through, the controller in action, and lists out all the parameters, as well as active record calls and errors.Favorite Production ToolsBrian suggests using any tools available to capture exceptions and error messages. Capturing these issues before the user contacts you makes recreating the issue and debugging it a lot easier. Dave mentions using New Relic to capture performance of application as well as error notification. With New Relic you can adjust the notification threshold and give it actions like sending it to a Slack channel. Then use something like Sumo Logic to concatenate and combine the logs if it’s coming from various servers.Shipping Logs Off FluentD can be used to ship off logs to analyze. In some cases management won’t be okay with shipping things off. Doing things internally can sometimes be too much and using a third party aggregation tools can be helpful.Some Tools Can Be HeavySumo Logic applet is Java based and takes up quite a bit of space. Jenkins is also a Java setup and takes many parameters to get running. In some cases with smaller applications, applets like Sumo Logic can take up more space than the application. Trying to parse multiple servers can be daunting and will definitely need a centralized logging option.Other Logging Tools Elastic.co and Logstash are other logging tools. They have integrations with tools like Docker and Kibana. If you can roll your own logging tools then great. But it’s usually time consuming and takes resources.Getting Information from People and Assume It’s WrongCharles mentions that in some cases, especially in cases where something you’re using is dated, resources can be limited to get information on a bug you’re having. Brian suggests that when this happens, getting information out of people is a good place to start. Also, when getting information from people, assume that it’s wrong. People tend to have a pretty poor recollection of what happened. You can sometimes take what they say and compare it to the logs to create tests and logically work out how something has happened. Users will sometimes leave out things like accidentally leaving a field blank, or hitting backspace, or something simple. Extracting information from the users to get relevant information is a skill. Sometimes the best way to get information from a user is to just watch them use the application. Sometimes they will use the application in ways unexpected. Approaching the problem with “Let’s fix this together” helps with getting the client to help.Getting Access with Production DataDavid mentions that If there is an issue with the production side of things, pulling data down into your own database and your own separate testing environment can keep it safe while debugging. If you’re able to recreate the issue than most likely it’s an application issue, otherwise it’s something to do with the environment like caching.Safely Percautions of Having Client Data on Your ComputerIf you’re pulling data down, you should absolutely have your devices encrypted. There is no reason not to. Also when pulling data down, you can create a mirror of the data dump. There are systems that dump data that will also obfuscates or remove particular information including personal information like emails.Troubleshooting ActionCable: Step 1 - Cry in a CornerDavid tells how he was troubleshooting an Actioncable issue and his first step was to cry in a corner for 5 minutes. Afterwards he used Chrome Dev tools to trace back the code’s method where it was getting declared. Sometimes if an application is complicated it can be running many moving parts and be difficult. When debugging something complicated start at the browser level. Check for connection then try pushing a message in the console. If you get it then you’re connecting but not broadcasting. If you have a complicated subscription model for authorizing a channel, it can be even harder, again start with checking to see if it’s connecting.tail -f | grep ‘exception’Charles remembers a simple way to watch for issues while debugging. A simple use of tail -f | grep ‘exception’ tails the logs and shows only the exceptions. You can use this along with Put debugging by putting the word in all your puts.PicksBrianLearningmusic.abelton.comDavid RailsPanel His new 5 foot long 12 plug power stripCharles Microsoft Build .Net Rocks Podcast Ketogenic Diet & Livin’ La Vita Low Carb Rubydevsummit.com
RR 311 Data Corruption in Rails with Peter Bhat Harkins
Today's Ruby Rogues podcast features Data Corruption in Rails with Peter Bhat Harkins. Peter started in rails since the time version 1.0 was released. He spent 5 years consulting full time, and now runs a consultancy for SAAS companies at Revenue.systems.Few months ago, he spoke at the Rails Remote Conf about Data Corruption in Rails. The issue comes up when a .valid call returns false. It happened twice on his end. Tune in to learn about it, and understand how you can provide an effective solution!Special Guest: Peter Bhat Harkins.
RR 307 MOOCs with Sam Joseph
Today's Ruby Rogues podcast features MOOCs with Sam Joseph. Sam is the Chair of the Board of Trustees and the CoFounder of AgileVentures. They gather people from around the world to form small agile development teams for nonprofits and charities. He has been programming for a couple of years already. Tune in and learn about the massive open online course they're having!Special Guest: Sam Joseph.
RR 310 Phusion Passenger with Hongli Lai
Today's Ruby Rogues podcast features Phusion Passenger with Hongli Lai. Phusion Passenger is an intuitive web app server that a lot of developers enjoy. Hongli co-founded the company in 2008. Take some time to listen and learn more about it!Special Guest: Hongli Lai .
RR 309 Ramping Up on Existing Projects
On today's episode, Charles, David, Brian, and Jason discuss Ramping Up on Existing Projects. Are you engaged in new projects but challenged on how to handle people, processes, and problems you just encountered? Tune in to learn different strategies that will get you out of the maze!
RR 308 Confident Software with Mikel Lindsaar
On today's episode, Charles and Dave discuss Confident Software with Mikel Lindsaar. Mikel wrote the Mail Gem, which is what he is known for in the Ruby community and rewrote TMail back in 2010. In the same year, he founded Reinteractive, a development company which is focused Ruby on Rails around the world. Tune in to learn more about what he's up to and find out what the episode has in store for you!Special Guest: Mikel Lindsaar.
RR 306 TinyTDS, Databases, and SQL Server with Ken Collins
On today's episode, Charles, David, Jason, and Brian discuss TinyTDS, Databases, and SQL Server with Ken Collins. Ken has been in the industry for more than eight years. He is particularly known for the SQL Server Adapter for Active Records and TinyTDS. He currently works for CustomInk, and runs the Ruby user group in Hampton. Tune in!Special Guest: Ken Collins.
RR 305 Rails 5.1.0
On today's episode, Charles and David discuss about Rails 5.1.0. The new release is moving the community towards front-end JavaScript. Starting a Vanilla application has even become more convenient with Yarn and Webpack support. Tune in to this exciting talk to learn more!