更多

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.

Update

It’s almost a year since my last blog post. I’ve had a busy and interesting year, and wanted to take the time to talk about a few different things. One of the reasons I haven’t blogged as much as I wanted is that I’ve been working on several things that aren’t exactly public at the moment. Moving to Ecuador has also involved a whole bunch of work and lead to less time.

Computer and cloud

Some of my last blog posts had to do with me wanting to change what hardware and cloud providers I used. I went through a…

Blog post by Ola Bini
28 August 2014

Original Link

What A Piece of Plywood Can Teach Us About Software Design

When I was in high school and college, I was heavily into technical theatre (scenery, lighting, etc).  Today, I want to talk a little an experience I had studying stage design, and somehow try to relate that back to software design, business analysis and problem solving. 

A little background on on me.  I love to build things.  I love the idea of shaping things by hand, of and building things from scratch (it's also why I enjoy cooking).  I got into theatre through carpentry.  I started off building stuff, and eventually worked my way up to designing the stuff to…

Blog post by Michael DeCleene
28 August 2014

Original Link

Bliki: MicroservicePrerequisites

As I talk to people about using a microservices architectural style I hear a lot of optimism. Developers enjoy working with smaller units and have expectations of better modularity than with monoliths. But as with any architectural decision there are trade-offs. In particular with microservices there are serious consequences for operations, who now have to handle an ecosystem of small services rather than a single, well-defined monolith. Consequently if you don't have certain baseline competencies, you shouldn't consider using the microservice style.

Rapid provisioning: you should be able to fire up a new server in a matter of hours.…

Blog post by Martin Fowler
28 August 2014

Original Link

Jenkins 的权限控制

CI 环境权限控制的几个目标:

  • 能够与域账号集成
  • 能够单独针对每个项目设定用户权限, 即不同的员工对不同的项目可以有不同的权限
  • 能够单独设置是否能看到源代码的权限
  • 能够单独设置浏览查看项目构建信息和编辑修改运行项目构建信息, 即分开只读和修改权限

1. 与域账号集成

Jenkins 支持多种用户管理策略, 其中包括 LDAP 集成, 如下图:

2. 项目级别的权限控制

Jenkins 支持针对单个项目进行不同的权限控制. 具体操作如下:

首先进入”Manage Jenkins” -> “Configure Global Security”, 点选”Project-based Matrix Authorization Strategy”, 如下图:

其次, 针对每个需要配置的项目, 进入其对应的 Job 配置页面, 勾选”Enable project-based security”, 如下图:

然后就可以挑选能访问该项目的用户, 并配置权限, 如上图中的 rcp 和 anonymous 用户.

3. 单独设置是否能看到源代码的权限

在 Jenkins 中, 源代码及其所在目录, 被称之为Workspace, 其权限可单独配置, 如下图:

4. 分别设置只读和修改权限

Jenkins 提供了细粒度的权限控制, 其分类如上面两图所示. 可以分别为不同用户指定不同权限.

Blog post by Guanglei Li
28 August 2014

Original Link

Android Instructions Overlay - Showing a Screen Pointing To Hidden Navigation Features on First Launch

The demo code for this can be found @anagri/AndroidInstructionsOverlay.

With the advent of mobile apps, the standard patterns of UX are rapidly evolving. Each major release of Android or iOS brings with it some new and innovative UI features that is now the preferred way of interaction discarding the old one. Earlier, there were hardware buttons which are now replaced with onscreen buttons, menus are now replaced by the rich features of ActionBar and gestures open up a plethora of novel UX patterns everyday.

With so many UX patterns, it is very hard to convey to users on the…

Blog post by Amiruddin Nagri
27 August 2014

Original Link

Systems Thinking example: boarding a plane

I have seen this pattern many times and decided to write about it.

I am about to board a flight. I am comfortable sitting at the gate, and then the boarding is announced.

plane-boarding

Two crew ground people start looking at IDs and collecting the flight ticket. The line at the gate moves reasonably fast.

plane-boarding2

Now, all passengers are standing at the corridor that connects the gate to the plane.  This line moves really slow as everyone is entering the plane, placing their bags on the overall compartment, and then sitting at their assigned sits.

Systems thinking

A local improvement does not…

Blog post by Paulo Caroli - Blog
27 August 2014

Original Link

Retreaded: CourtesyImplementation

Retread of post orginally made on 12 Aug 2004

When you a write a class, you mostly strive to ensure that the features of that class make sense for that class. But there are occasions when it makes sense to add a feature to allow a class to conform to a richer interface that it naturally should.

The most common and obvious example of this is one that comes up when you use the composite pattern. Let's consider a simple example of containers. You have boxes which can contain other boxes and elephants (that's an advantage of virtual elephants.) You…

Blog post by Martin Fowler
27 August 2014

Original Link

Looping ViewPager - Small hack to make ViewPager loop through screens

For my Android app, I am using ViewPager to get a cool animation navigating by swiping cards left and right. The supporting Android class FragmentStatePagerAdapter does all the heavy lifting but also restricts few features.

For example, I was looking for a looping ViewPager, where on first swiping back from first page takes you to last page, as well on swiping forward on last page takes you back again to the first page and this loop continues.

I checked on stackoverflow for any clean solutions, but I was not satisfied with the hacks detailed over there. I did some brainstorming…

Blog post by Amiruddin Nagri
26 August 2014

Original Link

#hyperlapse first one…



#hyperlapse first one…

Blog post by Chad Wathington
26 August 2014

Original Link

Bliki: MaturityModel

A maturity model is a tool that helps people assess the current effectiveness of a person or group and supports figuring out what capabilities they need to acquire next in order to improve their performance. In many circles maturity models have gained a bad reputation, but although they can easily be misused, in proper hands they can be helpful.

Maturity models are structured as a series of levels of effectiveness. It's assumed that anyone in the field will pass through the levels in sequence as they become more capable.

So a whimsical example might be that of mixology (a fancy…

Blog post by Martin Fowler
26 August 2014

Original Link