From andre.roberge at gmail.com Mon Sep 3 05:55:56 2007 From: andre.roberge at gmail.com (Andre Roberge) Date: Mon, 3 Sep 2007 00:55:56 -0300 Subject: [Edu-sig] Crunchy release 0.9.8 Message-ID: <7528bcdd0709022055x2a38fc40h4815f66261661e80@mail.gmail.com> Dear edu-sig friends, Crunchy version 0.9.8 has been released. Crunchy is an application that transforms static html-based Python tutorials into interactive sessions within your browser (Firefox; other browsers *may* not fully support Crunchy). Crunchy is available from http://code.google.com/p/crunchy Since the last public release, the following changes have been introduced: * Important changes to security model. + 6 security levels. * New interpreter types (following suggestions made on edu-sig by M. Tobis and J. Posner regarding new functionality for IDLE...) * New interpreter options. * New option (used by default) to view tutorials that have no Crunchy-specific markup. * More documentation. * Friendlier tracebacks (for Python beginners) - translatable in languages other than English. * Automatic updating of sys.path so that tutorials can make use of Python's import statement. * More configuration options. * New math_graphics module. * New logo. * New look. * French translation of Crunchy/Python messages (not documentation) almost complete. + many more. Bug reports, comments and suggestions are always welcome. Andr? From kirby.urner at gmail.com Mon Sep 3 23:53:26 2007 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 3 Sep 2007 14:53:26 -0700 Subject: [Edu-sig] Another Pythonic meme ("color depth") Message-ID: This shift in Python 3 (out in alpha) to a unicode basis, I'm comparing to the move from 16 and 256 colors to millions of colors. The analogy is quite correct, as what it takes to map more colors are more bits, to give a bigger mapping. Same with the space of human languages. I sense a lingering imperialism in some circles that's forlornly clingling to the obsolete notion that all source code of strategic value will stay in the English language or at least in the Roman character set (romanji as the Japanese call it). But I think Python, along with Perl, is doing the right thing in trailblazing a future look and feel. Romanji keywords, OK (that's just part of the syntax in this case), but Lithuanian variable, function and class names, are likewise no problem, at least in 3rd party modules (the vast majority of Python code is 3rd party). We're not there yet, but we're moving in the right direction. I was at one of those Hilton hotel style parties in Bellvue recently (near Microsoft HQS), where some the the guests spoke "beltway" (a curious blend of DC based mumbos jumbo), was chatting with a Voice of America PR person and she's definitely in our camp on this one. Unicode is the way to go. www.voa.gov. Just as English Al Jazeera is taking the time and trouble to reach North Americans in their native vernacular (whether TV execs choose to block distribution is another matter -- Google's YouTube netcasting is a good workaround), so is Voice of America (VOA) netcasting in Urdu. Python's new sophistication around Unicode bodes well for i18n in our gnu math curriculum as well (we make much use of these agiles, as they make the whole field *so* much more accessible -- helps level the playing field). Of course Ubuntu and other Linux distros, Plone, etc. already have a strong track record when it comes to breaking away from "one size fits all" mentality. Kirby From jeff at taupro.com Wed Sep 5 13:52:43 2007 From: jeff at taupro.com (Jeff Rush) Date: Wed, 05 Sep 2007 06:52:43 -0500 Subject: [Edu-sig] Rich Data Streams In-Reply-To: References: <46CE0D8B.3020800@taupro.com> <46CE6794.5090306@taupro.com> Message-ID: <46DE988B.6050103@taupro.com> kirby urner wrote: > On 8/23/07, Jeff Rush wrote: > >> The world has more than enough great ideas -- but a severe shortage of those >> who adopt them, refine them and bring them into fruition. I see this here, > > I did put together cities.xml: > http://www.4dsolutions.net/ocn/python/cities.xml And I thank you - I incorporated it into the DataResources page I outline below. > But just randomly piling large sets of data across all subjects and > making someone king of that hill doesn't necessarily sound like a > good idea to me. > > Sounds more like something they'd try in Texas. ;-) Hey, I'm no "King of the Hill" TV guy ;-) I picture this more like a barn raising in Texas - friends and helpful folk get together and pitch in where they can. Maybe at first it looks confusing, with lots of donated items heaped about but then a leader here or there looks it over, begins to see a pattern, and starts to organize the heap. Let's not turn away help even if we're not yet sure where each piece fits. BTW, thanks everyone for the links posted to this list as data streams. All were very good reading, but the data streams I was thinking about was basically raw data on which instructors can build. Some of the links were standalone web-interactive experimentation areas and some were domain-specific teaching languages other than Python - all valuable in their own right and I've made a list to get them onto the wiki. Taking a cue from Laura's suggestion, I've reworked the Edu-SIG wiki page which actually didn't have much on it (as a group we could enhance this). http://www.python.org/community/sigs/current/edu-sig/ I started a catalog of educational data resources underneath it at: http://wiki.python.org/moin/EduSig/DataResources and defined a wiki category for "PythonInEducation". Seems there was one for "PythonInBusiness" but not for education (or science - there is now). There is also a suggestion box at the bottom of the data resources page to collect more ideas and links to reusable data. >> nothing happens. Sometime later the same is raised again and many of the same >> ideas come in. And truly good ideas languish because those rare, precious >> people with a tendency to step forward already have a (over) full slate and >> cannot take on any more while the rest consider ideas their sole contribution. >> It is the birthing and raising not the conception that takes more effort - >> ask any parent. > > I'm working with other busy gnu math teachers on carving out a > niche in the ecosystem, so like stashes of polyhedral OFF files, > X3D stuff, EIG stuff, is our specific rich data. > > But do I try to jumble my stuff with that of every other teacher? > No. We gnu math teachers are actually kinda cliquey. > > Any other big American city could do what we do and intercept > Pentiums headed for the landfill. Free Geek (freegeek.org) > doesn't make a secret of how it works. But *do* they? > > We're maybe just not so lazy in Portland? I'm not sure you and I are using the same definition of the spirit of FOSS. ;-) Mine is more about sharing with anyone who comes along, less about cliques, less about my city or state or country against another. And less about who gets credit - more about a private joy that something you've created is helping those who have no idea who you are. But FOSS I'd guess is broad enough to encompass many definitions. 8-) -Jeff From jeff at taupro.com Wed Sep 5 13:57:51 2007 From: jeff at taupro.com (Jeff Rush) Date: Wed, 05 Sep 2007 06:57:51 -0500 Subject: [Edu-sig] Rich Data Streams In-Reply-To: <46DE988B.6050103@taupro.com> References: <46CE0D8B.3020800@taupro.com> <46CE6794.5090306@taupro.com> <46DE988B.6050103@taupro.com> Message-ID: <46DE99BF.3040504@taupro.com> Jeff Rush wrote: > > Taking a cue from Laura's suggestion, I've reworked the Edu-SIG wiki page > which actually didn't have much on it (as a group we could enhance this). > > http://www.python.org/community/sigs/current/edu-sig/ Pardon, I mispoke and mixed my URLs --- there *is* much wonderful Edu-SIG content under: http://www.python.org/community/sigs/current/edu-sig/ I was misled by the empty page at: http://wiki.python.org/moin/EduSig/ -Jeff From kirby.urner at gmail.com Wed Sep 5 18:13:03 2007 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 5 Sep 2007 09:13:03 -0700 Subject: [Edu-sig] Rich Data Streams In-Reply-To: <46DE988B.6050103@taupro.com> References: <46CE0D8B.3020800@taupro.com> <46CE6794.5090306@taupro.com> <46DE988B.6050103@taupro.com> Message-ID: On 9/5/07, Jeff Rush wrote: > > Sounds more like something they'd try in Texas. ;-) > > Hey, I'm no "King of the Hill" TV guy ;-) I picture this more like a barn I enjoy that show when I tune it in. Mike Judge is a hero of mine. > raising in Texas - friends and helpful folk get together and pitch in where > they can. Maybe at first it looks confusing, with lots of donated items Sounds very Amish. As a Quaker, I can't recall ever raising a barn, but I bet it's fun. Lotsa potluck. Lotsa geodesic domes here in Oregon and I *have* participated in some of those going in (one in particular north of Fremont -- I should check Google Earth). All open source technology by the way. > heaped about but then a leader here or there looks it over, begins to see a > pattern, and starts to organize the heap. Let's not turn away help even if > we're not yet sure where each piece fits. > > BTW, thanks everyone for the links posted to this list as data streams. All > were very good reading, but the data streams I was thinking about was > basically raw data on which instructors can build. Some of the links were > standalone web-interactive experimentation areas and some were domain-specific > teaching languages other than Python - all valuable in their own right and > I've made a list to get them onto the wiki. I think we should leave it to those with special expertise in various knowledge domains to decide what's OK to open source without exposing themselves in some game of cut throat competition we may know nothing about. Like, it's not for me to say what the mining unions want to release. If I'm teaching a Python sequence to a client organization, and wanted a list of every rotablator known to man, I'd probably roll my own, as I have access to that data. But when it comes to gold mining or oil drilling, I'm not any big authority, unlike some other Wanderers I know (wwwanderers.org), and unlike the folks at ConocoPhilips, who use Python in the data modeling of ongoing North Sea drilling operations etc. (more in my blog **). So why don't we just sit back and wait for the mining, oil and medical communities to figure it out? Not our problem, as python.org types to do all that work. I do that know many mines use Python internally. No doubt many other languages as well. The Rich Data Structures and Streams idea is basically a way to implement NALB (No Adult Left Behind). Grownups get tired of Spamalot jokes and endless "see spot run" data structure examples, the brain dead fluff of the pulp text book era. A pre-med kid might like all the bones in the body as an adjacency table (what connects to what i.e. dembones = Human.Skeleton()). The would-be chemist needs a handy dandy dict from whence to pluck those isotopes (caution, some are unstable). http://www.mathpuzzle.com/Periodic.htm http://www.ieer.org/fctsheet/uranium.html If some very good doobie on python.org wants to try linking to all this rich, usable, good-to-have data, wherever and whenever it emerges, I guess I'd say "be my guest and more power to ya!" -- but I don't think we should *count on* such saintly acts of scholarship from busy geeks with families to support, especially uncompensated. The FOSS around Linux was cliquey I'd say as in "who cares if it's open source, only the engineers we're collaborating with understand the code anyway -- but if we try to keep it secret, their lawyers will find a way to 'own' it all of a sudden, so let's just not go there." > Taking a cue from Laura's suggestion, I've reworked the Edu-SIG wiki page > which actually didn't have much on it (as a group we could enhance this). > > http://www.python.org/community/sigs/current/edu-sig/ > > I started a catalog of educational data resources underneath it at: > > http://wiki.python.org/moin/EduSig/DataResources > > and defined a wiki category for "PythonInEducation". Seems there was one for > "PythonInBusiness" but not for education (or science - there is now). I'll take a look at these sometime. Thanks again for all your hard work. > > We're maybe just not so lazy in Portland? > > I'm not sure you and I are using the same definition of the spirit of FOSS. That's very possible. > ;-) Mine is more about sharing with anyone who comes along, less about > cliques, less about my city or state or country against another. And less Right. Mine is definitely more cliquey. I've copped to that in many a posting. But it's not entirely either/or. Ask yourself: how would cliques use FOSS internally? There're some thoughtful answers to that question I'm sure. That being said, I love it how our shared Internet is becoming a shared stash pile of invaluable junk. If you know how to assemble stuff, you've got a gold mine in your back yard (snake infested, yay!). > about who gets credit - more about a private joy that something you've created > is helping those who have no idea who you are. But FOSS I'd guess is broad > enough to encompass many definitions. 8-) > > -Jeff Yes, I'd guess so too. 8-) Kirby ** http://controlroom.blogspot.com/2007/07/python-in-control-room.html From kirby.urner at gmail.com Wed Sep 5 22:48:15 2007 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 5 Sep 2007 13:48:15 -0700 Subject: [Edu-sig] Rich Data Streams In-Reply-To: References: <46CE0D8B.3020800@taupro.com> <46CE6794.5090306@taupro.com> <46DE988B.6050103@taupro.com> Message-ID: On 9/5/07, kirby urner wrote: > Lotsa geodesic domes here in Oregon and I *have* participated in some > of those going in (one in particular north of Fremont -- I should check > Google Earth). OK, found it. Several years since I wandered the construction site, a VIP guest of Oregon Dome I think it was... KmlFile normal #sn_ylw-pushpin highlight #sh_ylw-pushpin Dome home north of Fremont -122.6165977730744 45.55303985405295 0 57.67866164100011 6.099569277838851e-010 0.04211520150509363 #msn_ylw-pushpin -122.6166140657374,45.55303444513098,0 Kirby From kirby.urner at gmail.com Sun Sep 9 02:51:01 2007 From: kirby.urner at gmail.com (kirby urner) Date: Sat, 8 Sep 2007 17:51:01 -0700 Subject: [Edu-sig] More regarding snake imagery... Message-ID: I'll tie this to education but regarding Pythons and constrictors in general, they have this tendency to eat rodents. So from a marketing perspective, what's "the rodent" in Python World (the computer language)? I think a good answer is: whatever knowledge domain. We wrap around new namespaces quickly and squeeze out all available info in a mercifully short time, then digest what we've learned, and in some sense we "become the mouse" i.e. are now ready to solve problems in ways that fit the needs of that domain. "Python stays relevant" might be the slogan here. The tie to education is unavoidably OLPC-related but I'll risk a quick quote from a recent post to Synergeo (Ken G. Brown listowner): """ Just saying the word "Python" is enough to scare the bejeezus out of the ignorant, as snake imagery tends to be off-putting in some cultures (attractive in others). """ and from the same post (# 35677): """ The last thing we need are lots of pith helmeted MIT "bwana types", traipsing through the Jungle with entourages carrying crates of XOs on their heads, like in some kind of B-grade Tarzan movie. """ In sum, I think it's up to locals familiar with various "locales" (what they call namespaces in J **) to figure how best to handle the snake imagery. We can just hope they do something charming, offering what others -- or we ourselves -- have done as a guide: http://mybizmo.blogspot.com/2007/07/few-photos.html http://controlroom.blogspot.com/2007/04/knotted-snake.html http://mybizmo.blogspot.com/2006/09/sculpture-with-found-objects.html Kirby ** Locale A namespace in J. The locale in which a public name is defined is an attribute of the name. A locale is identified by a locale name which is a character string not containing an underscore. http://www.jsoftware.com/help/jforc/glossary.htm From mtobis at gmail.com Thu Sep 13 08:04:15 2007 From: mtobis at gmail.com (Michael Tobis) Date: Thu, 13 Sep 2007 01:04:15 -0500 Subject: [Edu-sig] More regarding snake imagery... In-Reply-To: References: Message-ID: On 9/8/07, kirby urner wrote: > I'll tie this to education but regarding Pythons and constrictors > in general, they have this tendency to eat rodents. ChiPy the Chicago Python chipmunk thinks otherwise: http://chipy.org/chipy/chipy/img/OR_chipy_moin.png mt From kirby.urner at gmail.com Thu Sep 13 09:08:48 2007 From: kirby.urner at gmail.com (kirby urner) Date: Thu, 13 Sep 2007 00:08:48 -0700 Subject: [Edu-sig] More regarding snake imagery... In-Reply-To: References: Message-ID: Cute, like it. Kirby On 9/12/07, Michael Tobis wrote: > On 9/8/07, kirby urner wrote: > > I'll tie this to education but regarding Pythons and constrictors > > in general, they have this tendency to eat rodents. > > ChiPy the Chicago Python chipmunk thinks otherwise: > > http://chipy.org/chipy/chipy/img/OR_chipy_moin.png > > mt > From kirby.urner at gmail.com Mon Sep 17 20:08:14 2007 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 17 Sep 2007 11:08:14 -0700 Subject: [Edu-sig] More about unicode... Message-ID: The kinds of lesson plans I'm collecting involve storing proper names in their native / home languages, with round trips twixt browser front ends and SQL back ends, Python a controller. It's especially reassuring, when you're in some foreign country on a hospital bed, in the care of strangers, when you see your own name is at least spelled correctly in the right character set on the monitors, along with all those colorful graphs and whatever (beep beep....). Means maybe they're used to multiple cultures, are worldly wise and well funded? Savvy hospitals probably attract top doctors? Maybe this is like a Federation Starship or something? "Kirk?..." "I think he needs more meds doctors..." [ scene goes dark ]. "Bones?..." From kirby.urner at gmail.com Wed Sep 19 00:02:58 2007 From: kirby.urner at gmail.com (kirby urner) Date: Tue, 18 Sep 2007 15:02:58 -0700 Subject: [Edu-sig] Lore question (re BarCamp) and MVC link Message-ID: I'm planning this little meetup for open sorcerers and doctors (as in medical) and am modeling it after BarCamp. If any of you on edu-sig see shallow bugs or other patches you want to make, here's from some actual recent correspondence sent to a doc friend of mine. Take pot shots at will... """ My model is Portland Barcamp but without the cubes (McMenamins tables and booths instead -- same idea). Dunno if we have wireless -- not having a major blow to the analogy. Barcamp doesn't mean a Camp for Wild Drinking (one meaning of "Bar"). Rather, in geek world, we use FUBAR (a military acronym) as a source of Foo and Bar. These then become the nonsense syllables we so often need to stand for "whatever". FooCamp was taken by O'Reilly (the publisher and guy, Tim). BarCamp materialized soon thereafter, or so goes the lore. """ So what if anything does this have to do with Python? I think of Python mainly as a candidate controller in this very generic picture here in my blog: http://controlroom.blogspot.com/2007/09/more-curriculum-writing-re-mvc.html Probably missing Pirate Festival this upcoming weekend, given it's also Race for the Cure, plus "working vacation" Friday (hotel in the boonies). Pirate Festival last year: http://mybizmo.blogspot.com/2006/09/yar.html Kirby From kirby.urner at gmail.com Wed Sep 19 02:54:31 2007 From: kirby.urner at gmail.com (kirby urner) Date: Tue, 18 Sep 2007 17:54:31 -0700 Subject: [Edu-sig] Lore question (re BarCamp) and MVC link In-Reply-To: References: Message-ID: > > Take pot shots at will... > OK, I stand corrected. FooBar and FUBAR needn't trace to the same etymology, though if we want to do that as a hack for some reason, I suppose it's fair play. http://en.wikipedia.org/wiki/Foobar Kirby From kirby.urner at gmail.com Thu Sep 20 06:01:59 2007 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 19 Sep 2007 21:01:59 -0700 Subject: [Edu-sig] Python 3.0a: investigating changes Message-ID: So I'm in a Portland coffee shop, iTunes on the speakers, daughter reading a novel. I remember Guido saying something about 'next' changing a little. What I'm finding tonight is the old some_generator.next() syntax is breaking (by design I assume), while next(some_generator) works great. What's getting triggered under the hood is __next__, which of course you can trigger directly. >>> thegen = (i for i in range(10)) >>> thegen >>> type(thegen) >>> thegen.next() Traceback (most recent call last): File "", line 1, in AttributeError: 'generator' object has no attribute 'next' >>> dir(thegen) ['__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'gi_frame', 'gi_running', 'send', 'throw'] >>> next(thegen) 0 >>> next(thegen) 1 >>> next(thegen) 2 >>> def fibbo(a=0,b=1): ... while True: ... yield a ... a,b = a+b, a ... >>> somegen = fibbo() >>> type(somegen) >>> type.next() Traceback (most recent call last): File "", line 1, in AttributeError: type object 'type' has no attribute 'next' >>> next(somegen) 0 >>> next(somegen) 1 >>> next(somegen) 1 >>> somegen.__next__() 2 >>> somegen.__next__() 3 >>> somegen.__next__() 5 >>> somegen.__next__() 8 >>> somegen.__next__() 13 >>> somegen.__next__() 21 >>> and so on. Kirby From guido at python.org Fri Sep 21 18:52:52 2007 From: guido at python.org (Guido van Rossum) Date: Fri, 21 Sep 2007 09:52:52 -0700 Subject: [Edu-sig] Py3k Trivia :-) Message-ID: Would you believe there's a Curious George episode named "Curious George Vs The Turbo Python 3000"? """ George isn't tall enough to ride the greatest rollercoaster of all time, The Turbo Python 3000. He uses licorice whips to measure his height and determines that he is 7-whips tall, one short of the 8-whip minimum! """ http://pbskids.org/curiousgeorge/parentsteachers/program/ep_desc_3.html -- --Guido van Rossum (home page: http://www.python.org/~guido/) From lavendula6654 at yahoo.com Mon Sep 24 03:31:31 2007 From: lavendula6654 at yahoo.com (Elaine) Date: Sun, 23 Sep 2007 18:31:31 -0700 (PDT) Subject: [Edu-sig] Python course at Foothill College Message-ID: <483045.67325.qm@web31713.mail.mud.yahoo.com> If you would like to learn Python, Foothill College in Los Altos Hills California is offering a course starting this Wednesday evening, 26 Sept. The course is designed for students who are already familiar with some type of programming. Here is the course description: CIS 68K "INTRODUCTION TO PYTHON PROGRAMMING" 5 Units This course will introduce students to the Python language and environment. Four hours lecture, four hours terminal time. Advisory: CIS 15A or 27A, and CIS 68A. 2182 CIS -068K-01 LEC6:00PM- 9:50 Wednesdays - HAIGHT Middlefield Campus, Room I5. Course fee, $4. If you would like to sign up for the class, it would be very helpful if you would register beforehand by going to: http://www.foothill.fhda.edu/reg/index.php If you have questions, you can contact the instructor at: haightElaine at foothill.edu ____________________________________________________________________________________ Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. http://answers.yahoo.com/dir/?link=list&sid=396545433 From kirby.urner at gmail.com Mon Sep 24 03:59:33 2007 From: kirby.urner at gmail.com (kirby urner) Date: Sun, 23 Sep 2007 18:59:33 -0700 Subject: [Edu-sig] Python course at Foothill College In-Reply-To: <483045.67325.qm@web31713.mail.mud.yahoo.com> References: <483045.67325.qm@web31713.mail.mud.yahoo.com> Message-ID: > 2182 CIS -068K-01 LEC6:00PM- 9:50 Wednesdays - HAIGHT > Middlefield Campus, Room I5. Course fee, $4. Woah, only $4. That's way inexpensive! Congratulations on running an efficient academy in far away Los Altos. Kirby From kirby.urner at gmail.com Tue Sep 25 18:51:55 2007 From: kirby.urner at gmail.com (kirby urner) Date: Tue, 25 Sep 2007 09:51:55 -0700 Subject: [Edu-sig] News from the K-corner Message-ID: Contract renewed with SA: to teach Python; they liked my Lithuania slides, clear even to non-geeks. Making new agreement with LEP High, also to teach Python, but more as a special case example of what open source entrepreneurship is all about. LEP pix: http://www.flickr.com/photos/17157315 at N00/sets/72157602156242583/ My focus will be: how open standards, open specs, don't keep us from competing or compensating, in games to offer better products. The difference: a more level playing field, as there's no unfair protection against the competition having access to the same powerful and effective development tools, as these are by now already paid for in full and handed off to our children, their children at large, per GNU, GPL, OLPC etc. On another day job front, I completed a so-called BarCamp Alpha in Centralia, a really picturesque slice of North America and its many intersecting traditions: http://www.flickr.com/photos/17157315 at N00/sets/72157602124435584/ The purpose of this BarCamp was to look at open source in the area of clinical research (both outcomes and quality assurance). Centralia is approximately half way between Seattle and Portland, and so is good neutral ground in which to bury hatchets and form new collaborations (relations between these two metropolitan regions have been rivalrous at times, including these days, what with Portland, not Seattle, being "an open source capital" and all: http://www.csmonitor.com/2005/1128/p03s02-ussc.html More in my blog re BarCamp Alpha: http://controlroom.blogspot.com/2007/09/barcamp-alpha.html On the Fuller School front (a thread in this archive, especially when Arthur and I were arguing (i.e. approximately all the time ( http://pygeo.sourceforge.net/ ))), there's some fresh propaganda in Good Magazine, which I appreciate: http://www.goodmagazine.com/section/Guide/good_guide_r_buckminster_fuller (You might still find some hard copies on the stands -- bright orange with AK-47 x-rayed on the cover). Kirby 4D Solutions Portland, Oregon