In this commercially advancing world, office space is one of the most important sought-after properties. Companies that have vacant spaces can consider giving it out for rent. Underutilized Office Spaces? Some offices may have big conference...
In this commercially advancing world, office space is one of the most important sought-after properties. Companies that have vacant spaces can consider giving it out for rent. Underutilized Office Spaces?
Some offices may have big conference rooms, small meeting rooms, or even vacant cabins that are not being utilized up to their capacity. These underutilized spaces can add to your income. You can list these spaces online for rent, and voilà! You will find people reaching out to you. If you add amenities like a printer, fax, whiteboard, or a projector along with office space, you will find the demand for your underutilized space going up, and you will start earning a good income out of it. Consider Renting it Out?
Are you still wondering whether you can rent out your extra space in the office? Currently, ShareDesk is a key contributor to the sharing economy. They provide shared workspaces by renting it to freelancers.
Some well-known companies like; Airbnb and Roomorama have proven this idea of short-term renting of residential places. Thus, this idea can work well for commercial spaces as well.
Don't believe? Let's look at some reasons to rent out your extra office space.
Have a look.
Co-working is a trend now as this community brings companies and freelancers under one roof. As a result, co-working software is becoming a trend. This will result in professional connections and interactions.
For example, if an advertising agency rents their free space to a design agency, then it will benefit both the agencies in their growth.
Thus, if you have a spare space in your office, then rent it out to the people who are running a business that you want to associate.
Renting out your spare office space can help you earn extra money. You can earn tens of thousands every month as per the location and size of the spare room.
Now, you may consider it a stressful job as you may need the help of a broker. However, now you can do this without the help of a broker as well. You can list your space digitally via Rentcubo’s rental management software, which is more flexible and hassle-free to use.
If you have vacant space in your office and want to rent it out, then consider people who are of a similar community. For example, if your office space is in a location, which is famous for startups, then consider choosing startup businesses as tenants.
As there is an increase in professionals working as freelancers, there is a growing need for co-working spaces. Shared office spaces can conveniently meet the needs of such professionals who are working on projects. A shared office opens up opportunities for most professionals to be creative and interact with people from different fields. They can meet people from their background or even competitors. It helps them in getting a broader view of how things are changing in the market and adapt to these changes quickly.
Some businessmen have to travel a lot with regards to their work. The schedules of these businessmen are generally busy with meetings and catching up with work. However, they wouldn't prefer to conduct the meeting in a hotel lobby or chat with clients in their room. They would prefer to conduct their meetings in an office-like environment with access to a printer, whiteboard, and other such amenities.
Now, in this situation, they would want to know if there is a rented office space available for a few hours or days. A rented spare office is quite an advantage for a businessman who is on a visit for a few days. An office-like environment would give access to amenities like fax or printer. He would also want to inquire in advance if he would get access to such amenities before making a booking.
Rental Booking software
So the rental booking software can make things more pleasant. The software would allow the booking of the office space and also select the amenities that are required. For instance, a desk with two chairs, a printer, and a whiteboard is your requirement. The software or App would allow selecting the required office amenities and also provide payment options. Once you make the selection and make the payment, you are good to go.
Thus rental booking software can be quite helpful in booking spare office spaces or for you to share office space with someone in need.
I hope now you have got a clear idea of how renting your spare office space can benefit you and how rental booking software can help you with this. However, if you still have any inquiries regarding the same, please feel free to reach out to us at [email protected].
Self-storage is one of the trending things, which is growing day-by-day. The growth of the self-storage trend is creating new and unique opportunities for developers, operators, and investors. For example, the marketplace of the U.S. is continuing...
As of now, many are looking forward to becoming successful entrepreneurs all over the world. In today’s world, launching a business and reaching the targeted audience is not a complex task. This is easily possible with the help of several latest...
Today the entire world is affected badly by the pandemic named Covid-19. Everything has changed due to this pandemic. This pandemic has affected several people, as well as business worse. This scenario has made people getting adapted to a...
Traffic congestion is something that each and every one of us despises. The primary culprit is again the US. With an increased number of cars on the road, average travel time increases many folds, thereby increasing the cost of maintenance. One of...
How to Write Fast Code in Ruby on Rails - At Shopify, we use Ruby on Rails for most of our projects. For both Rails and Ruby, there exists a healthy amount of stigma toward performance. You’ll often find examples of individuals (and entire companies) drifting away from Rails in favor of something better. On the other hand, there are many who have embraced Ruby on Rails and found success, even at our scale, processing millions of requests per minute (RPM). Part of Shopify’s success with Ruby on Rails is an emphasis on writing fast code. But, how do you really write fast code? Largely, that’s context sensitive to the problem you’re trying to solve. Let’s talk about a few ways to start writing faster code in Active Record, Rails, and Ruby. Active Record Performance Active Record is Rails’ default Object Relational Mapper (ORM). Active Record is used to interact with your database by generating and executing Structured Query Language (SQL). There are many ways to query large volumes of data poorly. Here are some suggestions to help keep your queries fast. Know When SQL Gets Executed Active Record evaluates queries lazily. So, to query efficiently, you should know when queries are executed. Finder methods, calculations, and association methods all cause queries to evaluated. Here’s an example: Here the code is appending a comment to a blog post and automatically saving it to the database. It isn’t immediately obvious that this executes a SQL insert to save the appended blog post. These kinds of gotchas become easier to spot through reading documentation and experience. Select Less Where Possible Another way to query efficiently is to select only what you need. By default, Active Record selects all columns in SQL with SELECT *. Instead, you can leverage select and pluck to take control of your select statements: Here, we’re selecting all IDs in a blog’s table. Notice select returns an Active Record Relation object (that you can chain query methods off of) whereas pluck returns an array of raw data. Forget About The Query Cache Did you know that if you execute the same SQL within the lifetime of a request, Active Record will only query the database once? Query Cache is one of the last lines of defense against redundant SQL execution. This is what it looks like in action: In the example, subsequent blog SELECTs using the same parameters are loaded from cache. While this is helpful, depending on query cache is a bad idea. Query cache is stored in memory, so its persistence is short-lived. The cache can be disabled, so if your code will run both inside and outside of a request, it may not always be efficient. Avoid Querying Unindexed Columns Avoid querying unindexed columns, it often leads to unnecessary full table scans. At scale, these queries are likely to timeout and cause problems. This is more of a database best practice that directly affects query efficiency. The obvious solution to this problem is to index the columns you need to query. What isn’t always obvious, is how to do it. Databases often lock writes to a table when adding an index. This means large tables can be write-blocked for a long time. At Shopify, we use a tool called Large Hadron Migrator (LHM) to solve these kinds of scaling migration problems for large tables. On later versions of Postgres and MySQL, there is also concurrent indexing support. Rails Performance Zooming out from Active Record, Rails has many other moving parts like Active Support, Active Job, Action Pack, etc. Here are some generalized best practices for writing fast code in Ruby on Rails. Cache All The Things If you can’t make something faster, a good alternative is to cache it. Things like complex view compilation and external API calls benefit greatly from caching. Especially if the resultant data doesn’t change often. Taking a closer look at the fundamentals of caching, key naming and expiration are critical to building effective caches. For example: In the first block, we cache all subscription plan names indefinitely (or until the key is evicted by our caching backend). The second block caches the JSON of all posts for a given blog. Notice how cache keys change in the context of a different blog or when a new post is added to a blog. Finally, the last block caches a global comment count for approved comments. The key will automatically be removed by our caching backend every five minutes after initial fetching. Throttle Bottlenecks But what about operations you can’t cache? Things like delivering an email, sending a webhook, or even logging in can be abused by users of an application. Essentially, any expensive operation that can’t be cached should be throttled. Rails doesn’t have a throttling mechanism by default. So, gems like rack-attack and rack-throttle can help you throttle unwanted requests. Using rack-attack: This snippet limits a given IP’s post requests to /admin/sign_in to 10 in 15 minutes. Depending on your application’s needs, you can also build solutions that throttle further up the stack inside your rails app. Rack-based throttling solutions are popular because they allow you to throttle bad requests before they hit your Rails app. Do It Later (In a Job) A cornerstone of the request-response model we work with as web developers is speed. Keeping things snappy for users is important. So, what if we need to do something complicated and long-running? Jobs allow us to defer work to another process through queueing systems often backed by Redis. Exporting a dataset, activating a subscription, or processing a payment are all great examples of job-worthy work. Here’s what jobs look like in Rails: This is a trivial example of how you would write a CSV exporting job. Active Job is Rails’ job definition framework which plugs into specific queueing backends like Sidekiq or Resque. Start Dependency Dieting Ruby’s ecosystem is rich, and there are a lot of great libraries you can use in your project. But how much is too much? As a project grows and matures, dependencies often turn into liabilities. Every dependency adds more code to your project. This leads to slower boot times and increased memory usage. Being aware of your project’s dependencies and making conscious decisions to minimize them help maintain speed in the long term. Shopify’s core monolith, for example, has ~500 gem dependencies. This year, we’ve taken steps to evaluate our gem usage and remove unnecessary dependencies where possible. This lead to removing unused gems, addressing tech debt to remove legacy gems, and using a dependency management service (eg. Dependabot). Ruby Performance A framework is only as fast as the language it’s written in. Here are some pointers on writing performant Ruby code. This section is inspired by Jeremy Evans’s closing keynote on performance at RubyKaigi 2019. Use Metaprogramming Sparingly Changing a program’s structure at runtime is a powerful feature. In a highly dynamic language like Ruby, there are significant performance costs associated to metaprogramming. Let’s look at method definition as an example: These are three common ways of defining a method in Ruby. The first most common method uses def. The second uses define_method to define a metaprogrammed method. The third uses class_eval to evaluate a string at runtime as source code (which defines a method using def). This is output of a benchmark that measures the speed of these three methods using the benchmark-ips gem. Let’s focus on the lower half of the benchmark that measures how many times Ruby could run the method in 5 seconds. For the normal def method, it was ran 10.9 million times, 7.7 million times for the define_method method, and 10.3 million times for the class_eval def defined method. While this is a trivial example, we can conclude there are clear performance differences associated with _how_ you define a method. Now, let’s look at method invocation This simply defines invoke and method_missing methods on an object named obj. Then, we call the invoke method normally, using the metaprogrammed send method, and finally via method_missing. Less surprisingly, a method invoked with send or method_missing is much slower than a regular method invocation. While these differences might seem minuscule, they add up fast in large codebases, or when called many times recursively. As a rule of thumb, use metaprogramming sparingly to prevent unnecessary slowness. Know the difference between O(n) and O(1) What O(n) and O(1) mean is that there are two kinds of operations. O(n) is an operation that scales in time with size, and O(1) is one that is constant in time regardless of size. Consider this example: This becomes very apparent when finding a value in an array compared to a hash. With every element you add to an array, there’s more potential data to iterate through whereas hash lookups are always constant regardless of size. The moral of the story here is to think about how your code will scale with more data. Allocate Less Memory management is a complicated subject in most languages, and Ruby is no exception. Essentially, the more objects you allocate, the more memory your program consumes. High-level languages usually implement Garbage Collection to automate removal of unused objects making developers’s lives much easier. Another aspect of memory management is object mutability. For example, if you need to combine two arrays together, do you allocate a new array or mutate an existing one? Which option is more memory efficient? Generally speaking, less allocations is better. Rubyists often classify these kinds of self-mutating methods as “dangerous”. Dangerous methods in Ruby often (but not always) end with an exclamation mark. Here’s an example: The code above allocates an array of symbols. The first uniq call allocates and returns a new array with all redundant symbols removed. The second uniq! call mutates the receiver directly to remove redundant symbols and returns itself. If used improperly, dangerous methods can lead to unwanted side effects in your code. A best practice to follow is to avoid mutating global state while leveraging mutation on local state. Minimize Indirection Indirection in code, especially through layered abstractions, can be described as both a blessing and a curse. In terms of performance, it’s almost always a curse Merb, a web application framework that was merged into Rails has a motto: “No code is faster than no code.” This can be interpreted as “The more layers of complexity you add to something, the slower it will be.’’ While this isn’t necessarily true for performance optimizing code, it’s still a good principle to remember when refactoring. An example of necessary indirection is Active Resource, an ORM for interacting with web services. Developers don’t use it for better performance, they use it because manually crafting requests and responses is much more difficult (and error prone) by comparison. Final Thoughts Software development is full of tradeoffs. As developers, we have enough difficult decisions to make while juggling technical debt, code style, and code correctness. This is why optimizing for speed shouldn’t come first. At Shopify, we treat speed as a feature. While it lends itself to better user experiences and lower server bills, it shouldn’t take precedence over the happiness of developers working on an application. Remember to keep your code fun while making it fast! Additional Reading Caching with Rails: An Overview Optimization Techniques Used by the Benchmark Winners Slides - Jeremy Evans - RubyKaigi 2019 We’re always looking for awesome people of all backgrounds and experiences to join our team. Visit our Engineering career page to find out what we’re working on.