From MichaelRWolf at att.net Tue Apr 1 23:57:04 2008 From: MichaelRWolf at att.net (Michael R. Wolf) Date: Tue, 1 Apr 2008 23:57:04 -0700 Subject: SPUG: Did I take your power cords at the January meeting? Message-ID: <005601c8948e$c5f3b850$650010ac@mlaptop> I've got two that aren't mine. -- Michael R. Wolf All mammals learn by playing! MichaelRWolf at att.net From andrew at sweger.net Thu Apr 3 12:17:55 2008 From: andrew at sweger.net (Andrew Sweger) Date: Thu, 3 Apr 2008 12:17:55 -0700 (PDT) Subject: SPUG: OSCON "Locals Only" Discount Message-ID: OSCON season is arriving soon. O'Reilly Open Source Convention Oregon Convention Center 777 NE Martin Luther King, Jr. Blvd. Portland, Oregon 97232 July 21-25, 2008 The O'Reilly Open Source Convention (OSCON) [1] is returning to Portland, Oregon. Early registration ends on June 2, 2008. Register now and save up to $250. Additionally, O'Reilly is offering a special discount to local User Group members in Oregon and Washington. With this "locals only" discount, members get 20% off the registration price for OSCON. Simply use the code "os08pdxug" when you register[2]. The "locals only" discount is applied after the early registration discount (if applicable). There are also discounts for academic staff (25%), non-profit employees (40%), instructor (50%), and full-time students (65%). Only one discount may be used (not including the early registration discount). See the registration site for details. Andy Lester reported on Perl Buzz[3] that there will be six more Perl sessions than last year for a total of fifteen sessions (plus five tutorials). [1] - http://conferences.oreilly.com/oscon/ [2] - https://en.oreilly.com/oscon2008/public/register [3] - http://perlbuzz.com/2008/04/perl-is-back-at-oscon-2008.html P.S. - I think I got the summary right. But please check the details at the respective sites (and please let me know if I got something wrong). From zstephenblum at hotmail.com Mon Apr 7 20:30:35 2008 From: zstephenblum at hotmail.com (Stephen Blum) Date: Mon, 7 Apr 2008 20:30:35 -0700 Subject: SPUG: Turning off auto-quoting during DBI Binding. In-Reply-To: References: Message-ID: Hey SPUG Team, How does one turn off the annoying and sometimes unneeded auto-quoting that occurs during DBI Bindings? I have searched the net for a while now and have found little on the subject. example: $sql = q(thrrr_id in (?)); $sth = $dbh->prepare($sql); $sth->execute( q(1,2,3,4,5) ); DBI executes this: thrrr_id in ('1,2,3,4,5') But I want to execute this: thrrr_id in (1,2,3,4,5) DBI adds quotes and I don't want them. If there is no way around this I can forgo the performance/convenience of bindings. Thank you SPUG Team! Stephen -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/spug-list/attachments/20080407/7481690e/attachment.html From cmeyer at helvella.org Mon Apr 7 20:37:58 2008 From: cmeyer at helvella.org (Colin Meyer) Date: Mon, 7 Apr 2008 20:37:58 -0700 Subject: SPUG: Turning off auto-quoting during DBI Binding. In-Reply-To: References: Message-ID: <20080408033758.GP7532@infula.helvella.org> Hi Stephen, DBI "?" placeholders may only represent single, scalar values. With most DBD drivers, the substitution of values for ? placeholders is not a simple string interpolation. Have a look at 'perldoc DBI' and search for "Placeholders and Bind Values". Also, placeholders can only represent single scalar values. For example, the following statement won?t work as expected for more than one value: "SELECT name, age FROM people WHERE name IN (?)" # wrong "SELECT name, age FROM people WHERE name IN (?,?)" # two names -Colin. On Mon, Apr 07, 2008 at 08:30:35PM -0700, Stephen Blum wrote: > Hey SPUG Team, > > How does one turn off the annoying and sometimes unneeded auto-quoting that occurs during DBI Bindings? I have searched the net for a while now and have found little on the subject. > > example: > > $sql = q(thrrr_id in (?)); > $sth = $dbh->prepare($sql); > $sth->execute( q(1,2,3,4,5) ); > > DBI executes this: thrrr_id in ('1,2,3,4,5') > But I want to execute this: thrrr_id in (1,2,3,4,5) > > DBI adds quotes and I don't want them. If there is no way around this I can forgo the performance/convenience of bindings. > > > Thank you SPUG Team! > > Stephen > _____________________________________________________________ > Seattle Perl Users Group Mailing List > POST TO: spug-list at pm.org > SUBSCRIPTION: http://mail.pm.org/mailman/listinfo/spug-list > MEETINGS: 3rd Tuesdays > WEB PAGE: http://seattleperl.org/ From rjk-spug at tamias.net Tue Apr 8 07:24:46 2008 From: rjk-spug at tamias.net (Ronald J Kimball) Date: Tue, 8 Apr 2008 10:24:46 -0400 Subject: SPUG: Turning off auto-quoting during DBI Binding. In-Reply-To: References: Message-ID: <20080408142446.GA98735@penkwe.pair.com> On Mon, Apr 07, 2008 at 08:30:35PM -0700, Stephen Blum wrote: > Hey SPUG Team, > > How does one turn off the annoying and sometimes unneeded auto-quoting > that occurs during DBI Bindings? I have searched the net for a while now > and have found little on the subject. > example: > > $sql = q(thrrr_id in (?)); > $sth = $dbh->prepare($sql); > $sth->execute( q(1,2,3,4,5) ); > > DBI executes this: thrrr_id in ('1,2,3,4,5') > But I want to execute this: thrrr_id in (1,2,3,4,5) > > DBI adds quotes and I don't want them. If there is no way around this I > can forgo the performance/convenience of bindings. Here's one approach to binding a list of values to placeholders: $sql = "thrrr_id in (@{[ join ',', ('?') x @list ]})"; $sth = $dbh->prepare($sql); $sth->execute(@list); Ronald From sthoenna at efn.org Tue Apr 8 07:32:18 2008 From: sthoenna at efn.org (Yitzchak Scott-Thoennes) Date: Tue, 8 Apr 2008 07:32:18 -0700 (PDT) Subject: SPUG: Turning off auto-quoting during DBI Binding. Message-ID: <51282.71.35.169.249.1207665138.squirrel@webmail.efn.org> On Mon, Apr 07, 2008 at 08:30:35PM -0700, Stephen Blum wrote: > How does one turn off the annoying and sometimes unneeded auto-quoting that occurs during DBI Bindings? I have searched the net for a while now and have found little on the subject. > > example: > > $sql = q(thrrr_id in (?)); > $sth = $dbh->prepare($sql); > $sth->execute( q(1,2,3,4,5) ); > > DBI executes this: thrrr_id in ('1,2,3,4,5') > But I want to execute this: thrrr_id in (1,2,3,4,5) > > DBI adds quotes and I don't want them. If there is no way around this I can forgo the performance/convenience of bindings. There's no way around it. Either just interpolate into the query: $ids = "1,2,3,4,5"; $sql = qq(thrrr_id in ($ids)); $sth = $dbh->prepare($sql); $sth->execute(); or use an array and provide the appropriate number of ? instead: @ids = (1,2,3,4,5); $sql = 'thrrr_id in ('.join(',',('?') x @ids).')'; $sth = $dbh->prepare($sql); $sth->execute(@ids); From zstephenblum at hotmail.com Tue Apr 8 10:59:44 2008 From: zstephenblum at hotmail.com (Stephen Blum) Date: Tue, 8 Apr 2008 10:59:44 -0700 Subject: SPUG: Turning off auto-quoting during DBI Binding. In-Reply-To: <51282.71.35.169.249.1207665138.squirrel@webmail.efn.org> References: <51282.71.35.169.249.1207665138.squirrel@webmail.efn.org> Message-ID: Hey SPUG Team, Thank you for the quick responses and all the different ways a programmer can solve this type of problem. The manual substitution method has done the trick! Thank you again, Stephen > Date: Tue, 8 Apr 2008 07:32:18 -0700> Subject: Re: SPUG: Turning off auto-quoting during DBI Binding.> From: sthoenna at efn.org> To: zstephenblum at hotmail.com> CC: spug-list at pm.org> > On Mon, Apr 07, 2008 at 08:30:35PM -0700, Stephen Blum wrote:> > How does one turn off the annoying and sometimes unneeded auto-quoting> that occurs during DBI Bindings? I have searched the net for a while> now and have found little on the subject.> >> > example:> >> > $sql = q(thrrr_id in (?));> > $sth = $dbh->prepare($sql);> > $sth->execute( q(1,2,3,4,5) );> >> > DBI executes this: thrrr_id in ('1,2,3,4,5')> > But I want to execute this: thrrr_id in (1,2,3,4,5)> >> > DBI adds quotes and I don't want them. If there is no way around this I> can forgo the performance/convenience of bindings.> > There's no way around it. Either just interpolate into the query:> > $ids = "1,2,3,4,5";> $sql = qq(thrrr_id in ($ids));> $sth = $dbh->prepare($sql);> $sth->execute();> > or use an array and provide the appropriate number of ? instead:> > @ids = (1,2,3,4,5);> $sql = 'thrrr_id in ('.join(',',('?') x @ids).')';> $sth = $dbh->prepare($sql);> $sth->execute(@ids);> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/spug-list/attachments/20080408/2946e325/attachment.html From cmeyer at helvella.org Thu Apr 10 10:47:41 2008 From: cmeyer at helvella.org (Colin Meyer) Date: Thu, 10 Apr 2008 10:47:41 -0700 Subject: SPUG: Meeting Announcement -- 15 April 2008 Message-ID: <20080410174741.GQ28007@infula.helvella.org> April 2008 Seattle Perl Users Group (SPUG) Meeting ==================================================== Topic: Learning Perl - A Brief Study in How to Learn and Teach More Effectively Speaker: Gryphon Shafer Meeting Date: Tuesday, 15 April 2008 Meeting Time: 6:30 - 8:30 p.m. Location: Terrace Room at The Harbor Steps Cost: Admission is free and open to the public Info: http://seattleperl.org/ ==================================================== Tuesday, April 15th, is the next meeting of the THE SEATTLE PERL USERS GROUP. Learning Perl A Brief Study in How to Learn and Teach More Effectively It's easy to take for granted how we learned Perl and gloss over process of teaching it. Given Perl's continued popularity and the steady and strong demand for Perl talent, it's important to understand how to effectively learn and teach Perl. Using pseudo psychological concepts, slightly flawed neural network analogies, and graphics with pretty colors, Gryphon will conduct a brief study of learning and teaching Perl. The presentation will: * Highlight the typical stages of learning Perl (both as a first and subsequent language) * Discuss how new-to-Perl developers can become more proficient faster * Describe how Perl teachers can design more effective training * Uncover some flaws in existing teaching methods and texts There will be punch and pie. Gryphon Shafer is the owner and architect of Golden Guru, a custom software development shop, primarily working with Perl, mod_perl, and so forth, and manages a small team of Perl and web developers. He sporadically contributes fluff to SPUG, PerlMonks, and CPAN, and he has taught Perl on an off for a long time. ================ Thanks again to all the SPUG members that show up at meetings or participate on the list to make the group worthwhile in the first place, and all the JAPHs out there for just being. Meeting Location ================ The meeting space is provided by Bryan Lhuillier of shiftboard.com. Terrace Room at The Harbor Steps: - The Harbor Steps is located at 1st & University Ave in Seattle. - Parking available on the street or in Western Ave lots. - The Terrace Room is located on the 6th Floor of the S.W. Building. - Enter the SW Building directly at 1200 Western Ave or use the Main Entrance (SE Building) located on 1st Avenue (next to Ipanema Grill) across from SAM. - We will post signs and/or people at both entrances, and you can also ask the concierge (or anybody else) for spot directions to the Terrace Room. - If you get lost, you can call Bryan's mobile phone - 206 427 6436 See you there! From m3047 at inwa.net Thu Apr 10 11:29:28 2008 From: m3047 at inwa.net (Fred Morris) Date: Thu, 10 Apr 2008 11:29:28 -0700 Subject: SPUG: Tag Clouds In-Reply-To: <20080410174741.GQ28007@infula.helvella.org> References: <20080410174741.GQ28007@infula.helvella.org> Message-ID: <200804101129.28187.m3047@inwa.net> Politics, Activism and Community or something like that: http://devil.m3047.inwa.net/matcher/perl/tagged-uri-edit.cgi?domainid=2 All done with Perl, of course. domainid=1 is "My Stuff", whatever that means. Anybody want a tag cloud? ;-) -- Fred Morris http://www.inwa.net/~m3047/contact.html From andrew at sweger.net Sun Apr 13 15:13:16 2008 From: andrew at sweger.net (Andrew Sweger) Date: Sun, 13 Apr 2008 15:13:16 -0700 (PDT) Subject: SPUG: Free books at Tuesday meeting Message-ID: My friend, Jennifer, cleared out some older items from her library and gave me the following titles to give away at Tuesday's meeting. Although many of these may be older editions, the information is still applicable and could be perfect for someone getting started. As near as I can tell, none of these are signed copies. Perl related: ------------- Perl Cookbook, 1st Ed. http://amazon.com/dp/1565922433 Programming Perl, 2nd Ed. http://amazon.com/dp/1565921496 Perl in a Nutshell, 1st Ed. http://amazon.com/dp/1565922867 Learning Perl, 2nd Ed. http://amazon.com/dp/1565922840 Perl Conference 4.0 (aka OSCON 2000) materials ---------------------------------------------- (Ah, Monterey, California. Such sweet memories.) Practical Parsing with Parse::RecDescent, Damian Conway Advanced Parsing wiht Parse::RecDescent, Damian Conway Advanced Object-Oriented Perl, Damian Conway Regular Expressions, Mark-Jason Dominus Proceedings of the Perl Conference 4.0 http://amazon.com/dp/0596000138 Other stuff ----------- Learning the vi Editor, 6th Ed. http://amazon.com/dp/1565924266 Open Source Development with CVS http://amazon.com/dp/1576104907 Learning Java http://amazon.com/dp/1565927184 Thinking in Java, 2nd Ed. http://amazon.com/dp/0130273635 Teach Yourself C in 24 Hours http://amazon.com/dp/0672310686 HTML 4 for the World Wide Web http://amazon.com/dp/0201696967 -- Andrew B. Sweger -- The great thing about multitasking is that several things can go wrong at once. From andrew at sweger.net Sun Apr 13 16:31:15 2008 From: andrew at sweger.net (Andrew Sweger) Date: Sun, 13 Apr 2008 16:31:15 -0700 (PDT) Subject: SPUG: Free books at Tuesday meeting In-Reply-To: Message-ID: Thank you for your interest in these books. To clarify, these books will be available at the SPUG meeting this Tuesday evening (see Colin's earlier announcement[1] for details). I am not taking reservations for these items. Please show up at the meeting if you're interested. The books will be available for selection after the meeting starts. No fighting. [1] - http://mail.pm.org/pipermail/spug-list/2008-April/008135.html On Sun, 13 Apr 2008, Andrew Sweger wrote: > My friend, Jennifer, cleared out some older items from her library and > gave me the following titles to give away at Tuesday's meeting. Although > many of these may be older editions, the information is still applicable > and could be perfect for someone getting started. As near as I can tell, > none of these are signed copies. -- Andrew B. Sweger -- The great thing about multitasking is that several things can go wrong at once. From gryphon.shafer at gmail.com Tue Apr 15 09:41:03 2008 From: gryphon.shafer at gmail.com (Gryphon Shafer) Date: Tue, 15 Apr 2008 09:41:03 -0700 Subject: SPUG: Pre-SPUG Dinner/Beer Location/Time Message-ID: <45b837a10804150941o5bf608f5wf265df44089385c2@mail.gmail.com> Greetings all, The pre-SPUG dinner and/or beer location is the Pike's Place Bar and Grill. 90 Pike St, Seattle, WA 98101 www.pikeplacebarandgrill.com The prevailing opinion so far is that folks will start congregating around 5pm. (And it's a nice, downhill walk from there to the meeting location.) Gryphon From jobs-noreply at seattleperl.org Wed Apr 16 11:24:19 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Wed, 16 Apr 2008 11:24:19 -0700 (PDT) Subject: SPUG: JOB: Sr Scientific Programmer, Bioinformatics, Seattle Message-ID: Job Description: We are seeking a senior scientific programmer/analysis to join the Informatics team. This position involves the strategic development of NanoString's bioinformatics design platform. Critical activities will include the development of software tools, extending the relation database used to store designs and bioinformatics data, mining of this database for trends, and providing rich graphical web user interfaces. The successful candidate will also directly contribute to NanoString's gene targeting process by working directly with other group members, scientists and customers during each new design. NanoString Technologies has developed a patent-pending nanotechnology-based platform for single-molecule identification and digital quantification. The NanoString system uniquely barcodes individual target molecules, scans them and delivers an inventory of target molecules in the biological sample. This cutting-edge technology is a broad-based platform with a wide variety of potential applications, including gene expression analysis, genotyping, proteomics and clinical diagnostics. Requirements: * B.S. in computer science, biology, chemistry or related field * Minimum of 5 years professional software programming experience * Strong software engineering skills covering the full software lifecycle * Experience with Perl, C/C++/C#, SQL and database development in MySQL or Postgres * Prior experience in building web-based interfaces * A working knowledge of standard concepts in bioinformatics Additional attractive qualities include: * Familiarity with sequence alignment algorithms and biology databases * Experience in software requirements gathering * Knowledgeable in software architecture and design * Software configuration management and continuous integration experience * Use of automated testing (regression and unit tests) * Ability to assist in supporting internal and external users of the software Additional Notes * Permanent position / directly with the company * Includes competitive benefits package * This is a on-site position The ideal candidate will have strong problem-solving and analytical skills, with the ability to apply those skills to the analysis of complex data sets. The candidate will be able to work independently and in a team environment, communicate relevant data effectively in oral and written format, and work in a timely manner to meet defined deadlines. Qualified candidates should send their resume and a cover letter to jobs at nanostring.com and include "Senior Scientific Programmer" in the subject of the email. From jobs-noreply at seattleperl.org Wed Apr 16 12:31:20 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Wed, 16 Apr 2008 12:31:20 -0700 (PDT) Subject: SPUG: JOB: Amazon.com Anywhere Message-ID: Software Development Engineer - Amazon.com Anywhere Are you passionate about working on systems that have an immediate and visible impact on millions of customers in the fast growing mobile e-commerce industry? Does working on large-scale, distributed, highly available systems using the latest technology sound exciting? Amazon.com is looking for a passionate, hard-working, and talented software engineer to develop mobile e-commerce applications that not only leverage Amazon's existing e-commerce platform but extend it to take advantage of some of the unique characteristics of the mobile phone market. The candidate will work in Seattle, WA as part of a global Amazon Anywhere team. Responsibilities include: - Participate in the full product development cycle from definition to implementation - Own the delivery of an entire system or application and serve as the technical lead on small to medium sized projects - Develop new user applications and internal tools specific to mobile devices - Build support for next generation mobile technologies Qualifications: - Strong programming expertise in Perl - Bachelor's degree or higher in computer science with a minimum of 3 years of work experience - Experience with Linux and/or UNIX operating systems - Experience with developing applications for mobile devices is a plus - Excellent verbal and written communication skills DETAILS: - This is a full time opportunity - Compensation consist of salary/sign on bonus/relocation package/RSU - Direct Placement with Company HR - W-2 only - Must live or be willing to relocate to Seattle - No telecommuting available - http://www.amazon.com If you are interested in learning more. Please submit your resume to cserrato at amazon.com I look forward to hearing from you! crystal serrato | technical recruiter | amazon.com | 206.266.5887 work hard. have fun. make history. http://www.linkedin.com/in/amazonrecruiter From amitsett at gmail.com Wed Apr 16 15:16:42 2008 From: amitsett at gmail.com (Amit Sett) Date: Wed, 16 Apr 2008 15:16:42 -0700 Subject: SPUG: Suggestion Message-ID: <4d8419da0804161516i782e4303oa5e75f35f2a041ed@mail.gmail.com> I was thinking that it might be a good idea for attendees of monthly SPUG meetings to bring along some snacks/food with them. It might help encourage people to attend. I would also appreciate it if someone could reply with the link to the LinkedIn Perlmonks group. -Amit -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/spug-list/attachments/20080416/d6c7983f/attachment.html From andrew at sweger.net Wed Apr 16 15:23:34 2008 From: andrew at sweger.net (Andrew Sweger) Date: Wed, 16 Apr 2008 15:23:34 -0700 (PDT) Subject: SPUG: Suggestion In-Reply-To: <4d8419da0804161516i782e4303oa5e75f35f2a041ed@mail.gmail.com> Message-ID: On Wed, 16 Apr 2008, Amit Sett wrote: > I would also appreciate it if someone could reply with the link to the > LinkedIn Perlmonks group. This is the link for joining the Perl Mongers group on LinkedIn: http://www.linkedin.com/e/gis/40830/4971AC40763D I don't remember seeing one for Perlmonks. -- Andrew B. Sweger -- The great thing about multitasking is that several things can go wrong at once. From jobs-noreply at seattleperl.org Thu Apr 17 10:52:04 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Thu, 17 Apr 2008 10:52:04 -0700 (PDT) Subject: SPUG: JOB: Perl/CGI developer / 1-2 month contract in Bellevue Message-ID: Redmond Technology Partners (http://www.redtech.com/) is seeking to hire for a Perl/CGI Developer for a short term 1-2 month contract in Bellevue. Below is a brief explanation of the client need, if you're interested please send a resume to Jodi Lipon at jodil at redtech.com. If you're not looking at this time, referrals are always appreciated. Thank you for your time. Seeking to hire a Perl/GCI developer for a short term contract. Our client needs a resource to help merge some existing systems. They need to make some enhancements to an existing DB that runs with Perl, CGI, JavaScript with a MySQL. Must have the following skills: - HTML - Perl/CGI - MySQL - Some JavaScript - Linux (we are moving it from Solaris to SUSE - SLES 10) - Can work without a lot of supervision Candidate will be working on home brewed applications written with LAMP technologies. It's DB App with Simple UI that displays row and rack views of the Datacenter. Will need to: - add ability to views severs with DB - build upload function for new machines and locations - build relationships between boxes and clusters Jodi Lipon | Recruiting Manager jodil at redtech.com Redmond Technology Partners Microsoft Approved Vendor | Microsoft Gold Certified Partner 425-451-9855 | website: www.redtech.com From jobs-noreply at seattleperl.org Tue Apr 22 09:57:37 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Tue, 22 Apr 2008 09:57:37 -0700 (PDT) Subject: SPUG: JOB: Software Engineer with mod_perl expertise, Seattle Message-ID: Job Description Client is looking to expand its development team with the addition of a talented, motivated software engineer. Successful candidates must be able write sustainable and maintainable code quickly and accurately. You must have a passion for writing modular software systems capable of handling large loads and high-traffic patterns. You will be asked to contribute multiple innovative solutions to difficult problems. Candidates should have a thirst for knowledge and be willing to constantly push the boundaries of our coding methods, our coding styles, and our coding results. Responsibilities: - Write scalable, maintainable code, unit, functional, and acceptance tests - Create semi-fleshed out CSS and template files - Contribute to system design and architecture decisions - Assist in QA and firefighting efforts as necessary Qualifications: - Thorough understanding of object-oriented methodology - Thorough understanding of MVC architectures - Experience with coding database-backed web applications - Expert knowledge in either mod_perl or Ruby on Rails - Intermediate knowledge of a mod_perl templating language - Intermediate CSS and Javascript skills - Willingness to work in an Agile development environment - Ability to clearly and concisely communicate technical ideas Other information: - Permanent - Placement through Recruiter - W-2 - Seattle, WA - No Telecommuting - Company's product: confidential For immediate consideration, please email your resumes to ultimate.sourcer at gmail.com From jobs-noreply at seattleperl.org Tue Apr 22 12:44:02 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Tue, 22 Apr 2008 12:44:02 -0700 (PDT) Subject: SPUG: JOB: QA Engineer, Seattle, CarDomain Message-ID: QA Engineer Required skill-set: Are you an engineer looking to... - Shape the quality of a complex and demanding web application? - Apply new and innovative techniques to re-mold a traditional QA department? - Be involved in all phases of the product lifecycle from requirements to release and maintenance? - Work cross-functionally day-to-day with dynamic engineering and non-engineering teams? Does the following describe you? - An experienced quality assurance engineer or software developer who is always known by his teammates for his/her voracious dedication to producing a quality product? - Intrigued by how automated testing tools can help your team accomplish its tasks more efficiently? - Dissatisfied by traditional test cycles that elongate a release cycle? - Experience working with at least one scripting language? - Skilled in unit and integration testing of a multi-tiered web application? - Understand that all code (including test code!) needs to be scalable and maintainable? - Former managers describe you as an extremely productive contributor with a get-it-done attitude? If so, please submit your resume; we look forward to speaking with you! Contract or permanent position: - Permanent Availability of stock options or other incentive plans: - Pre-IPO Stock Options - 401k company matching plan - Monthly medical and dental premiums for all full-time permanent employees paid for by the company. - Free lunch every Friday Placement: - Directly - W-2 or 1099 (no restrictions) Location: - Seattle, WA Telecommuting possible? - No Company's product or service: CarDomain Network, Inc. is a privately held company in the social media space and is looking for full-time software engineers. We've been around since 1998 and have been developing social networking applications before MySpace, Facebook or Friendster. The development team takes their job of creating functional, maintainable, sustainable and releasable code very seriously and is involved in all aspects of application development in our time-to-market driven environment. Lara Zwerling | CarDomain Network Sr. HR Manager 1633 Westlake Avenue North, Suite 100, Seattle, WA 98109 lzwerling at cardomain.com | tel 206.926.2136 | fax 206.926.2299 http://members.cardomain.com/lovedonks From jobs-noreply at seattleperl.org Tue Apr 22 12:44:09 2008 From: jobs-noreply at seattleperl.org (SPUG Jobs) Date: Tue, 22 Apr 2008 12:44:09 -0700 (PDT) Subject: SPUG: JOB: Software Engineer, Seattle, CarDomain Message-ID: Software Engineer Required skill-set: - Significant experience working with large-scale MVC web applications with high-traffic demands - You're a good communicator that's most-comfortable when working on cross-functional teams - You're also bullish on code quality and maintainability, but able to balance that with the pragmatism necessary to release product in a timely fashion - Former managers describe you as an extremely productive contributor with a get-it-done attitude Contract or permanent position: - Permanent Availability of stock options or other incentive plans: - Pre-IPO Stock Options - 401k company matching plan - Monthly medical and dental premiums for all full-time permanent employees paid for by the company. - Free lunch every Friday Placement: - Directly or through recruiter - W-2 or 1099 (no restrictions) Location: - Seattle, WA Telecommuting possible? - No Company's product or service: CarDomain Network, Inc. is a privately held company in the social media space and is looking for full-time software engineers. We've been around since 1998 and have been developing social networking applications before MySpace, Facebook or Friendster. The development team takes their job of creating functional, maintainable, sustainable and releasable code very seriously and is involved in all aspects of application development in our time-to-market driven environment. Lara Zwerling | CarDomain Network Sr. HR Manager 1633 Westlake Avenue North, Suite 100, Seattle, WA 98109 lzwerling at cardomain.com | tel 206.926.2136 | fax 206.926.2299 http://members.cardomain.com/lovedonks From m3047 at inwa.net Mon Apr 28 14:47:28 2008 From: m3047 at inwa.net (Fred Morris) Date: Mon, 28 Apr 2008 14:47:28 -0700 Subject: SPUG: threading, atomicity and safeness In-Reply-To: <20080304170902.GJ1680@infula.helvella.org> References: <20080304170902.GJ1680@infula.helvella.org> Message-ID: <200804281447.28671.m3047@inwa.net> "Atomicity" refers to an operation which simply cannot and will not be interrupted. For instance a single machine instruction executing on a single CPU is generally considered atomic (although the VAX had certain machine instructions which *were* interruptible, and had certain others which had an "interlocked" form which asserted a halt against other CPUs on the bus IIRC). So no thread can possibly be interrupted in the middle of one of these operations. "Safeness" refers to something which happens up a level or two, when compilers optimize instructions out of memory and into registers... hence it is not safe for multiple threads to attempt to modify the "same" variable (because each has a different register copy)... and therefore compilers end up with "unsafe" pragmas and flags to keep certain variables from being optimized that way. This gets a little inside-out or at least the level of abstraction is more or less levelled out, but I find myself wondering some of these same things about Perl (and Python) and I don't find any discussion of these issues. Who cares? Well: * Atomicity means you can modify a value (on the VAX this was not just store, but increment and add... and a few other oddball things) without throwing a lock around it. Ok, maybe this "just isn't safe" if you've never taken a dive beneath the flotsam generated by compilers and so you just don't go there, but if you've ever written assembler maybe you've skipped a couple locking/semaphore library calls with complete impunity... besides, it's faster (that's a fact). * Safeness means that two threads are actually assured that they are in fact reading (or I suppose updating, but if reading isn't safe then who cares) the same value... or at least the same storage location (since they might not read it at the same time, and without locking the value could change). Assume I'm talking about a hash because it's been blessed into a class as an instance (and because I'm curious about the same questions regarding Python, and its instances are basically hashes). So then, given that I have two threads which are free-running, I pose these questions: * Is "$self->{foo} = $x;" atomic: that is, can I assume that if two threads start to update $self->{foo} at the "same" time (or one starts updating while the other starts reading), the one which actually goes first will finish first? * Is "$self->{foo}++;" atomic? Ok, I had to ask. ;-) If it was, then the next generalization would be to ask if a statement which did not invoke a function, method or system call could be considered atomic: "$self->{foo} += $x;", etc. * Is "$x = $self->{foo};" safe: in otherwords can I assume that if a thread starts reading $self->{foo}, then even if it's not atomic then assuming this breaks down into pseudocode something like "dereference $self; compute foo; use computed foo to dereference $self->{foo}; toss that into $x" can I presume that $x will at least get either the old or new value of $self->{foo}... and not some unspecified martian value because the intermediate got garbage-collected in mid-flight like some instantiation of Steven King's langoliers? So does anybody know the answers to these things, as a "true fact" (having examined the internals, or seen a spec sheet or design doc or discussion somewhere), for Perl? How about Python? I suppose the question posed inside-out would be what are the imposed preconditions for switching thread context in either of these languages? Why? Well suppose you have a bunch of threads, and one of them kind of follows the others around. Let us assume that one is always good about throwing locks before modifying values. If you're going to that much trouble you could also raise a flag saying "hey I've got something for ya" but it would be nice if you could at least look at that flag, with confidence, without having to throw a lock. So if you're doing that, the inquisitive (me) might as well ask "when do I have to throw a lock, really?". (If the answer was "there are no preconditions, 'trust no one'" that would be sad for DWIMMY languages, and might just prompt me to put yet another "one of these days" projects onto my long list of things to do with my free time... it would also become something on my checklist when considering technologies.) -- Fred Morris From MichaelRWolf at att.net Wed Apr 30 10:50:44 2008 From: MichaelRWolf at att.net (Michael R. Wolf) Date: Wed, 30 Apr 2008 10:50:44 -0700 Subject: SPUG: return value of assignment operator Message-ID: <002801c8aaea$b7d46b80$650010ac@mlaptop> C's assignment operator returns "the value assigned to the LHS". Perl's assignment operator "returns a valid lvalue". I knew both facts independently, but just recently held them in my head at the same time. It got me thinking "Why should Perl be different?". Here's what I've come up with. For statements like this, it wouldn't matter LHS or RHS: $x = $y = $z = 0; if (($line = <>) != "\n") {...} But returning an lvalue allows statements like these, where a copy can be taken and also changed in the same statement. ($x = $y = 0)++; $x = ($y = $z = 0)++; # Do you *really* know what's in $x and $y??? ($incremented_copy = $original_unchanged)++; ($changed_copy = $original_string) =~ s/\s//; Theoretically, I like the flexibility it gives. Practically, I'd advocate against excessive use (for some definition of 'excess' that I'm currently wrestling with). Open questions for discussion: * Where do you rely on assignment returning the LHS? * What definition of "excess" prevents you from using it further? * Which languages return lvalues, RHS, or are unspecified? lvalue: Perl RHS: C, C++, JavaScript Undefined: shell -- Michael R. Wolf All mammals learn by playing! MichaelRWolf at att.net From mail.spammagnet at gmail.com Wed Apr 30 12:13:15 2008 From: mail.spammagnet at gmail.com (BenRifkah Bergsten-Buret) Date: Wed, 30 Apr 2008 12:13:15 -0700 Subject: SPUG: return value of assignment operator In-Reply-To: <002801c8aaea$b7d46b80$650010ac@mlaptop> References: <002801c8aaea$b7d46b80$650010ac@mlaptop> Message-ID: On Wed, Apr 30, 2008 at 10:50 AM, Michael R. Wolf wrote: > Open questions for discussion: > * Where do you rely on assignment returning the LHS? > * What definition of "excess" prevents you from using it further? I haven't used this before but the only place I would consider it is in a context where low source code character count is preferred. The only such context I can think of is in one liners. Everywhere else I lean toward explicit behavior for readability. According to my setup* relying on the returned lvalue is less efficient: benb at enkidu:~$ cat performance_tuning/lhs.pl #!/usr/bin/perl use strict; use Benchmark qw(:all); my ($x, $y) = (0,1); cmpthese (9000000, { increment_lhs => sub { ($x = $y)++ }, increment_separately => sub { $x = $y; $x++ }, }); benb at enkidu:~$ perl performance_tuning/lhs.pl Rate increment_separately increment_lhs increment_separately 5555556/s -- -28% increment_lhs 7758621/s 40% -- Of course Benchmark was only able to give reliable calculations at 90 million iterations or more. -- Ben * perl -V Summary of my perl5 (revision 5 version 8 subversion 4) configuration: Platform: osname=linux, osvers=2.6.15.6, archname=i386-linux-thread-multi uname='linux ernie 2.6.15.6 #1 thu mar 16 13:11:55 est 2006 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.4 -Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include' ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-13)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, libperl=libperl.so.5.8.4 gnulibc_version='2.3.2' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' From MichaelRWolf at att.net Wed Apr 30 12:51:39 2008 From: MichaelRWolf at att.net (Michael R. Wolf) Date: Wed, 30 Apr 2008 12:51:39 -0700 Subject: SPUG: return value of assignment operator In-Reply-To: References: <002801c8aaea$b7d46b80$650010ac@mlaptop> Message-ID: <005b01c8aafb$a1f94400$650010ac@mlaptop> My results are closer than yours, but contrary to your interpretation, *both* yours and mine run more iterations per second for the one that relies on the lvalue. I'm running Perl cygwin on my XP laptop. Rate increment_separately increment_lhs increment_separately 4807692/s -- -8% increment_lhs 5253940/s 9% -- -- Michael R. Wolf All mammals learn by playing! MichaelRWolf at att.net > -----Original Message----- > From: benrifkah at gmail.com [mailto:benrifkah at gmail.com] On Behalf Of > BenRifkah Bergsten-Buret > Sent: Wednesday, April 30, 2008 12:13 PM > To: Michael R. Wolf > Cc: spug-list at pm.org > Subject: Re: SPUG: return value of assignment operator > > On Wed, Apr 30, 2008 at 10:50 AM, Michael R. Wolf > wrote: > > Open questions for discussion: > > * Where do you rely on assignment returning the LHS? > > * What definition of "excess" prevents you from using it further? > > I haven't used this before but the only place I would consider it is > in a context where low source code character count is preferred. The > only such context I can think of is in one liners. > > Everywhere else I lean toward explicit behavior for readability. > > According to my setup* relying on the returned lvalue is less efficient: > > benb at enkidu:~$ cat performance_tuning/lhs.pl > #!/usr/bin/perl > > use strict; > use Benchmark qw(:all); > > my ($x, $y) = (0,1); > > cmpthese (9000000, { > increment_lhs => sub { ($x = $y)++ }, > increment_separately => sub { $x = $y; $x++ }, > }); > > benb at enkidu:~$ perl performance_tuning/lhs.pl > Rate increment_separately increment_lhs > increment_separately 5555556/s -- -28% > increment_lhs 7758621/s 40% -- > > Of course Benchmark was only able to give reliable calculations at 90 > million iterations or more. > > -- Ben > > * perl -V > Summary of my perl5 (revision 5 version 8 subversion 4) configuration: > Platform: > osname=linux, osvers=2.6.15.6, archname=i386-linux-thread-multi > uname='linux ernie 2.6.15.6 #1 thu mar 16 13:11:55 est 2006 i686 > gnulinux ' > config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN > -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr > -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 > -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 > -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local > -Dsitelib=/usr/local/share/perl/5.8.4 > -Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1 > -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 > -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl > -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm > -Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des' > hint=recommended, useposix=true, d_sigaction=define > usethreads=define use5005threads=undef useithreads=define > usemultiplicity=define > useperlio=define d_sfio=undef uselargefiles=define usesocks=undef > use64bitint=undef use64bitall=undef uselongdouble=undef > usemymalloc=n, bincompat5005=undef > Compiler: > cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS > -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE > -D_FILE_OFFSET_BITS=64', > optimize='-O2', > cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN > -fno-strict-aliasing -I/usr/local/include' > ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-13)', gccosandvers='' > intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 > d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 > ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', > lseeksize=8 > alignbytes=4, prototype=define > Linker and Libraries: > ld='cc', ldflags =' -L/usr/local/lib' > libpth=/usr/local/lib /lib /usr/lib > libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt > perllibs=-ldl -lm -lpthread -lc -lcrypt > libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, > libperl=libperl.so.5.8.4 > gnulibc_version='2.3.2' > Dynamic Linking: > dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' > cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' From mail.spammagnet at gmail.com Wed Apr 30 13:43:44 2008 From: mail.spammagnet at gmail.com (BenRifkah Bergsten-Buret) Date: Wed, 30 Apr 2008 13:43:44 -0700 Subject: SPUG: return value of assignment operator In-Reply-To: <48114.71.35.175.248.1209585130.squirrel@webmail.efn.org> References: <002801c8aaea$b7d46b80$650010ac@mlaptop> <48114.71.35.175.248.1209585130.squirrel@webmail.efn.org> Message-ID: On Wed, Apr 30, 2008 at 12:52 PM, Yitzchak Scott-Thoennes wrote: > On Wed, April 30, 2008 12:13 pm, BenRifkah Bergsten-Buret wrote: > > According to my setup* relying on the returned lvalue is less efficient: > > > > Rate increment_separately increment_lhs > > increment_separately 5555556/s -- -28% > > increment_lhs 7758621/s 40% -- > > You're reading it backwards; the increment_lhs is 40% faster than > separately. > D'oh. Yeah, Michael pointed this out to me as well. I got tripped up on the -28% and interpreted it as separately taking 28% less time than lhs. It's obvious now looking at the number of iterations per second. I was somewhat surprised by my initial interpretation. This makes more sense to me. So apparently for this kind of incrementation you can get a substantial performance boost by relying on Perl returning the lhs. -- Ben