-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.xml
352 lines (311 loc) · 22.4 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Do you see the whole picture?</title>
<atom:link href="http://developerof.com/feed.xml" rel="self" type="application/rss+xml"></atom:link>
<link>http://developerof.com</link>
<description>Software Development Blog - developerof.com</description>
<pubDate>Sat, 30 Mar 2013 12:52:00 +0100</pubDate>
<generator>The mighty Wintersmith</generator>
<language>en</language>
<item>
<title>Blogging with Wintersmith</title>
<link>http://developerof.com/articles/blogging-with-wintersmith/</link>
<pubDate>Sat, 30 Mar 2013 12:52:00 +0100</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/blogging-with-wintersmith/</guid>
<author></author>
<description><p>I've decided to start a blog with <a href="http://pages.github.com">Github pages</a> and <a href="http://octopress.org">Octopress</a> last year. Now, I switch from Octopress to <a href="http://jnordberg.github.com/wintersmith/">Wintersmith</a>. Wintersmith is a <a href="http://nodejs.org/">NodeJS</a> based static site generator. It is simple and fast.
</p>
<h1>Why did I change blog engine?</h1>
<ul>
<li>Ruby: just Octopress used Ruby on my machine. I'm a programmer and I written codes in Java and JavaScript, I've never used Ruby for other purpose.</li>
<li>Simplicity and Fast (Lean): Wintersmith is faster than Octopress generator and it has a simpler directory structure.</li>
<li>NodeJS: I like NodeJS, and I can change Wintersmith code as I want it.</li>
</ul>
<p>Before I start with Wintersmith, I need to design blog site. I try to 'copy' Octopress theme, and decided that the blog should works on mobile devices too. There is some refactoring to do on design, but it works! I will publish it on github.</p>
</description>
</item>
<item>
<title>Install Redmine 2.1.0 on Ubuntu Server 12.04 64bit</title>
<link>http://developerof.com/articles/install-redmine/</link>
<pubDate>Sun, 23 Sep 2012 16:30:00 +0200</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/install-redmine/</guid>
<author></author>
<description><p>We have been using Redmine for issue tracking and wiki since 2010. Thanks to wiki, everyone is able to access and share information. Major topics are:
</p>
<ul>
<li>How to create a new developer environment?</li>
<li>Rules and conventions: continuous delivery, version number syntax, CI job configuration, coding style, creating specification, etc.</li>
<li>SCM description: how to perform a build and deployment.</li>
<li>Runtime environments' data (test, CI, production, DVCS).</li>
</ul>
<p>We don't share constant information over email. If this information isn't in our wiki, then
</p>
<blockquote>
<p>We write it into the wiki, and share wiki page.
</p>
</blockquote>
<p><strong>Wiki helps you to eliminate waste!</strong> Let's see the installation process!
<!--more-->
</p>
<pre><code>sudo su -</code></pre>
<h3>Install LAMP server</h3>
<pre><code>tasksel install lamp-server</code></pre>
<p>Set mysql root password, you need it later! [<em>ref. MYSQL_ROOT_PASSWORD</em>]
</p>
<h3>Install infrastructure</h3>
<pre><code>apt-get install ruby-full libmysqlclient-dev libmagickwand-dev libapache2-mod-passenger</code></pre>
<p>Note: After this operation, 306 MB of additional disk space will be used.
</p>
<h3>Install Redmine 2.1.0</h3>
<pre><code><span class="comment"># Create redmine database</span>
<span class="comment"># You need MYSQL_ROOT_PASSWORD!</span>
mysql -u root -p
create database redmine character set utf8;
create user <span class="string">'redmine'</span>@<span class="string">'localhost'</span> identified by <span class="string">'REDMINEDB_PASSWORD'</span>;
grant all privileges on redmine.* to <span class="string">'redmine'</span>@<span class="string">'localhost'</span>;
<span class="keyword">exit</span></code></pre>
<p>You need <em>REDMINEDB_PASSWORD</em> later!
</p>
<pre><code><span class="comment"># Download redmine</span>
wget http:<span class="comment">//rubyforge.org/frs/download.php/76448/redmine-2.1.0.tar.gz</span>
tar xzvf redmine-<span class="number">2.1</span>.<span class="number">0</span>.tar.gz
mv redmine-<span class="number">2.1</span>.<span class="number">0</span> redmine
mv redmine /<span class="keyword">var</span>/www/redmine</code></pre>
<h3>Configure Redmine 2.1.0</h3>
<pre><code>cd /<span class="keyword">var</span>/www/redmine
cp config/database.yml.example config/database.yml
<span class="comment"># Settings Redmine Edit database.yml</span>
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: REDMINEDB_PASSWORD
<span class="comment"># Install Rake</span>
apt-get install rake
apt-get install ruby-bundler</code></pre>
<p>The next step will take a while (about 2 minutes):
</p>
<pre><code>cd config
bundle install --without development test postgresql sqlite</code></pre>
<p>You must get <em>"Your bundle is complete! Use <code>bundle show [gemname]</code> to see where a bundled gem is installed."</em>
</p>
<pre><code>rake generate_secret_token
<span class="comment"># Initialize Redmine</span>
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data</code></pre>
<h3>Settings Apache</h3>
<pre><code><span class="comment"># /etc/apache2/mods-available/passenger.conf</span>
PassengerDefaultUser www-database
<span class="comment">#Edit /etc/apache2/sites-available/default</span>
<span class="comment"># Overwrite Document root</span>
DocumentRoot /<span class="keyword">var</span>/www/redmine/<span class="keyword">public</span>
<span class="comment"># Add Directory element</span>
<Directory /<span class="keyword">var</span>/www/redmine>
RailsBaseURI /redmine
</Directory>
<span class="comment"># Set permissions and restart apache2</span>
a2enmod passenger
cd /<span class="keyword">var</span>/www
mkdir redmine/<span class="keyword">public</span>/plugin_assets
chown -R www-data:www-data redmine/
chmod -R <span class="number">755</span> redmine/
chmod -R <span class="number">777</span> redmine/<span class="keyword">public</span>/plugin_assets
chmod -R <span class="number">777</span> redmine/files
service apache2 restart</code></pre>
<p>After all you get an ugly message: <em>apache2: "Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName"</em>
</p>
<pre><code><span class="comment"># Set server's FQ name, edit /etc/apache2/httpd.conf</span>
<span class="comment"># Change 'localhost' to real server name</span>
ServerName YOUR_REAL_SERVER_NAME
<span class="comment"># restart apache</span>
service apache2 restart</code></pre>
<p>Navigate browser to redmine server address, and redmine login page will be shown.
</p>
<blockquote>
<p>Change default admin/admin user's password!!!
</p>
</blockquote>
<p><strong>Do not forget</strong> to set Redmine host name after login: click <em>Setting,</em> choose <em>General Tab</em> and set <em>Host name and path</em> to YOUR_REAL_SERVER_NAME
</p>
<h2>Conclusion</h2>
<p><img src="http://developerof.com/articles/install-redmine/redmine1.png" alt="Redmine">
All company must have a central knowledge base that easily access by team members. Use Redmine wiki to share <strong>same information</strong> to everyone and everywhere! <strong>Wiki helps you to eliminate waste!</strong>
</p>
</description>
</item>
<item>
<title>The Road To Continuous Delivery</title>
<link>http://developerof.com/articles/continuous-delivery/</link>
<pubDate>Sat, 08 Sep 2012 18:35:00 +0200</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/continuous-delivery/</guid>
<author></author>
<description><p>I've been working at my company since 1997. I've created with my team more than 36 Java web application and 29 Oracle database.
When we started at 1997, we had just an email server, a version control (CVS) server and a bug reporting system.
We didn't write unit test just Java main methods, and we didn't hear about integration test.
Few years later we have started writing unit tests, and more few years later integration tests.
<img src="http://developerof.com/articles/continuous-delivery/cucumber-report.png" alt="Cucumber report">
Today, we have been using several continuous integration and delivery tools: Redmine, Maven, Jenkins, DVCS, Selenium/WebDriver, JUnit, Cucumber.
To be able to achieve continuous delivery, it has to start with continuous integration.
Of course, we are developing our process: we have some weakness and we can find new challenges. Before you start a continuous delivery process, your company must be mature. It's all about efficiency.
</p>
<blockquote>
<p>Continuous delivery is able to raise your efficiency.
</p>
</blockquote>
<p>Before you start Continuous Delivery or Continuous Integration, check this list:
<!--more-->
</p>
<h3>Software Configuration Management</h3>
<ol>
<li>Creating a new developer environment takes about 30 minutes.</li>
<li>Version number syntax is carved in stone (snapshots and releases).</li>
<li>You can create 'one step build'.</li>
<li>Your build repeatable.</li>
<li>You have runtime environment names.</li>
<li>Code is able to running on developer machine.</li>
<li>You have a Wiki, and a page with description of SCM.</li>
<li>Lead Developer is a 'software configuration master' (master and no manager).</li>
<li>You've a bug, task, feature database.</li>
</ol>
<h3>Developer activities</h3>
<ol>
<li>Developer fixes bugs before writing new code.</li>
<li>Developer always writes a unit test to reproduce a bug before start a bug fixing.</li>
<li>Developer can prove the issues have been fixed (unit test, integration test).</li>
<li>Developer can reproduce a bug on the developer machine, or at least not in the production environment.</li>
<li>Developer knows what the project goal is.</li>
<li>Developer knows what she/he is working on today and tomorrow.</li>
<li>Developers have guidelines: coding style, specification, etc.</li>
</ol>
<h3>Team</h3>
<ol>
<li>You must have a TEAM. Not programmers, not testers, not designers, not managers.</li>
<li>Team size between 3-8 people.</li>
<li>Team is older than 3 months.</li>
<li>Team is self organized.</li>
<li>Team visualizes up-to-date their own work, schedules and impediments.</li>
<li>Team's able to carry out specifications, codes, automatic tests and releases.</li>
<li>Team has been continuously developing their own process.</li>
<li>Team is independent of other teams (or individuals).</li>
<li>One team - one mission. One mission - one team.</li>
</ol>
<h3>Plan</h3>
<ol>
<li>Product has a feature list (product backlog).</li>
<li>You have a roadmap.</li>
<li>You are able to do less.</li>
<li>Product has validated before it's releasing to production.</li>
<li>All plans have been visualized for teams (Kanban, Scrum).</li>
</ol>
<h2>Conclusion</h2>
<p><img src="http://developerof.com/articles/continuous-delivery/jenkins.png" alt="Jenkins">
To achieve continuous delivery: it's not a revolution, it's an evolution. You need a matured company, so
in first stage: check the list, and try to achieve goals, and do not forget: to be able to achieve continuous delivery, it has to start with continuous integration.
</p>
</description>
</item>
<item>
<title>Lean Tools of Continuous Delivery</title>
<link>http://developerof.com/articles/lean-tools/</link>
<pubDate>Sun, 02 Sep 2012 11:02:00 +0200</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/lean-tools/</guid>
<author></author>
<description><p>In the past, I have seen a development team who optimized a part of the development process. They focused on write of Java code and automated some code generation. Of course, they have been failed in delivery software. Today we have <a href="http://www.poppendieck.com/">Lean Software Development</a>, so we know what it means <strong>Optimize the Whole</strong> and <strong>Focus on the Entire Value Stream</strong>.
</p>
<p>We have been using several tools and methods at <a href="http://www.jurahungaria.com">my software development team</a> and we focus on the entire value stream. <em>Lean mentality requires lean tools and conscious choice!</em>
<!--more-->
</p>
<h2>Discussions and planning</h2>
<p>Tools: <em>Scrum, Whiteboard, Sketchbook, UML notation, Wiki, Email, Chat</em>
</p>
<p><img src="http://developerof.com/articles/lean-tools/sketchbook.jpg" alt="Use sketchbook">
We've been collecting continuously all requirements, because they are constantly changing. Your best friends are sketchbook and whiteboard. I'm drawing diagrams, screens, data blocks with connections, etc. I’ve always been a big fan of visualization. After all, I've publishing results: wiki, email, product backlog, etc. <em>Do not forget to eliminate waste!</em> Throws out heavyweight and unnecessary tools.
</p>
<h2>Continuous delivery</h2>
<p>Tools: <em>NetBeans, DVCS, Apache Maven, JUnit, Spring, Automated Integration Test, Automated Acceptance Test, User Acceptance Test, WebDriver, Cucumber, jMeter, Code review, Logging, Redmine</em>
</p>
<p>Please, do not optimize just one part of development process! Optimize the whole process from start to finish! <a href="http://en.wikipedia.org/wiki/Continuous_delivery">Continuous delivery</a> helps your team to deliver fast and maintain a good quality.
<img src="http://developerof.com/articles/lean-tools/team-discussion.jpg" alt="Discussions">
How we do it: we start with Sprint planning and determine the most important tasks. <strong>Do not waste your time and money!</strong> Determine the most important tasks! If necessary, programmer and product owner create more detailed specification. <strong>Do not create unnecessary documentation!</strong> The created specification often just one page! We have been using sketchbook, whiteboard and UML drawing program. After all, we publish it.
</p>
<blockquote>
<p>We know, why we have been using a particular tool, this is a <strong>conscious choice</strong>.
</p>
</blockquote>
<p>Some examples:
</p>
<ol>
<li>We do not use Eclipse editor, because NetBeans is simpler. We can start Maven project with it faster and cleaner. Tool version update is bug free. Code does not depend on it.</li>
<li>We do not use Ant, but Maven. Maven has dependecy managment, life cycle, and is capable to release software from CLI.</li>
<li>We use DVCS: Mercurial and Git. We can commit offline, and merge branch between developer. It is tracking changesets, not files.</li>
<li>We have been writing unit test. This is a standard solution for testing our daily work: all unit test runs from NetBeans after every code compile, so we are always testing all changes!</li>
<li>We use Spring Framework, because "Write Once - Run Anywhere" is working. Spring upgrade on any project are seamless. It doesn't accumulate technical debt. It is free and costless!</li>
</ol>
<p><img src="http://developerof.com/articles/lean-tools/cucumber.jpg" alt="Cucumber feature file"> Jenkins CI server start testing <em>Integration Tests</em> and <em>Automated Acceptance Test</em> after code have been commited to DVCS. <a href="http://cukes.info/">Cucumber</a> is the best tool for AAT (Automated Acceptance Test). I've tested several other BDD tools (Spock, jBehave, etc.) before we start using Cucumber. Cucumber feature text is written in a business-readable domain-specific language and serves as documentation, automated tests and development-aid - all rolled into one format! Read more: <a href="http://pragprog.com/book/hwcuc/the-cucumber-book">The Cucumber Book: Behaviour-Driven Development for Testers and Developers</a> - sample codes has been written in ruby, but useful to Java developers too.
</p>
<blockquote>
<p>Do not waste your time to try testing all feature with AAT!
</p>
</blockquote>
<p>Most important features has been tested with AAT, but not all. We do manual test before we release a new version (UAT), focused on new features (product backlog items). At the end of the Sprint, we show features at Sprint Review Meeting.
</p>
<h2>Conclusion</h2>
<p>Choose your tools for <em>Continuous Delivery</em> and do not forget: <strong>Optimize the Whole</strong> and <strong>Focus on the Entire Value Stream</strong>
</p>
</description>
</item>
<item>
<title>When the customer is the biggest risk</title>
<link>http://developerof.com/articles/customer-risk/</link>
<pubDate>Sat, 01 Sep 2012 15:06:00 +0200</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/customer-risk/</guid>
<author></author>
<description><p>When I start a development project with my team, I get at least two constraints: deadline and fixed budget. In my experience, deadline is near and budget is low.
</p>
<blockquote>
<p>So, there is no time to waste!
</p>
</blockquote>
<p>Using <a href="http://www.poppendieck.com">lean</a> approach is the best way to the success. What does it mean to be lean? Check out <a href="http://prezi.com/cihxni4tajvj/lean-software-development/">my lean presentation</a>
</p>
<p>Sometimes I get more constraints from my customer, e.g: unfamiliar technology, customer's own framework, developing with non-teammate, obsolate code, etc. This looks like innocent, but it is a real threat to deadline and budget. I call them to <em>known constraints</em>.
<!-- more -->
In addition, sometimes there are <em>latent constraints</em> on customer side:
</p>
<ul>
<li>low workplace culture</li>
<li>client is not committed</li>
<li>no customer experiences in software development</li>
<li>unreal budget</li>
</ul>
<p>These <em>latent constraints</em> are very important! My experience that, any of these will lead to failure. In that case, <em>the customer is the biggest risk</em>.
</p>
<h2>Conclusion</h2>
<p>Before you contract to a project consider the following viewpoints:
</p>
<ol>
<li>Project has a reasonable deadline.</li>
<li>The <em>known constraints</em> are acceptable and you can meet these demands.</li>
<li>There isn't any <em>latent constraint</em>.</li>
</ol>
<p>If you can say yes to all viewpoints, then start the project.
</p>
</description>
</item>
<item>
<title>Blogging with Octopress and Github pages</title>
<link>http://developerof.com/articles/octopress/</link>
<pubDate>Fri, 31 Aug 2012 18:52:00 +0200</pubDate>
<guid isPermaLink="true">http://developerof.com/articles/octopress/</guid>
<author></author>
<description><p>I've decided to start a blog with <a href="http://pages.github.com">Github pages</a> and <a href="http://octopress.org">Octopress</a> The starting was seamless, except I've created github project with wrong name. If you get an "ERROR" when you deploy, then check the github project name.
</p>
<p>The correct name contains github.com!
<img src="http://developerof.com/articles/octopress/github-error.png" alt="rake deploy error">
</p>
</description>
</item>
</channel>
</rss>