<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9310504</id><updated>2012-01-01T19:45:46.112-08:00</updated><category term='s3fs'/><category term='fedora java gwt'/><category term='gwt install fedora'/><category term='lsb'/><title type='text'>rrizun</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9310504.post-5911738730871909890</id><published>2011-10-25T06:36:00.000-07:00</published><updated>2011-10-31T08:52:25.791-07:00</updated><title type='text'>some 'secret weapon' libraries/technologies</title><content type='html'>some 'secret weapon' libraries/technologies&lt;br /&gt;&lt;br /&gt;(in no particular order)&lt;br /&gt;&lt;br /&gt;libcurl&lt;br /&gt;libevent&lt;br /&gt;libfuse&lt;br /&gt;sqlite3&lt;br /&gt;&lt;br /&gt;collectd&lt;br /&gt;&lt;br /&gt;corosync (lan)&lt;br /&gt;rabbitmq (wan)&lt;br /&gt;&lt;br /&gt;jersey (java)&lt;br /&gt;java.util.concurrent + google guava&lt;br /&gt;jdom&lt;br /&gt;&lt;br /&gt;gwt + requestFactory&lt;br /&gt;jquerymobile&lt;br /&gt;&lt;br /&gt;mysql&lt;br /&gt;berkeley db je (java edition) (as a java local store)&lt;br /&gt;sqlite3 (as a c/c++ local store)&lt;br /&gt;&lt;br /&gt;duplicity (e.g., to amazon s3)&lt;br /&gt;stackoverflow.com&lt;br /&gt;cakephp (fer quick 'n dirty crud style apps)&lt;br /&gt;dreamhost.com&lt;br /&gt;&lt;br /&gt;a solid state disk!&lt;br /&gt;&lt;br /&gt;eclipse + junit&lt;br /&gt;apt-gettable/yum installable tomcat&lt;br /&gt;&lt;br /&gt;boost&lt;br /&gt;CAP theorem&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-5911738730871909890?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/5911738730871909890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=5911738730871909890' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5911738730871909890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5911738730871909890'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/10/some-secret-weapon-librariestechnologie.html' title='some &apos;secret weapon&apos; libraries/technologies'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-5139723087421726186</id><published>2011-08-19T09:15:00.000-07:00</published><updated>2011-08-20T07:26:16.250-07:00</updated><title type='text'>gwt requestFactory</title><content type='html'>Quick follow up: turns out gwt requestFactory 'entities' work *great* for cmd/event style&lt;br /&gt;&lt;br /&gt;key is to *not* provide request context methods such as persist(PersonProxy p), update(PersonProxy p) and delete(PersonProxy p)&lt;br /&gt;&lt;br /&gt;instead, I'm doing something slightly different... e.g,. given:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;interface PersonProxy extends EntityProxy {&lt;br /&gt; ...&lt;br /&gt; String getEmail();&lt;br /&gt; String getEmployer();&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;instead of a 'crud' style interface:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;interface PersonService {&lt;br /&gt;Request[Void] update(PersonProxy person);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;have a cmd(/event) style interface instead:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;interface PersonService {&lt;br /&gt;Request[Void] setEmail(PersonProxy person, String email);&lt;br /&gt;Request[Void] setEmployer(PersonProxy person, String employer);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;a number of reasons/ramifications for doing this:&lt;br /&gt;&lt;br /&gt;1. in my server side domain, I only have a cmd style interface; if the server side service signature is update(Person person) then then problem is I don't know which properties changed and therefore I don't know which properties I need to send domain cmds for to change (this is the crux of crud)&lt;br /&gt;&lt;br /&gt;if you're just insert/upsert into, say, a sql database (and you don't have no business logic sideeffects) then crud can work perfectly well&lt;br /&gt;&lt;br /&gt;this is not the case in my server side domain model&lt;br /&gt;&lt;br /&gt;2. furthermore, note that there are no setters in PersonProxy; this is desirable and consistent with cmd/event style -&amp;gt; dtos are read only blobs of data, and data is changed by (a) issuing cmds and (b) receiving events indicating changes to data (from you or not from you) and integrating them back into the dto yourself (cmd/event -&amp;gt; cqrs)&lt;br /&gt;&lt;br /&gt;3. the server side is easy to implement; I just keep a local map of PersonId -&amp;gt; Person of persons i've 'seen', and gwt requestFactory findEntity() simply does a lookup from this map&lt;br /&gt;&lt;br /&gt;it is my 'list' style service methods (e.g., listAllPeople(int start, int limit)) that actually really populate (on demand) the server side person map from actual data (e.g., maybe a sql select query) anytime and everytime a client request a list of data (perhaps from a CellTable dataProvider)&lt;br /&gt;&lt;br /&gt;so, effectivly, the server side person map is a true replicated copy of the actual domain persons (replicated and updated via domain events) -&gt; again, consistent w/cmd/event style arch&lt;br /&gt;&lt;br /&gt;furthermore, the server side gwt rf infrastructure always graciously returns the same server side person entity (using my supplied findEntity() method) every time a person service method is invoked, so, implementing server side service methods is easy, e.g.,:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class PersonServiceImpl {&lt;br /&gt; ...&lt;br /&gt; public void setEmail(Person person, String email) {&lt;br /&gt;&lt;br /&gt; // STEP 1 update my local replicated domain&lt;br /&gt; person.setEmail(email);&lt;br /&gt;&lt;br /&gt; // STEP 2 try to update the actual real domain!&lt;br /&gt; // e.g., may sql insert, maybe cmd.send on a service bus (I'm making this up:)&lt;br /&gt; someServiceBus.send("person_channel", new Cmd("setEmail", "email="+email));&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note, here, the entire Person entity is being passed in... the key here is that the client side is logically sending the whole entity (but physically, only the *delta*, which, for all intents and purposes should only be the bits for the EntityProxyId&lt;personproxy&gt;, yes?) but it is really doing so only for identification purposes (I wonder if my service methods signatures could just use EntityProxyId&lt;personproxy&gt; instead then?!? will hafta think about that one)&lt;br /&gt;&lt;br /&gt;when setEmail returns, the server side gwt rf servlet infrastructure 'notices' that the service side entity has changed (been updated) and that triggers the server side to 'fire' a WriteOperation.UPDATE event that will be sent back to the client (piggy-backed on the request return) and that will trigger the client side eventBus to fire a EntityProxyChange(Event)&lt;br /&gt;&lt;br /&gt;all this happens by virtue of the fact that Person is in the service method's signature&lt;br /&gt;&lt;br /&gt;now, here's where it gets really interesting:&lt;br /&gt;&lt;br /&gt;now we can really start writing some interesting server side service methods w/interesting business logic side effects that the client side can remain ignorant of, yet still see/discover and act upon those sideeffects&lt;br /&gt;&lt;br /&gt;e.g.,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;interface PersonService {&lt;br /&gt;...&lt;br /&gt;public Request[Void] createFiveRandomPeople();&lt;br /&gt;...&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the server side service method implementation is easy... just create the five people and (a) stash 'em in the local person map and (b) try to actually create the five people in the actual domain model (e.g., sql insert or send cmd); this is not the interesting part&lt;br /&gt;&lt;br /&gt;the interesting part is, here, this is a piece of service side business logic that the client can invoke, but, the client doesn't really know what it really does, i.e, what are the sideeffects?&lt;br /&gt;&lt;br /&gt;surprisingly easy solution: change the method signature:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;interface PersonService {&lt;br /&gt;...&lt;br /&gt;public Request[Set[PersonProxy]] createFiveRandomPeople();&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;so, now that the newly create people are in the signature of the service method, this will trigger the server side gwt rf servlet to do 'find's for every instance of Person in the signature (input or output parameters?) and this will trigger UPDATE events to be sent back to the client in the response payload which will trigger UPDATE events on the client side&lt;br /&gt;&lt;br /&gt;(Note- not quite sure I'm explaining the exactly 100% correctly... I *think* the client side gwt rf infrastructure keeps a set of 'seen' EntityProxyIds and if the client side rf 'sees' a new entity that it hasn't seen before the it locally fires a UPDATE event) (if that's not the way it really works then I don't understand how it works yet =))&lt;br /&gt;&lt;br /&gt;back on the client side, say the client has a CellTable of PeopleProxy... the data provider can simply register for EntityProxyChange(Event)s on PersonProxy and can simple do a brute force refresh of the list data... at first glance that might sound inefficient, i.e., why not just specifically add the 5 returns personProxies to the dataProviders list? well, the answer is because the client probably doesn't know *how* to add them business logic wise, i.e., at the beginning? at the end? in the middle? by last name? I dunno... (the server side does though! I guess you could re-code all of the biz logic in the client side, but, that might be impracticable and/or impossible) so, by just doing a brute force refresh of the data provider data then the client side automatically leverages the server side business logic and everything falls in place nicely&lt;br /&gt;&lt;br /&gt;phew!&lt;br /&gt;&lt;br /&gt;Its funny how the WriteOperation.PERSIST, UPDATE and DELETE make it *appear* that gwt requestFactory is all about crud, and, it sorta is and it sorta isn't&lt;br /&gt;&lt;br /&gt;PERSIST is all about crud... in a non-crud application, it ideally should not be relevant&lt;br /&gt;&lt;br /&gt;UPDATE and DELETE actually really are not all about crud... they are more about *events*... that is, UPDATE really means, "hey! I just saw this new entity that I hadn't seen before!" (and that doesn't necessarily mean that it was just created, all it means is that you just now just all of a sudden discovered it!)&lt;br /&gt;&lt;br /&gt;similarly, DELETE means "Hey! I just saw this entity 'go away' that I previously knew of!"... and that doesn't mean that the client just deleted it! (maybe another client somewhere else deleted it, and you're just 'hearing' about it via a server side event that got lucky enough to be propagated to you because you just happened to refresh a cellTable with a range of data that just happened to have that entity in it previously)&lt;br /&gt;&lt;br /&gt;so, in a cmd/event style app, one should expect *not* to use PERSIST (Note- I reserve the right to be slightly wrong about the last statement)&lt;br /&gt;&lt;br /&gt;let me elaborate: in a gwt rf app, you'll only ever see PERSIST events if the *client* creates an entire, e.g., PersonProxy and beams it the the server side for 'putting' (i.e., the C in CRUD), that is, you have a service method like Request[Void] putPerson(PersonProxy person);&lt;br /&gt;&lt;br /&gt;an alternative style is to have a service method like Request[Void] newPerson(String name, String email, String employer)... now, when the client side formulates these 3 parameters and beams them to the server, the server can 'put' the person (or whatever) and, here's the interesting part, *return* it back to the client; this will trigger the client to fire a UPDATE event (because it hasn't 'seen' the returned person entity proxy before)... notice no "PERSIST" event! (Note- I haven't tried this myself yet, need to do so ... [update 8/20/11] just tried this and it all worked perfectly and exactly as described!) so, the client side service signature is really Request[PersonProxy] newPerson(String name, String email, String employer); and this is much less crud style and much more cmd/event/cqrs style.&lt;br /&gt;&lt;br /&gt;and really, this is no different than the "createFiveRandomPeople" scenario... newPerson() is simply just a service method of which the client side has absolutely no clue about what its sideeffects are (i.e., it does not have first class knowledge that a person is gonna be created!) instead, it implicitly learns of the sideffects (lets be honest, can be arbitrary sideeffects, really!) via local client side events that the gwt requestFactory automatically 'detects' by virtue of the entity proxy being in the return part of the method signature&lt;br /&gt;&lt;br /&gt;if u really want to be philosophical, in a cmd/event style arch, there are only ever "UPDATE" events =) i.e., the entity is either there or it isn't... you have no control over the entity's existence, so, its either, "UPDATE! I just saw this entity that I didn't see before" or "UPDATE! I no longer see this entity that I saw before" =) i.e., DELETE is just a special kind of UPDATE (Note- again, I reserve the right to be slightly wrong about the last statement)&lt;br /&gt;&lt;br /&gt;one 'downside' of this whole cmd/event style w/gwt requestFactory is that it kinda throws a monkey wrench into the gwt Editors framework (but then again, the Editors framework is a lot about crud, yes? so it should not be that surprising- some may consider it a downside, others an upside)&lt;br /&gt;&lt;br /&gt;you end up with the same problem on the client side as you would on the server side with a server side service method such as void update(Person p)&lt;br /&gt;&lt;br /&gt;on the client side, the Editors framework gives you back a whole PersonProxy... now what? what properties were changed? sure, you could keep deltas, but, its still crud... e.g., *why* were the properties changed? change of address? fix typo? easier to provide such semantics w/cmd/event (imho) I can see using Editors against ValueProxies, but not necessarily against EntityProxies (because then you're fully into the world of crud (which, again, can be fine if it meets/suits requirements))&lt;br /&gt;&lt;br /&gt;having said all this, I think the gwt requestFactory framework is wonderful and is already working great in two (2) of my cmd/event style apps&lt;br /&gt;&lt;br /&gt;I think it took a little bit longer than expected to ramp up on gwt rf and all of its ramifications but is definitely worthwhile as it will (a) save a lot of grunt work writing boiler plate code and (b) somewhat enforces good client/server style wrt cmd/event style&lt;br /&gt;&lt;br /&gt;good stuff&lt;br /&gt;&lt;br /&gt;p.s.- just though of an interesting gwt rf idiom: "rename"&lt;br /&gt;&lt;br /&gt;imagine&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Request[PersonProxy] rename(PersonProxy person, String newName);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;pretty slick: on return from server side service impl, request factory will (a) 'notice' that the incoming person is no longer "isLive" and will have a DELETE event fired against it and (b) 'notice' the outgoing Person and do a findEntity on it and 'discover' that it now some how magically and all of a sudden *exists* !! this results in a UPDATE event fired against the 'new' person entity... pretty slick (I hope I'm not lying here...! [update 8/20/11] I'm not lying! just tried this myself and everything worked perfectly exactly as I 'theorized'. except for one subtle server side service method impl detail: the rename implementation should make a deep copy of the server side entity and return that; that triggers the expected DELETE/UPDATE event pair (interesting, if u don't do that then u observe a pair of UPDATE/UPDATE events... hmmmm...))&lt;br /&gt;&lt;br /&gt;its nice how everything comes together nicely&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-5139723087421726186?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/5139723087421726186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=5139723087421726186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5139723087421726186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5139723087421726186'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/08/gwt-requestfactory.html' title='gwt requestFactory'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4532056137626837435</id><published>2011-08-14T06:15:00.000-07:00</published><updated>2011-08-14T15:15:44.060-07:00</updated><title type='text'>using gwt request factory as a generic rpc mechanism</title><content type='html'>Been looking at GWT requestFactory lately, but from a different perspective.&lt;br /&gt;&lt;br /&gt;My perspective is not one of able to rapidly code a 'crud' style application.&lt;br /&gt;&lt;br /&gt;Rather my perspective is one of able to rapidly code a 'cmd/event' style application.&lt;br /&gt;&lt;br /&gt;What I'm gonna do is decline all of the GWT requestFactory 'entity' stuff and only use the 'value' stuff (GWT ValueProxy introduced in GWT 2.1.1 I think) to come up with a cmd/event-style application (because in my case, my server side model is a cmd/event style model)&lt;br /&gt;&lt;br /&gt;With crud style apps you can have fast up front results at the possible cost of long term unmaintainable code (which can be fine for simple apps).&lt;br /&gt;&lt;br /&gt;With cmd/event style apps you can have long term maintainable code at the cost of up front design (complex apps).&lt;br /&gt;&lt;br /&gt;(I say "can" because, as with any "tool", any developer can use or mis-use it; cmd/event -&amp;gt; pay me now (w/up front design); crud -&amp;gt; pay me later (w/future maintenance))&lt;br /&gt;&lt;h3&gt;Using GWT RPC&lt;/h3&gt;&lt;br /&gt;GWT RPC apps typically start out something like this:&lt;br /&gt;&lt;img src="https://chart.googleapis.com/chart?cht=gv&amp;amp;chl=digraph%7Bsubgraph%20cluster1%7B[label=%22client%22]client[shape=box];MyServiceAsync%7D;subgraph%20cluster2%7B[label=%22server%22]MyService;MyServiceServlet;db[shape=box]%7D;client-%3EMyServiceAsync-%3EMyService-%3EMyServiceServlet-%3Edb%7D" /&gt;&lt;br /&gt;&lt;br /&gt;the developer carefully writes a MyServiceAsync/MyService/MyServiceServlet trifecta and must manually ensure (yes, gpe helps) that every single photon is perfectly aligned =) furthermore, design-wise it is effectively a direct tunnel from client side to server side (may or may not be desirable... I hope not desirable -&amp;gt; tight coupling, but in the grand scheme of things probably not that big of a deal because this client/server interface should really be a 'private' client/service interface anyway whose only purpose is to facilitate communication from the client browser to server servlet).&lt;br /&gt;&lt;br /&gt;as gwt rpc apps get more complicated they might morph to something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="https://chart.googleapis.com/chart?cht=gv&amp;amp;chl=digraph%7Bsubgraph%20cluster1%7Bclient[shape=box];MyClientSideModel;MyServiceAsync%7D;subgraph%20cluster2%7BMyService;MyServiceServlet;MyServerSideModel;db[shape=box]%7D;client-%3EMyClientSideModel-%3EMyServiceAsync-%3EMyService-%3EMyServiceServlet-%3EMyServerSideModel-%3Edb%7D" /&gt;&lt;br /&gt;&lt;br /&gt;myClientSideModel might be introduced to reduce tight coupling between client/server&lt;br /&gt;&lt;br /&gt;myClientSideModel might be introduced to allow for a client-side event/service bus; the client side can publish local events and the client side ui views can react to those local events and update themselves- pretty slick.&lt;br /&gt;&lt;br /&gt;myServiceSideModel might be introduced to allow for a more flexible server side architecture; e.g., it might not be practical/possible to jam everything into a custom server side servlet (e.g., Objectify is independent of servlets); also, might want to unit test server side code, and that might be a little bit more difficult if everything is jammed in a monolithic fashion into a custom server side servlet&lt;br /&gt;&lt;h3&gt;Using GWT requestFactory&lt;/h3&gt;&lt;br /&gt;with gwt requestFactory:&lt;br /&gt;&lt;img src="https://chart.googleapis.com/chart?cht=gv&amp;amp;chl=digraph%7Bsubgraph%20cluster1%7Bclient[shape=box];MyClientSideModel;MyServiceRequest%7D;subgraph%20cluster2%7BMyServerSideModel;db[shape=box]%7D;client-%3EMyClientSideModel-%3EMyServiceRequest-%3EMyServerSideModel-%3Edb%7D" /&gt;&lt;br /&gt;&lt;br /&gt;It is pretty much the same as the previous gwt rpc design except that we're missing the boilerplate MyService and MyServiceServlet (and the *Async is replaced with *Request, both playing the same role, but with burdensome restrictions lifted).&lt;br /&gt;&lt;br /&gt;Here, MyServiceSideModel is any service-side java code -&amp;gt; not saddled w/being a servlet.&lt;br /&gt;&lt;br /&gt;Furthermore, the *Request interface is not tightly coupled at the photon level to a server side component -&amp;gt; as a matter of fact it is not tightly coupled to anything -&amp;gt; it is loosely ducked typed to a server side pojo (non-servlet) component (yet the gwtc compiler give you a hight degree of compile time type-safety, i.e., gwtc verifies at compile time that the duck typing has any hope of succeeding).&lt;br /&gt;&lt;br /&gt;As a matter of fact, all of the 'model' code that you write, in both client and server, is just plain java code -&amp;gt; no more boilerplate (well, ok, less boilerplate; developer still writes ValueProxies (a good thing though -&amp;gt; keeps 'em honest) and a RequestFactory (too easy to mention)).&lt;br /&gt;&lt;br /&gt;GWT requestFactory advantages wrt GWT RPC for cmd/event style apps:&lt;br /&gt;&lt;br /&gt;* rf runs faster in browser because it is json based (browser uses native code to parse json instead of translated java-&gt;javascript code to parse gwt rpc payloads)&lt;br /&gt;* rf keeps developer more 'honest' because they need to come up with formal client side value interfaces&lt;br /&gt;* client-server interface is dynamically duck-typed (vs statically typed in gwt rpc)&lt;br /&gt;* less boiler plate code to write (ok, actually, different boiler plate code to write... actually, developer writes duck-typed client side interfaces; one may or may not call that boilerplate code)&lt;br /&gt;* other stuff&lt;br /&gt;&lt;br /&gt;this was really just my brain dump of the benefits of using GWT requestFactory instead of GWT RPC as a general RPC mechism; using GWT RF in this way effectively encourages good client/service cmd/event architecture without burdening the developer with boring boiler plate code (that's what all of the GWT RF generators do now) -&gt; and as a bonus it runs fast too.&lt;br /&gt;&lt;br /&gt;hope some of this makes sense!&lt;br /&gt;&lt;br /&gt;references&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tbroyer.posterous.com/gwt-211-requestfactory"&gt;http://tbroyer.posterous.com/gwt-211-requestfactory&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/4119867/when-should-i-use-requestfactory-vs-gwt-rpc/4926459#4926459"&gt;http://stackoverflow.com/questions/4119867/when-should-i-use-requestfactory-vs-gwt-rpc/4926459#4926459&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.udidahan.com/2009/12/09/clarified-cqrs/"&gt;http://www.udidahan.com/2009/12/09/clarified-cqrs/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4532056137626837435?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4532056137626837435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4532056137626837435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4532056137626837435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4532056137626837435'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/08/using-gwt-request-factory-as-generic.html' title='using gwt request factory as a generic rpc mechanism'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-7220777607008557269</id><published>2011-07-06T07:14:00.001-07:00</published><updated>2011-07-06T07:15:57.078-07:00</updated><title type='text'>ubuntu/wireshark as non-root</title><content type='html'>1a. dpkg-reconfigure wireshark-common&lt;br /&gt;1b. say "yes"&lt;br /&gt;2. add a user to wireshark group (e.g., sudo vi /etc/group)&lt;br /&gt;3. logout/login for changes to take effect&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-7220777607008557269?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/7220777607008557269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=7220777607008557269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7220777607008557269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7220777607008557269'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/07/ubuntuwireshark-as-non-root.html' title='ubuntu/wireshark as non-root'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-2413874010564507680</id><published>2011-05-02T08:28:00.000-07:00</published><updated>2011-05-02T08:31:07.111-07:00</updated><title type='text'>using duplicity linux in a nutshell</title><content type='html'>duplicity script to backup a user defined set of folders:&lt;br /&gt;&lt;br /&gt;e.g.,&lt;br /&gt;&lt;br /&gt;duplicity --no-encryption --include /etc --include /home --include /cvsroot --include /cvsrootx --include /workspace --exclude '**' / file:///mnt/backup&lt;br /&gt;&lt;br /&gt;be sure the --exclude '**' is last!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-2413874010564507680?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/2413874010564507680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=2413874010564507680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2413874010564507680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2413874010564507680'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/05/using-duplicity-linux-in-nutshell.html' title='using duplicity linux in a nutshell'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-9020414347783721703</id><published>2011-02-08T06:06:00.000-08:00</published><updated>2011-02-08T06:07:49.809-08:00</updated><title type='text'>Automatically generate AirPrint Avahi service files for CUPS printers</title><content type='html'>&lt;a href="https://github.com/tjfontaine/airprint-generate"&gt;https://github.com/tjfontaine/airprint-generate&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-9020414347783721703?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/9020414347783721703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=9020414347783721703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/9020414347783721703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/9020414347783721703'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/02/automatically-generate-airprint-avahi.html' title='Automatically generate AirPrint Avahi service files for CUPS printers'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4378039610500229745</id><published>2011-01-07T08:14:00.000-08:00</published><updated>2011-01-07T08:15:45.448-08:00</updated><title type='text'>passwordless ubuntu</title><content type='html'>&lt;p&gt;here is how to disable passwords prompts for, e.g., the user "ubuntu":&lt;/p&gt; &lt;p&gt;passwd -d ubuntu&lt;br /&gt;visudo: &lt;strong&gt;%admin ALL=(ALL) NOPASSWD: ALL&lt;/strong&gt;&lt;br /&gt;add user &lt;strong&gt;ubuntu&lt;/strong&gt; to "&lt;strong&gt;admin&lt;/strong&gt;" group&lt;br /&gt;in /etc/pam.d/common-auth: change &lt;strong&gt;nullok_secure&lt;/strong&gt; to just &lt;strong&gt;nullok&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4378039610500229745?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4378039610500229745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4378039610500229745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4378039610500229745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4378039610500229745'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2011/01/passwordless-ubuntu.html' title='passwordless ubuntu'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-7294915358431270661</id><published>2010-12-15T11:44:00.001-08:00</published><updated>2010-12-15T11:45:45.653-08:00</updated><title type='text'>pjsip/pjsua w/sound on ubuntu 10.10</title><content type='html'>sound doesn't seem to work unless pjsua sees the alsa header files at make time&lt;br /&gt;&lt;br /&gt;just do a "apt-get install libasound2-dev" and then (re)make the pjsua binary&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-7294915358431270661?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/7294915358431270661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=7294915358431270661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7294915358431270661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7294915358431270661'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2010/12/pjsippjsua-wsound-on-ubuntu-1010.html' title='pjsip/pjsua w/sound on ubuntu 10.10'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-8914533900596252364</id><published>2010-12-13T09:32:00.000-08:00</published><updated>2010-12-13T09:48:50.204-08:00</updated><title type='text'>takeaways on cap theorem</title><content type='html'>my rough cryptic notes on cap theorem&lt;br /&gt;&lt;br /&gt;cp sacrifices availability&lt;br /&gt;cp -&gt; money, i.e., for stuff that is money related&lt;br /&gt;cp -&gt; for online operation; realtime; returnval&lt;br /&gt;&lt;br /&gt;think synchronous request/response, e.g., an atm money machine should probably not spew money if there is no (network connectivity) availability; also, it tells u right then and there ok/error&lt;br /&gt;&lt;br /&gt;ap sacrifices consistency&lt;br /&gt;ap -&gt; not money, i.e., not for stuff that is money related&lt;br /&gt;ap -&gt; for offline operation; not realtime; no returnval&lt;br /&gt;&lt;br /&gt;think asynchronous queue/pub/sub, e.g., your email client (e.g., outlook, thunderbird) is always 'available' to receive (fire-and-forget) requests to send email&lt;br /&gt;&lt;br /&gt;also, cp -&gt; quorum&lt;br /&gt;&lt;br /&gt;also, should not bother to try to build ca systems (because p is inevitable)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-8914533900596252364?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/8914533900596252364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=8914533900596252364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8914533900596252364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8914533900596252364'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2010/12/takeaways-on-cap-theorm.html' title='takeaways on cap theorem'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-799943458023506090</id><published>2009-11-20T07:28:00.001-08:00</published><updated>2009-11-20T07:28:32.372-08:00</updated><title type='text'>good to know</title><content type='html'>good to know:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; There's a bug in JDK 1.6.0_14 which causes breakpoints not to work.&lt;br /&gt;Check which JDK version you have. 1.6.0_16 is out and allegedly fixes&lt;br /&gt;this bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-799943458023506090?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/799943458023506090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=799943458023506090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/799943458023506090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/799943458023506090'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2009/11/good-to-know.html' title='good to know'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-1884913773675990070</id><published>2009-04-08T18:30:00.000-07:00</published><updated>2009-04-08T18:31:27.696-07:00</updated><title type='text'>http://gosnoozemail.com</title><content type='html'>and another friend just launched a few days ago-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gosnoozemail.com"&gt;http://gosnoozemail.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-1884913773675990070?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/1884913773675990070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=1884913773675990070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1884913773675990070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1884913773675990070'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2009/04/httpgosnoozemailcom.html' title='http://gosnoozemail.com'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-1142687851275986178</id><published>2009-04-08T18:27:00.000-07:00</published><updated>2009-04-08T18:29:05.150-07:00</updated><title type='text'>http://truthrally.blogspot.com</title><content type='html'>FYI a friend of mine is blogging about a bootstrapped startup in california-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://truthrally.blogspot.com"&gt;http://truthrally.blogspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-1142687851275986178?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/1142687851275986178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=1142687851275986178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1142687851275986178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1142687851275986178'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2009/04/httptruthrallyblogspotcom.html' title='http://truthrally.blogspot.com'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-7173344520707815458</id><published>2009-04-08T18:04:00.000-07:00</published><updated>2009-04-08T18:23:34.496-07:00</updated><title type='text'>mysql paging without start limit</title><content type='html'>here is a way to iterate thru a large (possibly changing) dataset without using start/limit-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mail-archive.com/google-appengine@googlegroups.com/msg05973.html"&gt; http://www.mail-archive.com/google-appengine@googlegroups.com/msg05973.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(the same technique can be applied to mysql)&lt;br /&gt;&lt;br /&gt;you can iterate a large (possibly changing) dataset using the above "last" method&lt;br /&gt;&lt;br /&gt;futhermore (a) the above method can be efficient with large datasets with appropriate indicies and (b) only the last result needs to be remembered&lt;br /&gt;&lt;br /&gt;you cannot iterate a changing dataset using a naive "start/limit" implementation&lt;br /&gt;&lt;br /&gt;futhermore (a) there are cases where start/limit can be inefficient with large datasets even  with appropriate indicies and (b) all results need to be remembered to guard for correctness&lt;br /&gt;&lt;br /&gt;bottom line: "start/limit" is the easy/unsafe way to iterate while the above "last" method is the hard/safe way to iterate&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-7173344520707815458?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/7173344520707815458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=7173344520707815458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7173344520707815458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7173344520707815458'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2009/04/mysql-paging-without-start-limit.html' title='mysql paging without start limit'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-5275713217021547061</id><published>2008-07-11T08:21:00.000-07:00</published><updated>2008-07-11T08:22:54.511-07:00</updated><title type='text'>Droid Sans Mono</title><content type='html'>&lt;a href="http://damieng.com/blog/2007/11/14/droid-sans-mono-great-coding-font"&gt;http://damieng.com/blog/2007/11/14/droid-sans-mono-great-coding-font&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-5275713217021547061?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/5275713217021547061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=5275713217021547061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5275713217021547061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5275713217021547061'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/07/droid-sans-mono.html' title='Droid Sans Mono'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-1350992715934094785</id><published>2008-05-31T07:55:00.000-07:00</published><updated>2008-05-31T08:01:48.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fedora java gwt'/><title type='text'>fedora+java6+gwt+debug=annoying</title><content type='html'>Problem&lt;br /&gt;&lt;br /&gt;Sick and tired of the Eclipse debugger breaking here when debugging GWT projects using Java6 on Fedora?&lt;br /&gt;&lt;br /&gt;--- snip ---&lt;br /&gt;Exception in thread "Timer-0" java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:373)&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:127)&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662)&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)&lt;br /&gt;    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)&lt;br /&gt;    at java.util.prefs.XmlSupport.writeDoc(XmlSupport.java:254)&lt;br /&gt;    at java.util.prefs.XmlSupport.exportMap(XmlSupport.java:333)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences$8.run(FileSystemPreferences.java:607)&lt;br /&gt;    at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.writeBackCache(FileSystemPreferences.java:600)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.syncSpiPrivileged(FileSystemPreferences.java:784)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.access$2300(FileSystemPreferences.java:33)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences$13.run(FileSystemPreferences.java:754)&lt;br /&gt;    at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.syncSpi(FileSystemPreferences.java:752)&lt;br /&gt;    at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1317)&lt;br /&gt;    at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1322)&lt;br /&gt;    at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1322)&lt;br /&gt;    at java.util.prefs.AbstractPreferences.sync2(AbstractPreferences.java:1322)&lt;br /&gt;    at java.util.prefs.AbstractPreferences.sync(AbstractPreferences.java:1308)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.sync(FileSystemPreferences.java:731)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.flush(FileSystemPreferences.java:807)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.syncWorld(FileSystemPreferences.java:451)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences.access$1200(FileSystemPreferences.java:33)&lt;br /&gt;    at java.util.prefs.FileSystemPreferences$4.run(FileSystemPreferences.java:419)&lt;br /&gt;    at java.util.TimerThread.mainLoop(Timer.java:512)&lt;br /&gt;    at java.util.TimerThread.run(Timer.java:462)&lt;br /&gt;--- snip ---&lt;br /&gt;&lt;br /&gt;Solution&lt;br /&gt;&lt;br /&gt;In Eclipse, go to Window -&gt; Preferences -&gt; Java -&gt; Debug and *uncheck* "Suspend execution on uncaught exceptions"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-1350992715934094785?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/1350992715934094785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=1350992715934094785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1350992715934094785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1350992715934094785'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/05/fedorajava6gwtdebugannoying.html' title='fedora+java6+gwt+debug=annoying'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-5057956004306851876</id><published>2008-05-31T07:51:00.000-07:00</published><updated>2008-05-31T08:02:22.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt install fedora'/><title type='text'>GWT Install Problem on Fedora</title><content type='html'>Problem&lt;br /&gt;&lt;br /&gt;--- snip ---&lt;br /&gt;** Unable to load Mozilla for hosted mode **&lt;br /&gt;java.lang.UnsatisfiedLinkError: /usr/local/gwt-linux-1.4.62/mozilla-1.7.12/libxpcom.so: libstdc++.so.5: cannot open shared object file: No such file or directory&lt;br /&gt;   at java.lang.ClassLoader$NativeLibrary.load(Native Method)&lt;br /&gt;   at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)&lt;br /&gt;   at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1647)&lt;br /&gt;   at java.lang.Runtime.load0(Runtime.java:770)&lt;br /&gt;   at java.lang.System.load(System.java:1005)&lt;br /&gt;   at com.google.gwt.dev.shell.moz.MozillaInstall.load(MozillaInstall.java:190)&lt;br /&gt;   at com.google.gwt.dev.BootStrapPlatform.go(BootStrapPlatform.java:40)&lt;br /&gt;   at com.google.gwt.dev.GWTShell.main(GWTShell.java:318)&lt;br /&gt;--- snip ---&lt;br /&gt;&lt;br /&gt;Solution&lt;br /&gt;&lt;br /&gt;yum install compat-libstdc++-33&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-5057956004306851876?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/5057956004306851876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=5057956004306851876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5057956004306851876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5057956004306851876'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/05/gwt-install-problem-on-fedora.html' title='GWT Install Problem on Fedora'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-2219500071971494591</id><published>2008-05-08T17:41:00.000-07:00</published><updated>2008-05-08T17:42:34.085-07:00</updated><title type='text'>change your amazon developer forums nickname!</title><content type='html'>FYI You can change your amazon developer forums nickname here:&lt;br /&gt;&lt;a href="http://s1.amazon.com/exec/varzea/account-access/settings/104-1775788-0244713?account-seller=1"&gt;http://s1.amazon.com/exec/varzea/account-access/settings/104-1775788-0244713?account-seller=1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-2219500071971494591?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/2219500071971494591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=2219500071971494591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2219500071971494591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2219500071971494591'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/05/change-your-amazon-developer-forums.html' title='change your amazon developer forums nickname!'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4613977919655695301</id><published>2008-05-08T16:52:00.000-07:00</published><updated>2008-05-08T16:54:23.491-07:00</updated><title type='text'>s3fs r152</title><content type='html'>* r152 (May 8, 2008)&lt;br /&gt;          + uses x-amz-copy-source&lt;br /&gt;                + less uploading, rsync works faster!&lt;br /&gt;          + by popular demand s3fs now sets the "correct" Content-type!&lt;br /&gt;                + when creating files, s3fs uses /etc/mime.types to set the "correct" mime type based on file extension!&lt;br /&gt;          + supports symlinks!&lt;br /&gt;                + rsync works better!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4613977919655695301?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4613977919655695301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4613977919655695301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4613977919655695301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4613977919655695301'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/05/s3fs-r152.html' title='s3fs r152'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4583766134945026202</id><published>2008-04-09T20:53:00.000-07:00</published><updated>2008-04-09T21:14:43.355-07:00</updated><title type='text'>UNIXODBC tidbit...</title><content type='html'>UNIXODBC tidbit...&lt;br /&gt;&lt;br /&gt;In UNIXODBC there are three (3) configurable timeout options:&lt;br /&gt;&lt;br /&gt; * login_timeout&lt;br /&gt; * connection_timeout&lt;br /&gt; * query_timeout&lt;br /&gt;&lt;br /&gt;LOGIN_TIMEOUT in the UNIXODBC world is MYSQL_OPT_CONNECT_TIMEOUT in the Mysql world.&lt;br /&gt;&lt;br /&gt;CONNECTION_TIMEOUT in the UNIXODBC world is MYSQL_OPT_READ_TIMEOUT and MYSQL_OPT_WRITE_TIMEOUT in the Mysql world.&lt;br /&gt;&lt;br /&gt;QUERY_TIMEOUT in the UNIXODBC world has to do with canceling a query if the time it takes to execute the query exceeds the timeout.&lt;br /&gt;&lt;br /&gt;Here is the kicker: CONNECTION_TIMEOUT is *not* implemented in MYSQL Connector/ODBC, i.e., CONNECTION_TIMEOUT is *not* mapped to MYSQL_OPT_READ_TIMEOUT and/or MYSQL_OPT_WRITE_TIMEOUT. I believe it is mapped to nothing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4583766134945026202?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4583766134945026202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4583766134945026202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4583766134945026202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4583766134945026202'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/04/unixodbc-tidbit.html' title='UNIXODBC tidbit...'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-7802119972486767618</id><published>2008-04-01T17:43:00.000-07:00</published><updated>2008-04-01T17:45:51.878-07:00</updated><title type='text'>FYI s3fs r130</title><content type='html'>FYI s3fs r130&lt;br /&gt;&lt;br /&gt; * some logging to /var/log/messages (e.g., try "tail -f /var/log/messages")&lt;br /&gt; * set file/folder ownership to whatever getuid()/getgid(0 returns&lt;br /&gt; * fixed that nasty local file cache bug; cp, rsync and friends should now work fine w/local file cache enabled!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-7802119972486767618?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/7802119972486767618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=7802119972486767618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7802119972486767618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/7802119972486767618'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/04/fyi-s3fs-r130.html' title='FYI s3fs r130'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-3013622362625020404</id><published>2008-02-24T13:06:00.000-08:00</published><updated>2008-04-15T07:42:03.638-07:00</updated><title type='text'>building s3fs is a wee little bit more mac-friendly</title><content type='html'>building s3fs is a wee little bit more mac-friendly&lt;br /&gt;&lt;br /&gt;the steps for building on mac are something like this:&lt;br /&gt;&lt;br /&gt;* install Xcode&lt;br /&gt;* install MacFUSE&lt;br /&gt;* install macports&lt;br /&gt;* sudo port install curl&lt;br /&gt;* sudo port install libxml2&lt;br /&gt;* sudo port install openssl&lt;br /&gt;* sudo port install subversion&lt;br /&gt;* svn checkout&lt;br /&gt;* export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&lt;br /&gt;* make!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-3013622362625020404?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/3013622362625020404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=3013622362625020404' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/3013622362625020404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/3013622362625020404'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/02/building-s3fs-is-wee-little-bit-more.html' title='building s3fs is a wee little bit more mac-friendly'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-2256935032840256258</id><published>2008-02-23T07:38:00.000-08:00</published><updated>2008-02-23T07:39:50.065-08:00</updated><title type='text'>s3fs: parallel-ized readdir()</title><content type='html'>directory listings in s3fs are now a lot faster: I've parallel-ized getattr requests in readdir()&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-2256935032840256258?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/2256935032840256258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=2256935032840256258' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2256935032840256258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/2256935032840256258'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/02/s3fs-parallel-ized-readdir.html' title='s3fs: parallel-ized readdir()'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-471912257603605672</id><published>2008-02-17T21:33:00.000-08:00</published><updated>2008-02-17T21:35:33.629-08:00</updated><title type='text'>new release of s3fs! now supports rsync!</title><content type='html'>New release of s3fs! Now supports rsync by virtue of "x-amz-meta-mode" and "x-amz-meta-mtime" custom meta headers!&lt;br /&gt;&lt;br /&gt;Download it at http://code.google.com/p/s3fs svn 43&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-471912257603605672?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/471912257603605672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=471912257603605672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/471912257603605672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/471912257603605672'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/02/new-release-of-s3fs-now-supports-rsync.html' title='new release of s3fs! now supports rsync!'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-1476033181233904713</id><published>2008-02-06T15:08:00.000-08:00</published><updated>2008-02-06T15:15:14.013-08:00</updated><title type='text'>new amazon sqs pricing</title><content type='html'>$0.01 per 10,000 requests&lt;br /&gt;&lt;br /&gt;so a worker polling SQS once per second would rack up $2.60 per month in SQS fees... not too bad!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-1476033181233904713?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/1476033181233904713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=1476033181233904713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1476033181233904713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1476033181233904713'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/02/new-amazon-sqs-pricing.html' title='new amazon sqs pricing'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-418790164427016712</id><published>2008-01-22T14:19:00.000-08:00</published><updated>2008-01-22T14:25:21.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lsb'/><category scheme='http://www.blogger.com/atom/ns#' term='s3fs'/><title type='text'>No luck with s3fs and lsb-sdk...</title><content type='html'>I tried compiling s3fs via lsb-sdk (linux standard base SDK) on Fedora FC5... it compiled, linked and ran, sorta. I could get directories via a mounted s3 bucket, however, when attempting to, say, "cat" a text file, s3fs would segfault because read() was given a null "fi" parameter...&lt;br /&gt;&lt;br /&gt;Compiling s3fs on FC5 *outside* of lsb-sdk and s3fs ran flawlessly. Furthermore, copying the s3fs binary that was built under lsb-sdk on FC5 to a Fedora 7 system: when attempting to run that s3fs binary on Fedora7 gave a "cannot find "libcurl.so.3". Not exactly sure what the "LSB" way of resolving this is...&lt;br /&gt;&lt;br /&gt;Suggestions welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-418790164427016712?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/418790164427016712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=418790164427016712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/418790164427016712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/418790164427016712'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/01/no-luck-with-s3fs-and-lsb-sdk.html' title='No luck with s3fs and lsb-sdk...'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-1007180308996230592</id><published>2008-01-21T16:02:00.000-08:00</published><updated>2008-01-21T16:16:23.910-08:00</updated><title type='text'>installing lsb-sdk clobbers /root</title><content type='html'>This is fedora5... Incredibly, running lsb-sdk's install.sh ends up clobbering the ownership / mode of "/root" to this:&lt;br /&gt;&lt;br /&gt;drwxrwxr-x  6 1001 users  4096 Apr  3  2007 root&lt;br /&gt;&lt;br /&gt;This was near-fatal for me on an Amazon EC2 instance (with ssh public/private key authentication) as it did this without telling me and I was no longer able to ssh to the instance... sshd was "suddenly" complaining about the ownership/mode of "/root":&lt;br /&gt;&lt;br /&gt;After I was able to restore ssh to my ec2 instance (don't ask) I noticed this gem in /var/log/secure:&lt;br /&gt;&lt;br /&gt;Jan 21 18:00:00 domU-xx-xx-xx-xx-xx-xx sshd[9693]: Authentication refused: bad ownership or modes for directory /root&lt;br /&gt;&lt;br /&gt;So, just a warning when installing lsb-sdk, best to restore /root with a "chmod 750 /root" and a "chown root:root /root". Ironic how lsb-sdk of all things does this! =)&lt;br /&gt;&lt;br /&gt;Update: did *not* notice this behavior on fedora7 though...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-1007180308996230592?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/1007180308996230592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=1007180308996230592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1007180308996230592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/1007180308996230592'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/01/installing-lsb-sdk-clobbers-root.html' title='installing lsb-sdk clobbers /root'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-8888926719981160483</id><published>2008-01-16T09:19:00.000-08:00</published><updated>2008-01-16T09:24:00.884-08:00</updated><title type='text'>linux standard base</title><content type='html'>Got s3fs compiling in linux standard base.&lt;br /&gt;&lt;br /&gt;* one trick was to use LSBCC_SHAREDLIBS for libfuse, libcurl and libxml&lt;br /&gt;* another trick was to use -Wl,--allow-shlib-undefined&lt;br /&gt;&lt;br /&gt;Hopefully I'll be able to post a binary that runs on most linux distros...!&lt;br /&gt;&lt;br /&gt;Reference: http://www.entrepreneur.com/tradejournals/article/133183822_1.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-8888926719981160483?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/8888926719981160483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=8888926719981160483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8888926719981160483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8888926719981160483'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2008/01/linux-standard-base.html' title='linux standard base'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-5935141784666913238</id><published>2007-12-17T13:51:00.000-08:00</published><updated>2007-12-17T13:55:58.292-08:00</updated><title type='text'>vncviewer and Amazon EC2</title><content type='html'>vncviewer works a heck of a lot better on Amazon EC2 instances compared to remote Xwindows. Here's how I got it running:&lt;br /&gt;&lt;br /&gt;yum install vncserver&lt;br /&gt;yum groupinstall "X Window System"&lt;br /&gt;&lt;br /&gt;As well, you'll need to use ec2-authorize to open up port 5901.&lt;br /&gt;&lt;br /&gt;Once that's done (a) run "vncserver" on your Amazon EC2 instance and (b) run vncviewer on a client!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-5935141784666913238?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/5935141784666913238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=5935141784666913238' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5935141784666913238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/5935141784666913238'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/12/vncviewer-and-amazon-ec2.html' title='vncviewer and Amazon EC2'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-8455806607986499726</id><published>2007-12-15T14:47:00.000-08:00</published><updated>2007-12-15T14:52:18.370-08:00</updated><title type='text'>s3fs</title><content type='html'>FYI I've posted a new version of s3fs (svn version 28). It now uses a local file cache (~/.s3fs) for increased performance. As well it, it now retries on 500 server errors, making it a wee little bit more robust.&lt;br /&gt;&lt;br /&gt;These changes also lay down the foundation for supporting modified-time and chmod (e.g., tar and rsync).&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/s3fs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-8455806607986499726?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/8455806607986499726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=8455806607986499726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8455806607986499726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/8455806607986499726'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/12/s3fs.html' title='s3fs'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-949991057100189998</id><published>2007-11-26T11:37:00.000-08:00</published><updated>2007-11-26T11:38:46.102-08:00</updated><title type='text'>Google Android=J2ME tutorials</title><content type='html'>Is it just me or has there been a flurry of J2ME tutorials ever since Google Android was announced?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-949991057100189998?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/949991057100189998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=949991057100189998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/949991057100189998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/949991057100189998'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/11/google-androidj2me-tutorials.html' title='Google Android=J2ME tutorials'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-836533436202301872</id><published>2007-11-07T09:11:00.000-08:00</published><updated>2007-11-07T09:19:59.375-08:00</updated><title type='text'>Xwindows on Amazon EC2</title><content type='html'>I setup Xwindows on an amazon ec2 instance today...&lt;br /&gt;&lt;br /&gt;I started with (a) amazon's fc4 image, (b) yum upgrade to fc5, (c) yum groupinstall "GNOME Desktop Environment". That whole process takes about an hour or so.&lt;br /&gt;&lt;br /&gt;Then, from my local desktop I tried "ssh -X my.amazon.instance gnome-terminal" but that did not work. Using ssh -v showed that there was no remote xauth (remote on the ec2 instance, that is).&lt;br /&gt;&lt;br /&gt;So, on the ec2 instance, "yum install xorg-x11-xauth" did the trick. I was able to start gnome-terminal on a remote ec2 instance and view it on my local desktop.&lt;br /&gt;&lt;br /&gt;Performance was bad though: pretty much unusable, probably due to network latency.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-836533436202301872?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/836533436202301872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=836533436202301872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/836533436202301872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/836533436202301872'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/11/xwindows-on-amazon-ec2.html' title='Xwindows on Amazon EC2'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4387317655294458794</id><published>2007-10-27T10:23:00.001-07:00</published><updated>2011-02-15T07:41:22.623-08:00</updated><title type='text'>ssh-installkeys</title><content type='html'>&lt;strike&gt;very handy: http://www.catb.org/~esr/ssh-installkeys&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;obsolete: use /usr/bin/ssh-copy-id&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4387317655294458794?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4387317655294458794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4387317655294458794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4387317655294458794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4387317655294458794'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/10/ssh-installkeys.html' title='ssh-installkeys'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-4771963504229415433</id><published>2007-10-14T08:39:00.000-07:00</published><updated>2007-10-14T09:20:21.827-07:00</updated><title type='text'>s3fs rsync and mtime</title><content type='html'>Thinking about how to support rsync with s3fs, e.g., changing modification timestamps, etc...&lt;br /&gt;&lt;br /&gt;You can provide custom headers (x-amz) at upload time but I see no way to change headers without re-uploading the entire object.&lt;br /&gt;&lt;br /&gt;My thought is to go a "proprietary" way: include an additional s3 object per s3 object to hold name/value pairs.&lt;br /&gt;&lt;br /&gt;E.g., If I have the object "/mybucket/f7-i386.iso" then there could be another objected called "/mybucket/f7-i386.iso#meta" whose contents can be a simple list of name/value pairs, e.g., "mtime=2005-12-31 23:59:59.9" or something like that.&lt;br /&gt;&lt;br /&gt;s3fs would know to look for and interpret/manage those somewhat-non-critical #meta files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-4771963504229415433?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/4771963504229415433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=4771963504229415433' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4771963504229415433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/4771963504229415433'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/10/s3fs-rsync-and-mtime.html' title='s3fs rsync and mtime'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9310504.post-3734584276752265626</id><published>2007-10-14T07:38:00.000-07:00</published><updated>2007-10-14T07:43:28.174-07:00</updated><title type='text'>s3fs</title><content type='html'>FYI I've posted "s3fs" at &lt;a href="http://code.google.com/p/s3fs"&gt;http://code.google.com/p/s3fs&lt;/a&gt;, a FUSE based file system backed by Amazon S3. It stores files "natively" in S3 (and as such has the same 5GB per file limit) so that you can access the same files with other S3 clients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9310504-3734584276752265626?l=rrizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rrizun.blogspot.com/feeds/3734584276752265626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9310504&amp;postID=3734584276752265626' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/3734584276752265626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9310504/posts/default/3734584276752265626'/><link rel='alternate' type='text/html' href='http://rrizun.blogspot.com/2007/10/s3fs.html' title='s3fs'/><author><name>Randy Rizun</name><uri>http://www.blogger.com/profile/16328414365290326449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
