Victor Palau's Blog: Going Agile: A few iterations under the belt
I wrote recently about the Ubuntu Hardware Certification team transition to Scrum.* We have since completed a few iterations, which means that the Planning and Demo sessions are in full swing. I am also happy to say that we now have a full-time Scrum Master in the team.
Today, I am very pleased to announce that the Moderator of the Year Award, 2019 has two very deserving winners.
Ravinder Singh (RavinderSingh13) and Victor Berridge (vbe)
Victor (vbe) has been a member of unix.com close to 15 years (first joined the site in 2005) and has been moderating... (5 Replies)
Hello..
I have a input file as follows
123,sl
345,ab
345,cd
123,qw
123,lk
I want output file as follows.. --> print the no. of iterations at the end of each row.
123,sl 1
123.qw 2
123,lk 3
345,ab 1
345,cd 2
Thanks
Suresh (3 Replies)
I have a silly beginners question here:
I'm running a for loop within an awk command as follows, however the loop only runs once, instead of 2 through to 11 and then terminating. As the output to screen of x (line 6) shows x to equal 12, when it should be 1.
---------------------------
awk... (2 Replies)
dispatch_apply(3) BSD Library Functions Manual dispatch_apply(3)NAME
dispatch_apply -- schedule blocks for iterative execution
SYNOPSIS
#include <dispatch/dispatch.h>
void
dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t));
void
dispatch_apply_f(size_t iterations, dispatch_queue_t queue, void *context, void (*function)(void *, size_t));
DESCRIPTION
The dispatch_apply() function provides data-level concurrency through a "for (;;)" loop like primitive:
dispatch_queue_t the_queue = dispatch_get_concurrent_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT);
size_t iterations = 10;
// 'idx' is zero indexed, just like:
// for (idx = 0; idx < iterations; idx++)
dispatch_apply(iterations, the_queue, ^(size_t idx) {
printf("%zu
", idx);
});
Like a "for (;;)" loop, the dispatch_apply() function is synchronous. If asynchronous behavior is desired, please wrap the call to
dispatch_apply() with a call to dispatch_async() against another queue.
Sometimes, when the block passed to dispatch_apply() is simple, the use of striding can tune performance. Calculating the optimal stride is
best left to experimentation. Start with a stride of one and work upwards until the desired performance is achieved (perhaps using a power
of two search):
#define STRIDE 3
dispatch_apply(count / STRIDE, queue, ^(size_t idx) {
size_t j = idx * STRIDE;
size_t j_stop = j + STRIDE;
do {
printf("%zu
", j++);
} while (j < j_stop);
});
size_t i;
for (i = count - (count % STRIDE); i < count; i++) {
printf("%zu
", i);
}
FUNDAMENTALS
Conceptually, dispatch_apply() is a convenient wrapper around dispatch_async() and a semaphore to wait for completion. In practice, the dis-
patch library optimizes this function.
The dispatch_apply() function is a wrapper around dispatch_apply_f().
SEE ALSO dispatch(3), dispatch_async(3), dispatch_queue_create(3), dispatch_semaphore_create(3)Darwin May 1, 2009 Darwin