The 4 Steps to Bringing Life to a Project

In initial stages of our new business or a startup, when there is no clarity, we prefer to have short-term solutions for our product: hiring and changing contractors, delivering with technical debts, changing requirements often.

And finally we are beginning see some success, our product idea attracts customers and they are ready to pay for it. With such an accomplishment, we could get more investment to improve and evolve it.

But it comes at a price. Short-term decisions reduce the velocity of delivering new features. Maybe it’s better to drop off the previous solution and rewrite it taking into consideration all new knowledge, but we are not ready to support 2 products. And it’s hard to sell such solutions to investors.

We want to invest into improving previous solutions and prepare a base for new features.


Inexpensive is Not Cheap. Choosing Software Development Company for Your Project

You have a great idea for a new product or a growing business and need a team of software developers. The number of companies and freelancers on IT market might be overwhelming. There are numerous decisions you have to make. For example:

  • Whether to choose an agency or an individual freelancer?
  • The local provider or an outsource company abroad?
  • Place a bid on a freelance market or contact a company directly?
  • Ask for a fixed price or hourly rate?

And then comes one of the most ambiguous issues - the price. Should you go with the cheapest, cheap, in-between or an expensive team?


Speed Up Your Rails Test Suite By 6% In 1 Line

caber toss

At one project we have a set of currently 3k+ tests, running more than 2 minutes. Most of the test cases rely on the DB, and ActiveRecord logs all queries by default. The test.log grows by around 20M per suite run.

Once again deleting an overgrown local log file, I thought that we don’t really need it and logging in a test mode should be better disabled by default.


Revise Your Stylesheets. Part 1. Color Scheme

jake-the-dog-enjoys-the-rainbow

Ever wonder how many colors exist in your project? Do you have strict style guides kindly prepared by the design lead? How many psds did you slice for this particular project? Do you work alone or do you have a large front-end team and no codestyle manifest? I bet that one day you’ll wake up and see a rainbow full of hex, rgb and rgba colors spread all over the 100 scss files. And do you want to know how to merge 300 colors into 30? In this article you’ll see how to gather and visualize colors presence in your project.


How To Name Variables And Methods In Ruby

“What’s in a name? that which we call a rose
By any other name would smell as sweet.”

― William Shakespeare, Romeo and Juliet

Junior developers often struggle to choose good names for variables and methods they write. Or even dismiss the need in proper names without any struggle at all. I blame computer science education with its strange love for one-letter variables (or, when all letters are taken, then one-letter-and-a-number).


How to Setup a Project That Can Host Up to 1000 Users for Free

Basic Heroku Setup or Staging Configuration

TL;DR Fast, simple & cheap project setup for a start-up, that can handle up to thousand users.


Responsive or Adaptive Design? Find out which one is better for you

JetThoughts has launched a new project recently. Whole front-end team was set and started developing the UI part. They designed selected and adapted the suitable libraries, plugins, distributed the tasks – everything as usual. At this stage, a question arises: how the customer sees his future application. Fortunately, we’ve already had several ready design layouts based on which we could estimate the basic layout. Was it responsive in this case…. or adaptive after all?

There are many posts and discussions on a subject in what way a responsive design differs from an adaptive one. Why use one or another, what types of layers the global information resources, social networks (Facebook, Twitter, AIRBNB) use - we are going to consider this issue for our part. First, let’s have a look at peculiarities of these approaches once again.


How We Temporarily Transformed Our Usual Workflow for a Tight Deadline

Time makes rules

Every time when we start working on a new project, short iteration or just a new feature, we almost always worry about a delivery deadline. «Do we have enough time for this feature?», «Will we do it in time before customer loses the trust to us…». We always try to give an accurate estimation.

We always wonder: «Will we be able to make it within this ETA and own workflow?». But, sometimes, when we had begun working on a particular task and had investigated it deeper, you realise that you don’t fit into the initial estimation.


Setup Prometheus in Amazon EC2 via ElasticBeans talk and Docker

What is ElasticBeanstalk? It is one of Amazon Services that help developers to deploy applications. Now any cloud hosting wants to be modern and support docker, ElasticBeanstalk is one of them. Developers replace chef recipes with Dockerfile and don’t even think why.

Best practice of Docker runs only one process. We often require more than one process like Application, DB, Background Workers etc. Before March 24, 2015 ElasticBeanstalk did not support multi-container on one instance. The Multi-container Docker platform differs from the other platform that ElasticBeanstalk provides. It replaced the custom bash scripts with Elastic Container Service commands. And this is Awesome!

Prometheus is a monitoring system. Why have I chosen Prometheus to describe how ElasticBeanstalk works? Because it contains multiple modules written with the help of different technologies.

Let’s play.


How To Memoize False and Nil Values

TL;DR: if method can return false or nil, and you want to memoize it, use defined?(@_result) instead of ||=.

Memoization is a useful technique which helps to achieve cleaner and more efficient code. When some expensive method of an object is called, we save its value to an instance variable, so that we don’t have to do those heavy calculations again.


Mock Everything Is a Good Way to Sink

Have you found a lot of code with mocks and stubs? But how do you feel about it? When I see mocks/stubs, I am always looking for the way to remove them.

Application lifecycle with mocking everything strategy:

  1. Everything starts from a happy developer and a clean architecture with fastest tests.
  2. And one day in the middle of development we have changed the core application business logic.
  3. We have changed our code base according to new requirements, and now we expect to have failed tests …. oops, most of expected tests pass successfully instead of failing.
  4. We found mocks in the code, updated them.
  5. And now we have a hunch, that tests are cheating on us, so we should find all similar mocks and update them to correspond the last requirements.
  6. And even after reviewing all tests, we still have considerable misgivings.

Pay Attention to Method Names in Minitest::Unit

TL,DR: don’t define any methods with names name, message, time, pass in Minitest::Unit test cases unless you really want to override those of Minitest::TestCase.

When writing Minitest::Unit tests, it’s convenient to use test case’s instance methods as kind of RSpec’s lazy-evaluated let-blocks or various helper methods.





Visualization of Your Code

Working at long and big projects, it is fun to see on a release date how this project was built: who worked at a particular part; when a new guy joined the project, deleted some code and did refactoring; or when the lead developer went to vacation. There is a lot of such tools, you can even use a browser version. But I still prefer using gource (https://github.com/acaudwell/Gource)

This story would be about how to setup and automize video creation, what general issues you will encounter and other stuff.


It's Time For Active Job

Recently we have upgraded one of our own projects to Rails 4.2. New minor version contains many improvements of old features and adds some new ones. One of most interesting (and helpful) new features is adding a new framework for declaring jobs and making them run on a variety of queueing backends - Active Job.

It is hard to imagine any big and complex Rails project without background jobs processing. There are many gems for this task: Delayed Job, Sidekiq, Resque, SuckerPunch and more. And Active Job has arrived here to rule them all.


How We Hire Developers at JetThoughts

Hiring process at JetThoughts is aimed at building a solid team. We are a small company, and it is crucial to hire right people who have the relevant experience and the same mindset as the rest of the team. This is a guide on how we hire developers.

1.Intro

All the available positions are listed on our Career page. Also we post openings at job boards and share information on social media. You can subscribe to our accounts (Facebook, Twitter, LinkedIn) and never miss a suitable vacancy. If there are no openings that meet your skill set, we still would be glad to receive your application at cv@jetthoughts.com.

So, we look at the CV that you have submitted. At first point of contact we would like to know who you are, what is your expertise, and how your skills and qualifications meet our needs. Remember that the CVs with cover letters tailored for our company always stand out among copypasted text like “Hi, I’m interested in Ruby on Rails position.”

Here is the list of the things that are the most important for JetThoughts:


Test Driven Thinking for Solving Common Ruby Pitfalls

– Comrade! Our Great Leader requests a web-service for his Despotic Duties! He has chosen you for completing the Booletproof Automate Bloody Repression Machine with REST API, Authorization and other munchies for glory of the Empire.

OK, does it look like a regular specification for your customer’s new project? As professional developers we definitely can handle this. Let’s dive into our goals:

  • We have to research the domain of bloody repressions
  • Define pros and cons of existing systems
  • Continously deliver product for Leader’s demands
  • Bug should not pass (we know that repression isn’t your uncle’s joke)

Weekly Ruby News - 11/21/2014

The best Ruby and Ruby on Rails articles found in the Ruby community over the past week:

  • [Rails 3.2.21, 4.0.12, and 4.1.8 are released.] (http://weblog.rubyonrails.org/2014/11/17/Rails-3-2-21-4-0-12-and-4-1-8-have-been-released) These versions contain a security fix: the existence of arbitrary files on the file system can be leaked, but the contents of the file will not be leaked.

  • [Massive Garbage Collection Speedup in Ruby 2.2] (https://www.omniref.com/blog/blog/2014/11/18/ko1-at-rubyconf-2014-massive-garbage-collection-speedup-in-ruby-2-dot-2) Koichi Sasada gave a detailed description of some massive speedups that are going to be released as a part of Ruby 2.2.

  • [Creating Rails Active Record Validation Contexts with Inheritance] (http://brandonhilkert.com/blog/creating-rails-active-record-validation-contexts-with-inheritance)

  • [Writing DSLs in Ruby without monkeypatching Object] (http://pragtob.wordpress.com/2014/11/19/writing-dsls-in-ruby-without-monkeypatching-object) This blog post might be useful in creating beautiful DSLs without polluting other objects.

  • Some thoughts about the concepts of [Healthy Codebase and Preparatory Refactoring] (http://brewhouse.io/blog/2014/11/10/healthy-codebase-and-preparatory-refactoring.html)


Weekly Ruby News - 11/13/2014

The best Ruby and Ruby on Rails articles found in the Ruby community over the past week:

  • Check if you have read all of these [6 Best Ruby Programming Books] (http://www.fromdev.com/2014/11/ruby-programming-books.html)
  • A comparison of the most popular hosting solutions [Rails Hosts: Amazon AWS vs. Digital Ocean vs. Heroku vs. Engine Yard] (http://www.airpair.com/ruby-on-rails/posts/rails-host-comparison-aws-digitalocean-heroku-engineyard)
  • [Back to Basics: Anonymous Functions and Closures] (http://robots.thoughtbot.com/back-to-basics-anonymous-functions-and-closures) Anonymous functions and closures are a useful concepts included in most modern programming languages.
  • [4 Fantastic Ways to Set Up State in Minitest] (http://chriskottom.com/blog/2014/10/4-fantastic-ways-to-set-up-state-in-minitest)
  • AngularJS is trending right now. Is it better than Ember.js? [Rails JS frameworks: Ember.js vs. AngularJS] (http://www.airpair.com/ruby-on-rails/posts/ember-vs-angular-with-rails)

Our Default Ruby Development Stack

Not that long ago I joined JetThoughts. By this time I studied the team, the workflow, colleagues minds (just a little) and technologies used to build applications.

Development is based on agile methodologies which means that clients are continuously getting new or changed functionality for their product deployed and maintained.

Applications I know about are written in Ruby on Rails. Technologies used by team are mostly common for RoR developers but therefore flexible to meet clients requirements. We use both default(omakase) and advanced technologies stacks.

The most common database choice is PostgreSQL but MongoDB or any other SQL(which relates to default stack), or NoSQL database can be used too.


Recent Searches & Sorting Hashes: How They are Connected

In one of the applications, that we are developing, we needed to implement the storing of 10 last user search requests. If they were simple text queries, that would be the end of the story. However, the issue turned out to be much more complicated, because we had to save search filters.

In general, the search filter may be represented as a set of attributes, such as:

1
2
3
price_min: 100,
price_max: 1000,
color: 'red'

5 Steps to Add Remote Modals to Your Rails App

Sometimes you don’t want to write big javascript application just to have working remote modals in your rails application. The whole JSON-response parsing thing looks big and scary. Why can’t we simply render our views on server and just display them as modals to users? Let’s take a look at how we can implement this with elegance.