menu

Alumni Blogs

Lots of our people have lots of opinions. Here are just a few of them

ThoughtWorks embraces the individuality of the people in the organization and hence the opinions expressed in the blogs may contradict each other and also may not represent the opinions of ThoughtWorks.

Ruby Tips - How to figure out where a method is defined

The other day when I was dabbling with the huge codebase, I was wondering where a particular method was being declared for a specific method. I wanted to know this because my greps didn't turn out to volatile and didn't return any results



The Solution

The Ruby interpreter has certain methods that can be used for identifying under which module or class, the particular method is being defined. See the example below.


So using the .source_location you will be able to figure which file it has been declared.

Jey Geethan
12 August 2018

Original Link

Why I like Cucumber (beyond BDD)


There is a sentiment in software development that if you do not have a working BDD practice then Cucumber is just unnecessary overhead. I understand this position, but I disagree, based on my own experience and my own practice. I find Cucumber is particularly valuable in automated browser tests.

I've been using Cucumber for automated browser tests at work just about every day for the last six years or so. At the same time, I have never worked with a full-on BDD team. Beyond BDD, here are three aspects of Cucumber I find particularly valuable:

  • Cucumber creates a low barrier…

Chris McMahon
9 August 2018

Original Link

Remember where it all started

I love stories that can remind me where it all started. I remember that about my basketball dreams, the first time I’ve played the piano, first time I wrote some poetry, first time I’ve done a presentation, first time playing drums, first time playing as a band, first company, and I’m thankful for all the … Continue a ler Remember where it all started

dwildt
6 August 2018

Original Link

Decentralize, Centralize or Somewhere In-Between?

I’m trying to model the world of centralized, decentralized, and an in-between place that I think (among other solutions), Git as a store and GitHub (as a platform, but imperfectly) fit as a solution.

I have a diagram of that model, that shows Bitcoin and a property ownership database are on a centralized/decentralized spectrum:

Bitcoin

Full decentralized. You don’t need anyone’s permission to buy or sell Bitcoin (even though your nation-state may try to legislate it). You also don’t need anyone’s permission to mount something like an exchange, though you’ll need to gain the trust of a community to get…

Paul Hammant's blog
6 August 2018

Original Link

Watir: the first five years



Some of the Watir community has been discussing the history of the project. Here I try to set down some notable things that I remember about that time.

We have to start the story of Watir with Ruby. The first English documentation for Ruby was published in 2000, and it garnered a lot of interest, particularly as it was so amenable to creating Domain Specific Languages (DSLs), which caught the attention of a number of people working in testing, and in the Agile world. Python 2.0 also came out in 2000, and the dominant scripting language at the time was…

Chris McMahon
3 August 2018

Original Link

成都虹达瑞鑫科技有限公司怎么样

成都虹达瑞鑫科技有限公司怎么样 现在是夏天时节,在一些地区空调是家家必备设备,有网友投稿说这么热的天修空调的公 […]

笑捧博客
31 July 2018

Original Link

一诺互联怎么样?

一诺互联怎么样? 最近有网友投稿说南通一诺网络科技有限公司是骗子公司,不退款! 网友原文: 南通一诺网络科技有 […]

笑捧博客
31 July 2018

Original Link

Cross-Site Forgery Protection in Rails Tests

Cross-Site Forgery Protection (also known as CSRF Protection) is a built-in feature in Rails.

Controller actions are protected from Cross-Site Request Forgery (CSRF) attacks by including a token in the rendered HTML for your application. This token is stored as a random string in the session, to which an attacker does not have access. When a request reaches your application, Rails verifies the received token with the token in the session. All requests are checked except GET requests as these should be idempotent. Keep in mind that all session-oriented requests should be CSRF protected, including JavaScript and HTML requests.

Jaco Pretorius
30 July 2018

Original Link

Probably not

When working in complexity, where the right thing to do emerges and we learn by actually trying things rather than by analysis, there’s a very human instinct that happens when we think of probes to try out. I see it … Continue reading

Liz
28 July 2018

Original Link

Pragmatic Business Analysis: Let's Start Calling Ourselves Product Managers. Seriously.

noreply@blogger.com (Elena Yatzeck)
27 July 2018

Original Link

乐山市沙湾区踏水徐诚装饰(四川乐山徐诚装饰)怎么样?

乐山市沙湾区踏水徐诚装饰(四川乐山徐诚装饰)怎么样? 四川乐山徐诚装饰怎么样?是不是骗子公司?今天收到一个网友 […]

笑捧博客
25 July 2018

Original Link

Win-Win Vendor Contracts

Vendor/Client contract folklore

I previously wrote something on juggling scope, schedule, resources and quality: The iron triangle is actually a square and not particularly iron. I learned in ThoughtWorks that you ask the client to find some other vendor when they suggest that quality is the thing that should be limited (in order to meet dates+scope+cost). And that faced with any other permutation the only win-win scenario is to constrain all but scope.

If you attempt to constrain all four, you get salespeople running interference on messaging, and stand to lose in multiple other ways. Invariably change requests…

Paul Hammant's blog
24 July 2018

Original Link

武汉米兰天地装饰设计工程有限公司怎么样

武汉米兰天地装饰设计工程有限公司怎么样 投稿的行业多种多样,本篇文章是讲建筑行业的武汉米兰天地装饰设计工程有限 […]

笑捧博客
24 July 2018

Original Link

吃苦的意义到底是什么呢

吃苦的意义到底是什么呢 《苦难不值得迷恋》的文章,作者讲述父亲从小以“吃得苦中苦,方为人上人”来教育自己,以至 […]

笑捧博客
24 July 2018

Original Link

广州德鸿文化发展有限公司怎么样

广州德鸿文化发展有限公司怎么样 近日有收到几份古玩行业的投稿,本篇文章是关于广州德鸿文化发展有限公司的,广州德 […]

笑捧博客
24 July 2018

Original Link

广东胜大艺术品展览有限公司怎么样?

广东胜大艺术品展览有限公司怎么样? 很多朋友看到过各种各样的艺术品展览公司,也许你看到过广东胜大艺术品展览有限 […]

笑捧博客
24 July 2018

Original Link

Catch Unsafe Migrations With The Strong Migrations Gem

It is possible to do database migrations without incurring any downtime as long as we follow certain patterns. For example, instead of renaming a column (which is not backwards-compatible with currently running web servers) in one step, you would so in 3 steps:

  1. Add the new column and start writing to both columns but keep reading from the old column
  2. Sync the new column with the old and stop writing to the old column
  3. Drop the old column

A very useful tool in this context is the Strong Migrations gem. This gem will detect potentially unsafe migrations and prevent…

Jaco Pretorius
19 July 2018

Original Link

How to add navigation items to the Navigation Bar iOS

When you embed your root viewController into a NavigationController, your sub ViewControllers automatically get a title bar. But they don’t get any Nav bar items. To add something like a Welcome button for back navigation drag out a Navigation Item And drop it into the middle of the navbar. Same for a button. Only a […]

JR
16 July 2018

Original Link

How to change which ViewController loads at startup in Storyboard

You can drag around the little arrow from one VC to the other. Or your can select the little checkbox in the menu titled ‘Is Initial View Controller’ near the top on the right hand side. Advertisements

JR
16 July 2018

Original Link

When to use Optionals in Swift

Being new to Optionals, sometimes I struggle for good examples on where and when to use them. Here’s an example I link that show how one could use an Optional to model an AccountBalance. Both the ledger and overdraftLimit are let’s (meaning once assigned they can’t be changed). But the overdraftLimit is also an Optional […]

JR
16 July 2018

Original Link