text:
Entries in literature (2)
Literary Canons Revisited. An Evangelistic Investigation of the Future of the Literary Canon: Network Society and Amazon.com, Hegemony and Counterhegemony, and the Future.
[This paper has been written for a university course in literary theory in 2008.]
If one asked a literary critic today what they thought of the best seller "XYZ", chances are that they would tell one that it is a momentary hype that will never last beyond the end of the literary season. It could come as a surprise then that the best sellers stays on the top-seller list for longer. The critic, however, will not change their mind – because they know best. And this is still how popular fiction is judged – book reviews are written by professionals with degrees in literary history and theory whose job is to read with the "passion" of a cynic and with the "liberalism" of a critic. With the wide spread of Web 2.0 technologies the critical world is changing. This paper is an evangelistic prediction of the future canonization process, an outlook to the years when Web 2.0 technologies will be utilized to their fullest, extending hand to the next generation of social networks and network societies. It is a contention of this paper that the currently established notion of a canon, canonization and canonizers imposes a hegemonic grip on literary values and aesthetic judgements. The power of social media and networks is a counterhegemonic strike with the availability of technology not necessarily targeted at imposing a new mode for canonization but simply suggesting that the Canon is important only to the literary historian or theorist (in the same way as a literary history is of importance only to them; Johnstone, 1992).
To grasp the importance of canonization as a process and its implications for the aesthetic experience of the reader, it is essential to: 1) outline what is being understood by "canon" and to summarize the current process of canonization; 2) analyze the hierarchy in today's literary reality with respect to the canonization process; 3) examine the current technological advances and the structure of the network societies and to predict their future implications to the process of canonization; and 4) evaluate the prediction for this future outcome and its longevity.
1. Harold Bloom, The Canon and The Literary … "Someone" – Briefly
The idea of the canon as a collection of books with artistic merit is an indication for the need to make a selection of all the available "things" to read. Bloom is perhaps mostly associated with the idea of the Western Canon (Bloom, 1994) and idea of a literary canon as a whole. Pointing out that it is impossible for anyone today to read all that is available, it becomes necessary to establish certain criteria for the selection. Although there may well be personal factors, there is, according to Bloom, an overarching reason for the reading of one work of literary art over another by everyone. The importance of the canon, Bloom underlines, is not related to the religious meaning of "canon" but rather to the literary Art of Memory. Taking a bit of an elitist stand, Blook argues that "aesthetic value can be recognized or experienced, but it cannot be conveyed to those who are incapable of grasping its sensations and perceptions" (p. 17). As such, it relies on aesthetics because "I urge a stubborn resistance whose single aim is to preserve poetry as fully and purely as possible" (p. 18).
Following Blooms ominous predictions, this paper will address some of the questions that the Canon poses:
The Canon […] has become a choice among texts struggling with one another for survival, whether you interpret the choice as being made by dominant social groups, institutions of education, traditions of criticism, or, as I do, by late-coming authors who feel themselves chosen by particular ancestral figures. Some recent partisans of what regards itself as academic radicalism go so far as to suggest that works join the Canon because of successful advertising and propaganda campaigns. The compeers of these skeptics sometimes go farther and question even Shakespeare, whose eminence seems to them something of an imposition. If you worship the composite god of historical process, you are fated to deny Shakespeare his palpable aesthetic supremacy, the really scandalous originality of his plays. (p. 20)
At this point, the paper will stop looking into the past. The future forms of canonization and concepts will be covered in greater detail to find out if literary canons as known today would become a second case of literary history (see Johnston, 1992).
2. Networks and the Spread of Information – the Power of the Masses
The power of technology today (although reaching only a portion of the available population) is what provides the space for innovation. It is not a question of what a particular innovation was innovated for but what the human creativity can innovate further with this innovation. It is the contention of this paper that the greater networks and information connectivity in the social space, the greater the power of the masses for transmission and creation of information – be it about the political, economic, social, cultural, or any other world.
The innovations in terms of technologies can be summarized in several core processes: 1)the innovations that allow the spread of accessibility to internet and online buying, 2)the innovations that smart marketing trying to sell did not foresee, and most importantly 3)innovations based on the development of creative solutions for establishing connections between users. Each one needs elaboration.
With the invention of the internet for the purpose of spreading information in a closed environment, the idea of selling was not on the forefront. As soon as the spread of the "net" in the everyday life, however, the comfort and potential of advertising and commerce was established. Driving the development of secure online payments as alternatives to TV infomercial home shopping channels and order-by-catalogue, the industry flourished offering all kinds of goods and services (the improvement in postal services further facilitated the process of integration of online commerce). The ultimate goal of technological communication and information development is, according to Castells (2007), "the battle over the minds of people" (p. 238). What Castells, however, clarifies further is that this battle is no longer just between the state (an institution) which is traditionally the main site of power but now includes cultural industries and business media, and, importantly, the individual/the citizen. In this battle, the spread of information is what makes commerce, public ratings and the process of canonization most statistically objective.
The mass media system has been the main channel of communication between the political system and its citizens (Castells, 2007). Radio, TV and the press have dominated the exchange of information and the formation of information shaping the face of the market – i.e. holding the power (although Castells also admits that there are individual actors that exercise power over the media). What has been observed with the development and spread of the internet, however, is a new type of an audience. The concept of an audience has change from that of a passive audience to an active now where the media have an internal control but the audience is gaining more and more power by the choice they have – the audience decides about the source of information and this is why the media has to win the audience.
In summary, Castells argues that "the media are not the holders of power, but they constitute by and large the space where power is decided" (p. 242). Exploring the new network, he discusses the distribution of the internet, mobile communication, digital media and a number of social media tools that lead to the development of horizontal networks of information spread. The network society has the strength of being driven by people, having the information created and delivered by the audiences, transforming the user into a provider of information. Although an old technology, first put to use in 1969, the internet is reaching more and more users which now exceeds 1 billion (Pew Research Center for the People and the Press, 2006). The systems of connecting people are not simply through the interface of the computer today but include short messages (SMS) and multimedia messages (MMS) via cell phones; access to blogs, vlogs, and podcasts on mobile devices; file sharing and peer-to-peer (p2p) networks and other social media. Thanks to the availability of these communications, individual communication acquires a personal character. This process has been coined "self-communication" (see Castells, 2007) to refer to the ability of an individual user to collect information relevant to them and to spread this information (in the same way as a big media network would) and to target its specific audience.
It is perfectly valid assumption, however, that this non-media information is not as precise in its content and not as reliable as the information coming from proof sources. The social media information transfer, however, relies (similar to the model Wikipedia employs) on the self-correction powers of the community: unreliable information is labeled as such, misguiding sources are taken with the grain of salt and plain wrong information is removed within seconds of its availability (ruining the reputation of the person who posts it) – quality control. The instantaneous distribution of information on the internet often relies on a push type of technology, RSS, which allows for a user to subscribe and have the information "pushed" to them as soon as it is posted online. Thus, even if the information is posted by mistake, and pulled immediately, it still reaches the users. And the power of the online community is its ability to aggregate information and sieve out questionable bits.
This new surge of alternative means of communication (which are also cheaper) necessitates changes in the way media networks distribute information. If people are able to sort out their own bits of important information and to aggregate the information to extract the essential bits (even if coming from contradictory sources), it is necessary to change the model of communication and, perhaps even more importantly, the values and norms attached to the bits of information and to the concept of reliability. It appears, however, that the new model will necessitate a shift from simply "availability" to "service". An illustration of the need for a transition are a couple of recent iPhone applications – one of them written by an independent programmer and one by a retailer who is looking into new ways of reaching the clients.
The app SnapTell is an example of a memo/note-taking application giving the user the opportunity to take a picture of the cover of a book. The picture is then send to the servers of the company and is analyzed by software that (in less than 30 seconds) sends back the information to the user with the name of the book, the online price at various locations, an automatic search on google for prices and review, wikipedia articles, ebay search and others (see Appendix 1 for a screenshot). This immediate connection to online sources of information opens new doors for a buyer not only because of the potentially better price but also because of the opportunity to read user reviews, editorial reviews, author information, and many other pieces of information. This allows a user to decide before purchasing if it is worth it based on the reviews. The application that Amazon.com developed (the application is currently available only to US users) extends these features by making it possible to take a picture of any object and if not in their database, the user is notified as soon as the item becomes available. Other mobile platforms (the Android mobile phone operating system developed by Google) allow for scanning of barcodes (thanks to in-built cameras) and software reads the barcodes to the similar results.
The importance of such progress lies in the ability of the user to sieve out information better. The availability of information is measurable in terms of seconds and not in terms of years. On the longer run, this can be detrimental to physical stores which rely on the client's lack of information about the competition (both in terms of price and, more importantly, in terms of quality and choice). Fundamentally, a remedy to the demise of the brick-and-mortar would be change of focus of what is being offered. Commercially, a bookstore may offer the opportunity to buy a book. However, unless one is looking for a specific book in mind, a buyer would rely on several heuristics: 1) choosing a book based on familiarity with the author's other works, 2) choosing a book based on a recommendation (from a friend, relative, a book seller, a literary critic, etc.), or 3) choosing a book at random (which is further influenced by the positioning of the book on the shelves, cover design, price point, and others). These heuristics are all replaceable by the more efficient (and often more economic) online shopping approach. Thus, social networking, mass self-information and the new shopping experiences push the "old" way of shopping to modification, necessitating focus on service and on one-to-one interaction (at an affordable price): the power is in the masses.
3. Today's Book Review and Canonization
The process of literature canonization can be particularly influenced by the empowerment of the masses. The essence of the canon is in its aesthetic appeal and value. Through the power of the new media and the network society, aggregation and mass-evaluation of literary works is possible. Specifically, a platform for this aggregation and public evaluation is provided through the multiple evaluations which are aggregated based on a common aesthetic understanding.
There are numerous advantages of the move towards internet in relation to works of literature. Banks (2004) points out as one of the most important factors is the searchability online. Many factors, among others fear of piracy, have contributed towards the lagging behind of making books available online despite the urge that has been observed in newspaper- and magazine-publishing, where online publications have become quite common. There is a trend, however, moving away from this reality (Google Book Search is currently driving this industry). On the practical level, this allows users to have access to a number of pages or even chapters and to evaluate the book before purchasing. Amazon.com launched a service on October 23, 2003 (Banks, 2004) for searching the entire text of books as well as "Search Inside the Book" feature. Revealing what is hidden between the cover combined with the opportunity for users to make decisions based on recommendations from other readers makes the process of buying much more focused. An indication of the facilitation of the process of selection of reading material is the reported increase by 9% in the number of sales for books with "Search Inside the Book" feature in the first year (Banks, 2004).
Arguably, this does not guarantee that the literary work is necessarily of high aesthetic quality and worthy of canonization. Linkov and colleagues (Linkov, LaPorte, Lovalekar, & Dodani, 2005) present the case of peer review in the medical sciences and the limitations of that process and propose that Amazon.com's model is an alternative solution:
In Amazon.com, reviews have been divided into following categories: editorial reviewers (those associated with Amazon.com), customer, and spotlight reviewers. A reviewer becomes a spotlight reviewer by a form of popularity test. At the end of each posted review, readers are asked to vote, "Was this content helpful to you?" Reviewers who receive a sufficient number of "yes" votes are promoted to the category of spotlight reviewer and their reviews are given prominence. Thus, Amazon.com is reinforcing reviewers to provide helpful information in their feedback. Whereas traditional peer review process is only assessing the quality of material, Amazon.com system makes inferences about the quality of both materials and the reviewers themselves. We have suggested that Amazon.com system could be used in the area of quality control of materials on the Internet, offering an attractive alternative to peer review mechanisms. (p. 876)
The authors further quote the estimated cost of traditional peer review of an article between US$400 and US$1,600. Alternatively, the Amazon.com model comes for free and in fact is part of the purchasing process.
A problem associated with the canonization process based on recommendations of what others have liked and purchased and what is being recommended to reader is the inflation which may occur (is occurring?) because of these two factors. If a reader is recommended a book based on what they have liked in the past and what others (who have liked the same things in the past) have purchased (and liked now), it is much more likely that the reader will like the recommendation and leave a positive review which will be then recommended to someone else – a process of inflation of the positivism in reviews. This cycle of perpetual improvement of the recommendations has the potential to create various niches and to lead to an exceptionally customized and narrowed down canon. This transforms the model of the reviews themselves from not merely comparatively quantitative anchors between positive and negative aspects but comparatively qualitative anchors between one positive aspect and another positive aspect (defying to a certain extend the functionality and existence of negative reviews).
Perhaps as a bit of an alleviating remedy, one can argue that the system proposed by Amazon.com is taking care of some aspects of this low-level canonization. The argument is that although any book buyer can leave a review, not necessarily every reviewer will take their time to do that and each review is further reviewer by numerous potential buyers who can rate the usefulness of the reviews themselves. This framework encourages reviewers to be as precise and informative as possible, to provide objective judgements and to contribute to the community because of the contribution itself. The lack of professional incentive is perhaps an argument for the advantage of this system: a critical evaluation is done not for the sake of evaluation but for the sake of helping someone choose; not for the sake of compiling a list for posterity based on singular aesthetics but for the sake of a buyer here and now (one can, of course, argue that this commercial mindset is not the most ideal framework for aesthetic judgements).
There is one big problem associated with this narrowed down selection of positivism. Joanne Kaufman (2008) very recently addressed this issues in a rant review over the lack of high-minded ideas in book groups. She describes the case of a woman who is invited to join a book club only to find out that it would be difficult for her to make the members look beyond "Oprah Winfrey's picks". Her interest in the literary classics and the lack of such in her co-members could be a glimpse into the future of literary canonization. Based on recommendations and online reviews, the inability to sieve through intellectually and aesthetically superior works of literature may cause degradation of the quality associated with the canon.
In this context, it is important to look into the question: is the canon based on popular aesthetics or on intellectually superior quality? If the average, aggregated evaluation of aesthetic understanding of the popular masses is what determines the canon, then basic statistics would be enough to determine it. If, however, the canon needs to be based on intellectually superior qualities, then there would be no guarantee that the messages in the canonized literary works will transcend the pages to the minds of the average readers – which would, to a large extend, defy the idea of a canon as "something everyone should read". Is the canon necessary for educational purposes or for collective memory? Is it for ideological information-transmission, or for propaganda empowerment (empowerment of the powerful or empowerment of the weak?)? Intellectual pull vs. intellectual suppression!
4. Counterhegemonies and other Hegemonies
Discussions about the power of institutions and a critique towards that power have been part of the art-theory discourse for almost a century with the critical analysis by Duchamps of the institutional approach to the label "art" for anything that is put in the right context (i.e. that of an art museum). The hegemony established by this institutional philosophy is in parallel with the current form of canonization: the critique of literature suggests that a work of art, a great canon, an aesthetically pleasing work of literary art is one that the critics have christened.
The power of Amazon.com to monopolize the market and with this the source of rating systems can be particularly influential in the canonization process. The availability of customer control over what is "good" and what is not has the potential to transform the model of canonization. If the canon has been determined by literary critics before, based on the hegemonic dominance of the power to say "this is an aesthetically good book and should be read", this does not need be the case any longer. Now the customer has the power to decide what is good and what is not – the counterhegemony is the movement away from the job of the literary critic.
There is a question associated with this situation, however: is it the case that thanks to the availability of networks and the platform for the mass-canonization we have a network-canonization today (and not before) or is the network-canonization what has been going on along with the canonization from the critics all along (with the exception that only the critics had strong enough a voice to be heard in the wider world)? For example, Shakespeare's work has been canonized and it still is read and bought by a large number of people. Is this popularity of Shakespeare's works due to the fact that the works have been canonized by literary scholars or is it because it is appreciated by the vast majority of readers? In either of the two cases, a hegemonic framework is more likely to explain this popularity rather than a counterhegemonic framework (which would read along the lines of non-conformism and avoidance to read Shakespeare). What is interesting about the case of Shakespeare is how the new model is reflected.
Following a somewhat unplanned process of approaching the search for "Shakespeare" on Amazon.com as a casual buyer of his work (i.e. someone who does not look for a specific edition, or a specific work), a user lands (as of 14th Dec. 2008, 12:29 am Central European Time) on an unabridged deluxe leather-bound edition of Shakespeare's complete works. The number of available reviews is not extremely big (only 65) considering the publication date of 1990) and the ratings are not overwhelmingly high with only half being as high as 5 stars (31 reviews with 5 stars, 13 reviews with 4 stars, 5 reviews with 3 stars, 6 reviews with 2 stars and 10 reviews with 1 star). These results, however, seem to be explained with the first review itself submitted by Brian Kendig:
I am not going to comment as so many have on the quality of the content of this book. When dealing with a writer like Shakespeare, it is unnecessary to critique his writing, because nobody would be looking at his Complete Works if they didn't know if they liked his writing. However, I will try to give opinions that may help others decide whether or not to buy this volue of Shakespeare as opposed to another collection.
The reviewer (full review is available in Appendix 2) provides several points in his review that have nothing to do with the actual text (the binding, the thickness of the paper and the marginalia) and addresses only 1 aspect that is related to the text but has to do with the editorial information rather than with the literary work itself (according to the reviewer, there is no information about which of the conflicting manuscripts of King Lear has been used in this edition).
The discussion around Shakespeare has been addressed by Bloom himself (1994) as an important determinant of what constitutes a canonical work and how, perhaps, the question of the public vs. critics' contribution to its popularity can be disentangled:
If it is arbitrary that Shakespeare centers the Canon, then [the School of Resentment] need to show why the dominant social class selected him rather than, say, Ben Jonson, for that arbitrary role. Or if history and not the ruling circles exalted Shakespeare, what was it in Shakespeare that so captivated the mighty Demiurge, economic and social history? Clearly this line of inquiry begins to border on the fantastic: how much simpler to admit that there is a qualitative difference, a difference in kind, between Shakespeare and every other writer, even Chaucer, even Tolstoy, or whoever. Originality is the great scandal that resentment cannot accommodate, and Shakespeare remains the most original writer we will ever know. (p. 25)
5. Conclusion
This paper looked into several aspects of canonization of literary works: 1) the old way of canonization and 2) the criteria behind such a selection as outlined by Bloom (and as still relevant for the future), 3) the hierarchy of the literary canonizers of the past (the hegemonic grip of the literary critic) and 4) the future development of empowerment of the network society. Canonization refers to the evaluation of the aesthetic qualities of a literary creation and its proclamation as educationally viable and worthy of reading entity. It is not a question of the artist's background or their political, ideological or ethnic background but rather the aesthetic excellence and value of their work – this Bloom emphasizes explicitly and repeatedly.
Several questions come out from such an outlined: is it necessary (and possible) for a canonized literary fiction to remain in the canon forever and if not forever, for how long does it remain there; who are the canonizers and why are they worthy of such a function; and how is this going to look in the future when the network society takes a firmer grip of its own needs?
The first question is to remain unanswered (indefinitely?). The remaining questions, however, can be approached from the angle of literary theory, mass-media communication and a bit of evangelism. This paper outlined the hierarchy in which the top is occupied by the canonizer – the one that tells a reader what is good to read. If this approach is parallel to the institutional approach in art history, it will be difficult (if not impossible) to defends its future theoretically. A more pragmatic solution would be a simple analysis of the acceptance of such a framework.
It has been summarized in this paper how this framework is about to change. The availability of certain technologies allows for a new approach to canonization centered around connectivity. In the past, it was common to go to the bookstore and browse through the available titled. One used to search for a book by the author (if one knew something of them already), or maybe based on a review one has read in the paper, or following the "new" list, or even listening to a recommendation of a friend. The narrow circle of this social area of recommendations, marketing and elitists, although still centered around aesthetic values, is rather flat and uni-directional.
With the development of online resources, the users have much richer access to what is being published. Furthermore, it is not simply the fact that the readers now have bookshops with bigger variety of books than any other library of physical bookstore, but the user also has access to reviews, second-hand options and online previews. The online platforms gives the chance to anyone to be an equal partner in the evaluation for relevance of any literary work, transforming the average reader (with a bit of enthusiasm) in a literary critic. The power of the aesthetic judgement is shifted to the hands of the daily purchaser/the casual reader reinventing the hierarchy of canonization into a flattened horizontal circular structure.
As with any model, this also has its limitations. For one, a model based purely on recommendations (which are calculated based on the positive ratings, past purchasing history and liking of a particular book) is likely to be biased towards the positive extreme. Qualitatively, however, this issue is perhaps taken care of when, idealistically, the review process will no longer be about "good" and "bad" but about "good for…" and "good for …". This positivism is still rooted in the aesthetic judgement – the collective aesthetic judgement – opening niches and closing highways. But just as with a bottle-neck – a movement in a niche is much more vigorous and charged than aimless wandering in a field of corn. In the longer run, what one needs be concerned with is, as Bloom himself points out, individual rather than societal aesthetics.
Banks, M. A. (2004). Amazon.com opens the books. Online, March-April. 30-33.
Bloom, H. (1994). The Western Canon: The books and school of the ages. FL, USA: Harcourt Brace & Company.
Castells, M. (2007). Communication, power, and counter-power in the network society. International Journal of Communication, 1, 238-266.
Johnstone, R. (1992). The impossible genre: Reading comprehensive literary history. PMLA, 107, 26-37.
Kaufman, J. (2008). Fought over any good books lately? The New York Times, December 7. Retrieved Dec. 8th, 2008 from <http://www.nytimes.com/2008/12/07/fashion/07clubs.html>
Linkov, F., LaPorte, R., Lovalekar, M., & Dodani, S. (2005). Web quality control for lectures: Supercourse and Amazon.com. Croatian Medical Journal, 46, 875-878.
Pew Research Center for the People and the Press (2006). Maturing Internet news audience – broader than deeper: Online papers modestly boost newspaper readership. Pew Research Center Biennial News Consumption Survey. Retrieved Dec. 4th, 2008 from <http://people-press.org/reports/display.php3?ReportID=282>
Appendix 1
After taking a picture of the cover of the book, it takes 7 seconds to get the result:
The user is given the option to purchase the book online from several platforms:
And furthermore, a user is able to share the findings of this book with other people (i.e. make a recommendation):
Appendix 2:
Full review submitted by Brian Kendig (California) on January 7, 2000.
I am not going to comment as so many have on the quality of the content of this book. When dealing with a writer like Shakespeare, it is unnecessary to critique his writing, because nobody would be looking at his Complete Works if they didn't know if they liked his writing. However, I will try to give opinions that may help others decide whether or not to buy this volume of Shakespeare as opposed to another collection.
The binding, as some have said, is not of the highest quality, it seems. My copy is completely new (as evidenced by the "gilding" on the pages still sticking in places), yet there are significant creases where the book opens.
The thickness of the paper, which some have claimed is lacking, to me seems quite adequate, especially for a tome of this magnitude. I have recently been using extensively The Norton Anthology of American Literature, whose pages are as thin as tissue paper, so my basis of comparison may be off.
The text itself claims to be unabridged. However, for texts such as King Lear, where at least two conflicting manuscripts exist, the editors give no information as to what choices they themselves made regarding the text. Text that in other editions is noted as having been adjusted by editors is in this edition laid out as truth, with no indication whatsoever. If you are interested in this sort of thing, I would recommend the individual plays published by The New Folger Library, which have excellent editorial markings.
Another problem, in my opinion, is marginalia. This volume contains none, which makes it tremendously difficult if one intends to use this book as reading. Shakespeare is difficult reading even with textual notes, and without borders on impossibility. I'm not sure how easy it is to include extensive footnotes in an anthology like this, but little things like the accents to show when the stress in certain words (e.g. obliged) falls on the last syllable would be nice. For the individual plays with great notes, again I recommend the Folger Library editions.
I would add that the things I have critiqued here are not all things that might matter to another reader. I present them as my feelings, so take with a grain of salt.


text:
Notes from the Manager
It looks like there will be two more updates in this arc, but there will be three updates next week. (One of them's kind of long, so I need a little extra time to finish it.) I want to get next weeks' strips polished off this week, so I can devote all of next week to the prequel comic for Book 1.
Regarding Becky's comment in panel 5, I know somebody will probably jump on me about that, but I'm referring to a 2005 Nature paper that revised the estimate of similarity between human and chimpanzee DNA down from 98% to about 96%. Obviously, "similarity" is, at least to some extent, a subjective thing. A December 2006 paper in PLoS ONE pinned it at about 93% and others say it's even lower. Anyway. They're similar.
By the way, since Monday's is already done, and it's just a four-panel sequence (read: no joke) tying together this and the Wednesday comic, feel free to read it early by voting at TopWebcomics!
Affiliate Link: Shop at Amazon.com and support Multiplex
Deleted Scenes Blog
Bonus comics, drawings, and
movie trailers from Gordon

subset: commoncrawl


text:
My sister, baby niece and I stayed here recently in a 2 bedroom apartment. After a few days of traveling it was a welcome relief to spend a few nights here. We found the hospitality and friendliness of the owners, Alan and Prue, outstanding. Much of our itinerary was instigated through conversations with Alan. Fantastic. The apartment was great for... More
- Also Known As:
- Victoria Hotel Rotorua
- Victoria Hotel
- Reservation Options:
- TripAdvisor is proud to partner with Hotels.com, Expedia, Booking.com, Agoda, Priceline, Venere and Tingo so you can book your Victoria Lodge reservations with confidence. We help millions of travellers each month to find the perfect hotel for both holiday and business trips, always with the best discounts and special offers.


text:
2010 Summer
Water-resistance: 3 Bar
Ø: 34,00 mm
L: 8,75 mm
H: 39,20 mm
Rendered in black and white, You Stop You Die (GZ225) has minimalist elegance imbued with the simple, almost ordinary aesthetics of formalism upon which the artist draws. The dial, printed with a skull and crossbones, introduces an unexpected element that stops thought and creates an extra beat of time. Lightly suggestive of the swashbuckle of pirates and axle-grease appeal of motorcycle gangs, the watch is both darkly comic and a reminder to make good use of one's time. The artist's interest in present moments, form and space shines through in this engaging and refreshing contribution to the Swatch&Art Collection.
Born in Santiago, Chile, Ivan Navarro currently lives and works in Brooklyn, New York. Navarro is interested in what he thinks of as the unfinished aspects of minimalism. In a sophisticated reference to the formalist art movement, he combines objects such as shopping carts, mirrors, tables and fluorescent lights in his sculpture. His work is meditative, engaging the viewer in an interaction with forms and spaces. Navarro's widely admired work was featured at the 2009 Venice Biennale.
see all watches by this artist


text:
Due to being asked for my references by a few different people I thought I would post them up here so it's all complete before I go travelling. It's out of place on the blog I'm afraid but hopefully it will assist a few people who are researching the subject.
First is the general bibliography and then the specific numerical endnotes in order of chapter. Read More »


text:
Select two
Please enter a game title or a Steam Store AppID into the text field below and select your region.
Compare prices
Hamilton's Great Adventure: Retro Fever
Release: 3rd October 2011 - Genre: Adventure, Casual, Indie
₴ 7.83$ 0.99
$ 0.99 » £ 0.63$ 0.99 (+0.00%)
£ 0.99 » $ 1.55$ 1.55 (+56.57%)
This DLC belongs to:
Hamilton's Great Adventure
Release: 31st May 2011
By popular demand your favorite developer has given their level designers the task of creating even more retro extravaganza in the same spirit as the Toader level of the main release.
This map pack contains new levels that bring back the irrepressible charm, and also that daunting touch of hardcore difficulty, that could only be found in the 80's. They are inspired by famous levels found in legendary NES titles and carry names such as It's a me, Hamilton! and Dungeon #9.
Accompanying the levels are brand new and shiny achievements to ensure that your bragging rights are properly boosted as well.
System requirements
Price and sales chart
This chart shows prices and sales for this game in the selected currency.
Chart legend: Regular Price | Sale ≥ 90% | Sale ≥ 75% | Sale ≥ 66% | Sale ≥ 50% | Sale ≥ 33% | Sale ≥ 25% | Sale < 25%
SteamPrices.com collects price histories since September 2010 (or later for recently added regions). All data comes without warranty for correctness and/or completeness. Feel free to contact us if there are unusual peaks in the chart.


text:
E-mail :: Print
back to top »
The purpose of this document is to provide instructions for how to initially launch, navigate the internet options and troubleshoot in Internet Explorer 7.0.
Upon first launch, you must choose a default search provider before beginning to surf the web.
The IE 7.0 menu bar contains all the same settings and information from previous versions of the browser, however access to settings has been significantly rearranged.
NoteThe Menu Bar option turns on the old style IE 'File menu' structure, for those who are uncomfortable with the new look and feel.
1. Click on the start button on the bottom left corner of the screen. From here select 'Internet' from the top left menu bar.
2. Once the Internet Explorer has opened up, go to the right hand side of the browser. In the top right hand area find the word 'Tools'. Please select this drop down.
3. When the drop down expands you will see several options for how to modify the activities and views within Internet Explorer. Select 'Internet Options.'
4. When Internet Options opens, it will start under the 'General' tab. Here you can clear recent surfing activities, setting the homepage, changing appearance (not shown here), how tabs work and display, as well as setting up searches.
5. The 'Security' tab contains information and settings on what different 'zones' (such as the internet, the intranet, and certain sites) will allow to function or access. These sites can be set individually by selecting the icon in the top box and then moving the lower slider up for higher security, and down for lower security. Please note that Charter does not support these settings.
6. The next tab is the 'Privacy' tab. This section allows for specific settings for the internet zone, such as restricting cookies, as well as control of the ingrained pop-up blocker. Please note that Charter does not support these settings.
7. The 'Content' tab is next on the list. This section controls what personal information people allow the browser to contain and populate for them while visiting sites, as well as the parental controls. Please note that Charter does not support these settings.
8. The 'Connection' tab has information about the primary and secondary connection types for internet access. It may become important to check on the 'Lan Settings.' Please see "Checking the LAN setting in IE 7.0" below for additional information
9. The 'Programs' tab allows you to change the default browser, manage add-ons for the internet explorer, chose programs for HTML editing, and link other programs to the browser. Please note that Charter does not support these settings.
10. 'Advanced' tab has options for every aspect of how the browser handles surfing and access as well as program activations. All settings can be reset in this tab by using the 'Reset' at the bottom.
Troubleshooting internet connectivity in IE includes determining browser version and cipher strength, clearing the internet history, setting up a new homepage, as well as checking the LAN settings.
1. To get the normal menu bar to appear in IE 7.0, you can right click on the open space at the top of the browser to bring up a submenu. From this submenu you will want to check 'Menu Bar'
2. Once the Menu list is showing you will select 'Help'
3. From the help menu you can select 'About Internet Explorer'. Once selected it will show a screen revealing the version of the browser as well as the cipher strength it is using.
1. Go to the top right hand corner of the Internet Explorer and select the 'tools' drop down menu.
2. From the menu select 'Delete Browsing History'.
3. On this screen you are given the option to delete only certain aspects of surfing history and cache files or delete all. For Charter support parameters we will advise to utilize the 'Delete All' button unless you specifically requests otherwise.
4. When you select the delete all it will give a pop-up box asking if you wish to clear all add-ons as well. Select this box and the click Yes.
5. Select close at the bottom of this screen.
1. Once the Internet Explorer has opened up, you will go to the right hand side of the browser. In the top right hand area we will find the word 'Tools'. Please select this drop down.
2. When the drop down expands you will see several options for how to modify the activities and views within Internet Explorer. You will select 'Internet Options.'
3. When Internet Options opens, it will start under the 'General' tab. Here you can set the homepage.
There are 4 options for setting the homepage
4. Once you have set the homepage via one of the means listed above, select Apply and then OK.
Sometimes the LAN settings could get changed by other programs, closing off internet access with the browser. In these cases all other programs may connect and function well, only the Internet Explorer itself will remain offline, and cannot surf via IP or URL. If this is the case the procedure below may assist in restoring functionality.
1. Go to the 'Tools' menu of the Internet Explorer.
2. Select 'Internet Options' from the drop down menu.
3. From the Internet options, select the 'Connections' tab.
4. Under the connections tab, select the box called 'LAN settings'.
5. Please uncheck any boxes that may be marked and select ok.
6. Please select Apply then OK from the bottom of the box.
How useful was this information?
We welcome your feedback. Click Send after you have made a selection.
Live chat supports residential customers only.
Or call us at 1-888-438-2427
To check the status of your online order or for help with your order, click below.
You can also call us at 1-877-581-3485


text:
Police Report More Items Stolen from Cars
Manassas City Police report stereo and GPS unit stolen from vehicles and remind residents to remove valuable items from and secure their vehicles.
Manassas City Police are investigating two separate cases of larcenies to vehicles that occurred sometime over the weekend.
Officers first responded to the 9200 block of Thornwood Lane, where a victim told officers that sometime between Saturday afternoon and Sunday morning, someone entered his unlocked 1995 BMW and stole a radio. The radio was valued at approximately $220.
The second incident was reported on Vinnia Court. The victim told officers that sometime between Saturday afternoon and Sunday morning, someone entered his unlocked 2005 Toyota and stole a Garmin GPS. The GPS was valued at approximately $100.
Residents are reminded not to leave anything of value inside their vehicles and to always keep their vehicles locked.
Both investigations are ongoing, police said. Anyone with information should call Manassas City Crime Solvers on their 24-hour confidential tip line at (703) 330-0330. A cash reward up to $1,000 is being offered for information that leads to an arrest in these cases.
Be sure to check out Manassas City / Manassas Park Crime Solvers on Facebook.
9:27 am on Wednesday, June 20, 2012
It's kind of hard to feel bad when people keep making themselves easy targets. Takes one second to lock your car. Yes, they still might break in but generally they just walk checking to find vehicles that are unlocked. Or just simply take valuables out every day if you don't want to lock it.
Erin Gibson
10:42 am on Wednesday, June 20, 2012
You are correct, Wayne! Everyone needs to be locking their vehicles/removing valuables. I remember last year people were leaving their vehicles running/keys in unlocked vehicles outside local 7-11s while they ran into the store real quick and people were getting their cars stolen.


text:
Near Beach & Village / Deep Discount in St Simon's Island
- bedrooms 3
- baths 2
- sleeps 6
- pool no
- hot tub no
- pets allowed no
- type House
- community
rates (USD)
/ night
$ 1,250 - $ 1,250 / week
vacation rental description
St. Simons Island, GA
Near the Beach, Near the Village, best of both!!!!
This great three bedroom two bath house is the perfect spot for your St. Simons getaway. The beach access is located three blocks away. Great shopping, restaurants, & nightlife are only a mere short bike ride away or a 4 block walk.
St. Simons is a perfect Island getaway with everything that you could need. The Historic Fishing Pier & Village has everything for all ages. The Island is full of historic sights and some great golf.
If you have any questions, please email or call.
property availability
Last modified on 03-26-2013 at 9:58 PM.
email owner view full calendar
Ashton Holloway
Ashton Holloway
accepted payment methods
Prior to paying a reservation deposit, always verify payment instructions by calling the phone number displayed on this listing page. By contacting the owner directly and paying by an approved method - credit card, paypal, check or bank transfer - your reservation payment will be protected up to $1,000.
Learn more in our Security CenterTop things to do in St Simon's Island
- Shopping
- History
- Beach
- Nature
- Relax
Ashton Holloway , owner


text:
- Local every day in
Invite a friend
University Liggett Holiday Concert
500 Temple St, Detroit, MI | Get Directions »
The community is invited to celebrate the season with all University Liggett School choir and band students who will perform seasonal music as part of the annual All-School Holiday Concert, 1 p.m. Saturday, Dec. 8, at the Masonic Temple, 500 Temple in Detroit. A prelude begins at 12:30 p.m.
Students in first through 12th grades will be featured in band, choir, handbell and small ensembles. The concert is free, though donations are welcome.
Event Details
Where | 500 Temple St, Detroit, MI 48201 |
Next on | This event is over. |
Time | 12:30 pm |
Price | $0 |


text:
Relax in an elegant suite in Las Vegas for $69-$99 this winter. Travel through March, when rates typically exceed $200 per night:
Luxury Suites International is offering this special for stays at the 4-star Signature at MGM Grand Hotel and Casino.
Guests will arrive at the resort through a private gated entrance and benefit from all the amenities offered at MGM Grand. Each suite boasts a kitchenette with luxury appliances and a spacious bathroom with a whirlpool spa tub.
As an added bonus, guests who stay three nights or longer will receive a complimentary upgrade to a room on a higher floor with a view of The Strip, based on availability at time of booking. Also, children younger than 16 stay free ($15 per person value), which is convenient for a family vacation because each suite sleeps four.
Blackout Dates: Jan. 18-19, Feb. 20, 26-28; March 1-3, March 22-24 (These dates may be available at a slightly higher rate.)
Book by Jan. 21.
Note: A two-night minimum stay is required. A $20 daily resort fee also applies, which covers 24-hour valet service, bottled water and wireless Internet access in each suite and throughout the property.
How to Book This Deal |
Click here to book online at Luxury Suites at The Signature
and enter promo code LUXURY.
Call Luxury Suites at The Signature at
and mention promo code LUXURY.


text:
1. | I loud u | ||
An easy way to get out of the 'i love you' trap, but on SMS text messages
This works really well because if your T9 dictionary is enabled, when texting, love and loud have the same key combinations, viz. 5683 *Text conversation AFTER saucy text sex or phone sex*
Person 1: U were amazing! Person 2: U 2 baby! Person 1: I love u Person 2: I loud u 2 |


text:
Even the New Center District [1] has its own gem: the
Cuisine Restaurant (670 Lothrop, 313/872-5110, www.cuisinedetroit.com [2], 4 p.m.–close Tues.–Sun., $22–90), situated behind the Fisher Building [3]. If you're willing to spend a fair amount, treat yourself to one of Chef Paul Grosz' progression menus, which might include dishes like sea scallop in a citrus coconut glaze, lobster crab bisque, smoked salmon Caesar salad, creamed Alaskan halibut, roasted duck breast with buttered quinoa, and chocolate banana cake.
The restaurant also offers a vegetarian progression menu and a superb wine list.
[1] http://www.moon.com/destinations/michigan/detroit/sights/downtown-detroit/new-center-district
[2] http://www.cuisinedetroit.com
[3] http://www.moon.com/destinations/michigan/detroit/sights/downtown-detroit/new-center-district/fisher-building


text:
Folks, Concept of 'boot' cgroup was discussed as part of the cpuset/cpuisol lkml threads. In short 'boot' group is very much like the 'root' or toplevel group. ie It contains all tasks, and 'boot' cpuset contains all cpus, mem nodes, irqs, etc. The difference is that it can be easily shrunk if needed, where as toplevel/root group cannot. I just wanted to make sure that we still want to create 'boot' cgroup during kernel init instead of doing it in the user-space. After looking into this a little bit I'm thinking of creating 'boot' cgroup right after cpuset_init_smp() (init/main.c:841). Just before do_basic_setup() which creates work queues and stuff. The thing is though that the very next thing we do there is run early userspace. Which begs the question, shouldn't we just do it from early user-space then ? It'd be very simple to mount cgroup, create 'boot' group and move all the tasks in there. So kernel or early-userspace ? If kernel. Paul M, do you have a suggestion as to what's the best way of creating a cgroup without mounting cgroup fs. Seems like there is currently no easy way for doing that. I probably missed it. Thanx Max --
Seems simplest to me. We have an early boot script that creates a "system" cpuset and moves all tasks into it. It seems to work fine for us. Paul --
Suppose we were to do it from kernel. What's the right way to create a cgroup without mounting a cgroupfs ? I just want to play with it. There are a couple of advantages that I see for doing it from kernel. We can move 'kthreadd' and idle threads into the 'boot' cgroup early on and therefor later on won't even have to iterate through the tasks and stuff. Whereas user-space has to iterate through tasks and be smart about threads that are pinned and stuff. Not a big deal but if kernel code is simple enough maybe it makes sense. So, any pointers. How do I do create_cgroup() without fs mounted ? Max --
There isn't really a way, but you could always kern_mount() a Would this be done based on some boot commandline option? I don't think you'd want to do it unconditionally. Paul --
Hmm, I believe the original discussion was about doing it unconditionally. Why not I guess ? It probably won't even affect your existing scripts since they will be able to move tasks into another set just like they do now. The only thing I can think of is that if your scripts use sched_load_balance then they will now have to unset it in the 'boot' set as well. Otherwise since the 'boot' set will be non-exclusive (cpus and mems) it should not really affect anything. So what's your concern with unconditional 'boot' cgroup/cpuset ? Max --
My boot scripts look in /dev/cpuset/tasks to find processes to move That can break existing userspace, so I presume PaulJ isn't in favour The exclusivity problem, as above. Which subsystems are you going to include in this boot hierarchy? Userspace is going to have to be aware of the fact that there's a cpusets hierarchy which might have to be dismantled if it wants to set up something different. Paul --
My impression was that he was ok with changing his stuff. But I maybe completely wrong of course. I'm actually perfectly fine with making it conditional. Maybe something like bootcpuset=1 Hold on, if you move all the tasks ... Oh, never mind :). You mean that you won't be able to create any cpusets that must be exclusive unless you nuke Yes I agree. If this 'boot' set is unconditional user-space tools will have to change. As I mentioned above I totally do not mind if is is conditional. Any I was going to only include 'cpusets'. Does it make sense for anything else ? Max --
You're right - I don't favor it. Using the 'cpus' in one or more cpusets to determine both: 1) which CPUs can receive an irq, and 2) resolving conflicts in such irq placement, excessively overloads the cpuset hierarchy, breaking existing userspace, as Paul M notes. If you don't have any other cpuset hierarchy you need to use, and so don't really otherwise care what your cpuset hierarchy is, then I suppose this works just fine. But if you also need to use the cpuset hierarchy to define nested subsets of CPUs and Memory Nodes, for the purposes of controlling which tasks can run where (the original and still primary motivation for cpusets) then one can only conveniently specify those trivial irq configurations that happen to exactly conform with that hierarchy (that exactly want to make use of some of the same sets of CPUs, and that don't depend on the hierarchy to resolve conflicts in overlapping irq directives). Almost any non-trivial use of cpusets for both irq directivity and CPU and Memory placement would complicate both hierarchies, forcing unending confusion and breakage on the existing cpuset users. Some examples: Let's say I have three cpusets defining the CPU and Memory Node sets in which I want to place my tasks: /dev/cpuset/A /dev/cpuset/B /dev/cpuset/C and I want a particular set of irqs to be directed to the CPUs in A and B, but not C. Well -- guess I can duplicate the irqs settings. But don't tell me to use a 'boot' cpuset, as in: /dev/cpuset/boot/A /dev/cpuset/boot/B /dev/cpuset/C to accomplish this, as that intrudes in the hierarchy, breaking user code. If my irq isolation needs don't exactly partition along the 'cpus' settings in A, B and C, then not even duplication helps. If the 'irqs' in /dev/cpuset/A/Z (where Z's cpus are a proper subset of A's) don't match the 'irqs' in /dev/cpuset/A, then I have further confusions resulting from conflicting irq ...
Hmm, I think we're mixing two different threads here. 1. How to map irq affinity handling onto cpusets. 2. Whether and how to create in kernel 'boot' cgroup/cpuset. They are somewhat orthogonal imho. In a sense that no mater how we decide to handle irqs (even if we do not do them under cpusets at all) we may still want 'boot' group. As I mentioned at the beginning of this thread 'boot group/set is basically just a convenience feature. The only difference between root/top group is that 'boot' group can be dynamically resized and moved. Ok. So the rest of the email is mostly about irqs. It'd be nice if it was in I'm not sure #2 is a concern. With the latest couset irq handling patches I'm not sure what breakage you're talking about. But lets talk examples I How is that any different from tasks ? Exact same example right back at you. Suppose I have a task that needs to run in A and B but not C. In fact if you look at the example that I provided in the other thread I already have such an app. In my current apps different threads have to run in different cpusets. And yes I think the way to solve that is to use more complex cpuset hierarchy like the one you used above. I would not necessarily mix in the 'boot' set here. I mean if people want to subdivide it that's fine but they do not have It does not force any changes. irqs handled just like tasks and if people have complex partitioning requirements they may have to use more complicated That (ie additional sets of irqs) seems like an major overkill to me. Probably because I do not think that there are any conflicts to resolve in the first place. As I explained above if we treat irqs just like tasks (from cpuset perspective) then same exact rules and limitations apply. Irq can be assigned to a single cpuset at a time. Complex requirements can be solved either by deeper cgroup/cpuset hierarchies or worst case if there is something totally wacky constraint people always have an option of assigning irq to the ...
Can't happen. Each task belongs to exactly one cpuset, no exceptions. That's why you can't "treat irqs just like tasks". -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
Sure you can. I was talking about running on the _cpus_ that belong to the "sets A and B but not C" and not that a task must belong to more than one cpuset. Unless I misinterpreted your example you were talking about exact same thing. In other words that an irq needs to assigned to the _cpus_ in the sets A and B but not C. Makes sense ? Max --
This doesn't make sense to me. If a task is to run on the CPUs in both sets A and B, then it has to be in both those cpusets, which isn't allowed, or in some super set of both A and B (that is, in this example, in the top cpuset), which doesn't restrict the task to just A or B or their union. I have no idea what distinction you are seeing between what _cpus_ a task can run on, and what cpuset it belongs to. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
Paul, we are in 100% agreement here about the tasks. All I'm saying is that the same exact thing applies to the irqs. Again let me try your example. Suppose we have /dev/cpuset/A /dev/cpuset/B /dev/cpuset/C Now suppose that for whatever reason I must run task1 on the cpus that belong to sets A and B but not C. The only way to do that with cpusets is /dev/cpuset/X |-- A `-- B /dev/cpuset/C i.e. create parent cpuset X and assign task1 into cpuset X. Of course if A and B are not cpu_exclusive then X does not have to be their parent. Makes sense so far ? Now the same exact thing can be said about the irqs. If I need to assign irq1 to the cpus in sets A and B but not C I have to create set X that is the union of A and B, and assign irq1 to the set X. This is what I meant by "deeper hierarchies" in the earlier emails. Did I do a better job explaining this time :) ? Max --
> This is what I meant by "deeper hierarchies" in the earlier emails. These deeper hierarchies create an incompatibility in some common uses of cpusets. When my example had cpusets A, B and C, that was as stated, not as might be modified to X, X/A, X/B and C. If the user has or would have setup cpusets A, B and C because that's what they needed to manage the CPU and Memory Node placement of their tasks, then that's what they might have setup, and there is a good chance that they would find the imposition of the extra 'X' cpuset to be a problem, to require more code and to be a cause of bugs. Adding irqs to the cpuset hierarchy isn't free; it can further overload the hierarchy, with "deeper hierarchies" as you state. If instead of deeper hierarchies, we allow the same irq to be listed in more than one cpuset (unlike tasks, which only get one cpuset) then we need some way, independent of the cpuset hierarchy, to determine how to resolve conflicts. We can't just add all the cpus together, allowing an irq to be directed to any CPU which is listed in any cpuset that accepts that irq, because a major use for this is to remove irqs from certain realtime CPUs. So ... if the natural hierarchy needed to map irqs to CPUs is not a subset of the natural hierarchy needed to map tasks to sets of CPUs and Nodes, then we either deepen the hierarchy (cross product of the the two maps, essentially) or we allow the same irq to be listed in multiple cpusets and provide some alternative mechanism, outside the hierarchy, to resolve the resulting conflicts in the irq to CPU map. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
Isn't that just an issue of planing ? Those cpusets are not cast in stones are they. I mean yes users have setup A,B,C they way they did because that's what they needed. Now their plans/requirements have changed. They now want to also manage irqs via cpusets and in order to do that they need to replan/redo the partitioning. In order to manager irqs the code has to change anyway because currently there is not way to do that via cpuset. The users would have two options: 1. keep all irqs in the top set and manage them individually via /proc 2. layout cpusets differently btw I still do not see the "incompatibility" argument. Probably because I have no idea how the software you're talking about is designed. Are you saying that the software relies on a flat cpuset partitioning ? ie That it will brake if This sounds like an overkill and as you pointed out is not even clear how it'd work. Looks like we have a trade-off here: 1. use simple "irq == pseudo-task" concept and potentially brake some existing software. We do have working solution. 2. come up with something that requires more complex irq management rules at the expense of complexity. We do not have working solution. I think by natural you mean "compatible with existing sw". What is unnatural in extra levels of cpusets ? If I read cgroup/cpuset documentation it seems to imply that nested cgroups/cpuset are allowed. Max --
It's similar, perhaps, to what happens when we try to accomodate two architectures in one file system, with things like: /x86_64/bin /ia64/bin replacing the well known /bin. Things break. Apps such as the major batch schedulers (PBS and LSF) and various other tools and scripts buried here and there have come used to developing particular cpuset hierarchies over the last couple of years. Any time you force another dimension into such an existing hierarchy, things break, and people get annoyed. Sure ... the kernel doesn't care ... it can handle whatever hierarchy you like. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Crazy idea. How about we add support for sym links to the cgroup fs ? It's still much cleaner imo than dealing with complex irq grouping schemes. In other words with symlinks we could do `-- cpuset |-- A -> X/A |-- B -> X/B |-- C `-- X |-- A `-- B The software that is used to the flat structure won't know the difference. Max --
What's this "complex irq grouping scheme" that you're referring to? If it's what I posted last week, with named sets of irqs, and each cpuset naming which set it belonged to, that seems to me to actually fit the usage pattern rather well. The jobs running in particular cpusets need only know the 'name' of the set of irqs it makes sense to send to its CPUs (the realtime irqs, a particular piece of hardwares irqs, the ordinary system irqs, the absolute minimum set of irqs, ...) and the system admin gets to specify, one time, which irq numbers are in which named set, or to change, later on, which set a particular irq is in, all without having to have detailed knowledge of the jobs that want particular irq sets directed to their CPUs. We tend to label whatever makes sense to us as "simple", and whatever doesn't seem necessary in our experience, or doesn't make sense, as "complex". Such labels are losing their meaning these days, other than to help others figure out what we favor, or disfavor. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
The context here was that we were talking about a way to group irqs and assign them to the cpusets. I was proposing to just treat IRQs as tasks, and you were proposing to add some additional grouping. Replies inline below. I was just saying that cpuset already provides a nice grouping. After thinking about this some more I still do not see a need to group IRQs before assigning I agree in general. In this particular case additional grouping introduces even more hierarchy. I seems to me that "irqN -> cpu1, cpu2, cpu3" is a very simple, straightforward relationship. Whereas "irqN -> groupX" "groupX -> cpu1" "groupX -> cpu2" "groupX -> cpu3" Is not that straightforward. Anyway. I think it all boils down to the compatibility with existing user-space apps. I still like the simple approach of treating irqs like tasks when it comes to assigning them to the cpusets. Which as we discussed earlier in some cases may require an extra level in the cpuset hierarchy. The question is, is that really such a big problem. If we make in kernel boot set optional, by default all irqs will be in the root cpuset. Which means people can still use /proc/irq/N/smp_affinity and manage irqs just like they do now. There is no compatibility issues in that case. So do you think the apps compatibility is an issue in that case ? Also isn't it likely that the apps will gradually adapt to handling multi-level cpusets anyway ? I mean you guys were talking about how wonderful and flexible cpusets are, but we cannot seem to use the flexibility because the apps are designed for a flat layout. Max --
No. Not flat. Not at all flat. We routinely and normally have an interesting hierarchy of cpusets below /dev/cpuset. However that hierarchy is determined by the nesting of subsets of the nodes (CPUs and/or Memory) on the system. These subsets of nodes in the /dev/cpuset hierarchy may well map nicely into the subsets of CPUs that can receive a particular set of IRQs, however that map is not bijective. Of particular interest here, it's not injective, meaning that multiple cpusets might and will commonly receive the same set of IRQs. You can force this map to be injective by elaborating the cpuset hierarchy to reflect both this new assignment of IRQs and the (CPU and/or Memory) node subset hiearchy that it currently reflects, but that will break code that was expecting the directory tree below /dev/cpuset to directly and only reflect the node hierarchy. In less mathematically obtuse wording, sure you can add more directory layers below /dev/cpuset, to handle IRQ assignments, but that will break code that was expecting the /dev/cpuset directory tree to only reflect the nesting of (CPU and/or Memory) nodes. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Sorry for being rather late to the game - other stuff keeps me from doing anything much here :-(. Anyway, the current applications don't support IRQ assingment anyway. That's a new feature; and its quite common that new features require code changes. So I'm not seeing the problem - don't change code and stuff works as before - change code and you get new stuff. So I'm arguing in favour of the IRQs as tasks idea that might need extra hierarchy levels. --
It's common for new features to require code changes to take advantage of the new features. It's less desirable that taking advantage of such new features breaks existing, basically unrelated, code. My gut sense is that, in a misguided effort to find a "simple" answer to irq distribution, we (well, y'all) are trying to attach this feature to cpusets or cgroups. Let me ask a different question: What solutions would you (Max, Peter, Ingo, lurkers, ...) be suggesting for this 'IRQ affinity' problem if cpusets and cgroups didn't exist in any form whatsoever? The answer to that question might help me contribute to this discussion in another way ... it might help me understand better what we're really trying to do here. You guys were proposing mechanisms that don't fit my architecture sense of cpusets, but I was having problems figuring out what are the essential underlying requirements, independent of choice of mechanism. Perhaps by describing one or two possible alternative, cpuset-free, mechanisms that come more or less close to meeting our needs, I will glean a better understanding of these elusive requirements, and can better contribute to the discussion of design trade offs facing us. So could you describe some possible cpuset-free solutions? If they are flawed in some critical way, that's ok, just point out said flaw(s). Either way, this could help illuminate what's needed here. It might be, once I better understand the requirements, possible solutions and their tradeoffs, that I come to agree that cpusets or cgroups present the best mechanism, given the tradeoffs and what's needed. Or it might be we find a better way to meet our needs. Actually, if for no other reason than to bring any lurkers up to speed, if you (Max or Peter, likely) wanted to describe, from the beginning, what this discussion is about, that would be good too. I doubt anyone outside of three or four of us even recalls that long discussion of February and March, 2008. -- ...
I see two use-cases: - Isolation - NUMA node devices With isolation you want to move all of you 'normal' system tasks off to side of your machine and use the other side for 'special - rt' tasks. For IRQs this means that you want to move all the 'normal' IRQs along with the 'normal' tasks, and move the special IRQs into the rt side. Of course you can do this by setting IRQ affinities one by one, but being able to group the IRQs seems a sensible thing to me. One thing here is that we'd like to also provide a default group for new IRQs, so that when a new device appears its not allowed into the 'special' side of your machine. This is what Max focussed on, and provides a binary devision of your machine: special and not special. Now I was thinking that if we generalize this whole thing it might be useful for other purposes such as IRQ placement near the nodes that host the device and/or the application using them. So what we'd end up with is named affinity groups that contain (unique) IRQs. --
Ok ... so let me propose an entirely different solution. No doubt it has some terrible flaw, but I'll just have to await your replies to see what that is. How about we have: 1) Yet another text config file in /etc, this one containing lines having two fields: * a list of IRQs, and * a cpumask. This file would specify which CPUs should handle which IRQs. 2) A utility that can be run, after changing the above file, to poke the proper cpumask to each IRQ, as specified in the file. (Obligatory "simple" marketing claim: the above requires no kernel changes.) What am I missing? -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Two points: - we can't currently set irq affinities for non-existent (aka new) IRQs - its a shame to duplicate the masks - most of this information would also be used in the cpuset structure used to place the tasks. --
Ok. Let me twist this a turn tighter then. The first of your two points, a default affinitiy mask for new irqs, would seem to require a kernel change. But that change could be a single cpumask, settable in /sys somewhere, specifying the default affinity. If that's all we needed, it would be easy. The second of your two points, "duplicating masks", seems more delicate. The space of named cpusets (the directory pathnames below the usual mount point, /dev/cpuset) is not really much more compact than the set of interesting cpumasks. But I suppose your point is that some of the -particular- cpumasks already named by the cpuset hierarchy are tantilizingly close to the set of interesting cpumasks needed for irq affinity ... close given some combination of union, intersection, set difference and compliment operations, given my usual bias toward looking at such things as this using set theory mechanisms. That is, for example, one might want all the CPUs in cpusets foo, bar and baz, except the CPUs in cpuset blip, to handle IRQs so and so. Let me think on that ... it's my nap time now. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
Ahh! Perhaps that example has the keys to this kingdom. How about this. We add two files to each cpuset: irq_affinity_include # IRQs to direct to CPUs in this cpuset irq_affinity_exclude # IRQs -not- to direct to these CPUs where irq_affinity_exclude overrides irq_affinity_include. So, to determine to which CPUs a given interrupt (IRQ) can be directed: 1) Combine (union) the 'cpus' of all the cpusets for which that IRQ is in that cpusets irq_affinity_include, then 2) Remove (set substraction) the 'cpus' of any cpuset for which that IRQ is in that cpusets irq_affinity_exclude. In the simplest case of just wanting to isolate some CPUs with their own special list of interrupts, one would: 1) include all interrupts in the top cpusets irq_affinity_include, and 2) include the interrupts you don't want in the isolated cpusets irq_affinity_exclude. Observe that there is no dependency on the cpuset hierarchy in the above. The contents of the files irq_affinity_include and irq_affinity_exclude would be inherited by child cpusets on creation from their parents. The one detail that puzzles me at the moment is what ownership and permissions these two irq_affinity_* files would have. I am concerned that the usual permissions, which allow a job to write its own cpuset files would allow a job to affect the overall system to a greater degree than is desired. Perhaps an additional inheritance rule would be useful and appropriate, such as a rule that a given cpusets irq_affinity_include must be a subset of its parents or a rule that a given cpusets irq_affinity_exclude must be a -superset- of its parents; I'm unsure here. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
Looks like we arrived at the same conclusion. See my prev reply. There is actually no duplication as far as I can see because IRQ layer already This would be an overkill imho. Max --
As Peter explained I'm focusing on the "CPU isolation" aspect. ie Shielding a CPU (or a set of CPUs) from various kernel activities (load balancing, soft and hard irq handling, workqueues, etc). For the IRQs specifically all I need is to be able to tell the kernel to not route IRQs to certain CPUs. That's mostly works already via /proc/irq/N/smp_affinity, the problem is dynamically allocated irqs because /proc/irq/N directory does not exist until those IRQs are allocated/enabled. Originally I introduced global cpu_isolated_map. IRQ code was using that map to exclude CPU(s) from IRQ routing. What I realized now is that all I need is /proc/irq/default_smp_affinity. In other words I just need to export default mask used by the IRQ layer. I think this makes sense regardless of what cpuset based solution we'll come up with. Max --
On Tue, 20 May 2008 18:14:58 -0700 \\ why don't you tell irqbalance instead? it'll make sure the irq stays out of the wind... --
That will be too late. By the time irqbalance sees that IRQ it may have already fired (possibly several times) on the "wrong" processor. Max --
I suspect that something like you're proposing to do here will answer your needs, to "tell the kernel to not route IRQs to certain CPUs." I suspect that other folks will have some additional needs, that perhaps my idea of May 9, 2008: How about this. We add two files to each cpuset: irq_affinity_include # IRQs to direct to CPUs in this cpuset irq_affinity_exclude # IRQs -not- to direct to these CPUs where irq_affinity_exclude overrides irq_affinity_include. could meet. It makes sense to me to deal with your "default_smp_affinity" patch first, and then come back around and see what remains to be done, and how to do it, perhaps with additional cpuset based mechanisms such as Peter, et al: how does Max's planned "default_smp_affinity" patch sound to you, as the next step we take on this? -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Hi Paul, I saw your earlier email with that proposal. Just had to digest it a bit :) That would work. But wouldn't it be hard for the users to debug things ? I mean if you have a complex cpuset hierarchy it may be hard to figure out why a certain irq is not getting to cpuX and vice versa. btw How would we represent "all irqs", are you implying that those files contain masks ? We'll also need to handle conflicts like "irq excluded from all cpusets", etc. I still prefer "irq as a task" approach. It's very simple and straightforward mapping of an irq -> cpuset, no conflicts, etc. Easy to figure out for the user where an irq will end up. btw I did not quite get the idea behind the "exclude" part. Why is "include" I think it makes sense regardless of the cpuset based approach. Seems like a logical extension of the existing interface (ie per IRQ mask plus the default). Max --
Clearly, yes, the first is simpler than the second. The question is which is correct. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
> How about we add support for sym links to the cgroup fs ? Still pollutes the primary cpuset name space ... you have all the directories X, X/A, and X/B as well as the symlinks A and B. Symlinks allow for one path that needs to be 'aliased' to another, but they are a one-way map; without an exhaustive search of the potential namespace, one can't invert them, or determine if they can't be inverted. Tools have to constantly make heuristic decisions whether to default to dereferencing the symlink, or not, and often have to provide alternatives for the non-default choice. They are a pain in the backside even if designed in and expected up front. If added as critical structure after the fact, something breaks, pretty much for sure. For one minor example, code I've probably buried someplace that does "find /dev/cpuset -type d" to find all cpusets would break. Or the one-line /sbin/cpuset_release_agent script: rmdir /dev/cpuset/$1 is broken -- fails to clean-up associated symlinks, and can't Agreed ;) But nice picture ;). -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Sorry for disappearing on you guys. I'm working on releasing the user-space framework and engine that uses cpu isolation for hard-RT. Once that's done I'm going to resurrect these efforts. In the mean time let me reply to your last comments. Got it. Symlinks are out :) Max --
Good ;). -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Breaking existing software is not what I call working. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <email@example.com> 1.940.382.4214 --
Ok ok I get it :) You know what I meant though. In the other scheme it's not even clear how it'd work in general. Max --
Not cgroups, no. If you really wanted to extend cpusets specifically to allow irqs to be assigned to a cpuset to control which cpus they could execute on, then that might be a possibility. But I don't see how this would be useful for any other cgroup subsystem, so it doesn't belong in the generic framework. My feeling is that just using a simple bitmask assignment, unrelated to cpusets or cgroups, as Max suggested in his later email is the way to go. Paul --
I'll have to have another go at reading his replies. I seem to have more difficulty making sense of his posts ... not sure why. -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson <firstname.lastname@example.com> 1.940.382.4214 --
I'm sure it's because of gazillion typos in them :). Max --


text:
Camilo M.
Pasadena, CA 91104
Subjects Taught Drum, Music Performance, Music Theory, Percussion
About Me
Extremely versatile at the drums with a passion and dedication for excellent work!
Drumming since the age of 13. Self taught for several years, at the age of 19 he attended to college in Bogota, Colombia completing two years of music studies at Pontifical Xaveriana University. In 2005 he went to Los Angeles,CA (USA) to continue his studies enrolling at the Prestigious L.A Music Academy College of Music. He's a solid and versatile drummer with finesse, he has studied many styles of music such as Rock, Pop, Gospel, Jazz, World (brazilian, latin, african), Worship music etc.
In 2008, he landed his first professional gig touring the United States with Singer/Songwriter ZIV, award-winning for best independent record of the year in Europe. Meanwhile, he also worked as a session and live drummer with numerous artists: Tarik Batal, Arden Kaywin, and others.
In 2009, Camilo received a call to work with Russian celebrity, supermodel and singer IRENE NELSON, member of...


text:
- Free breakfast
- Multiple large conference rooms
- Dry cleaning/laundry service
- Barbecue grill(s)
- Tennis on site
- Year Built 1985
- Laundry facilities
- Total number of rooms - 5
- Free parking
- Suitable for children
Situated near the airport, in Naalehu, this bed & breakfast is in the same region as Punalu'u Beach, Ka Lae, and Kula Kai Caverns.
Macadamia Meadows Farm Bed & Breakfast provides laundry facilities, conference/meeting rooms, free parking, and dry cleaning/laundry services.
Televisions come with cable channels. Guestrooms also feature refrigerators, microwaves, and coffee/tea makers.
The preferred airport for Macadamia Meadows Farm Bed & Breakfast is Hilo, HI (ITO-Hilo Intl.) - 94.5 km / 58.7 mi.
Distances are calculated in a straight line from the property's location to the point of interest or airport and may not reflect actual travel distance.
Distances are displayed to the nearest 0.1 mile and kilometre.


text:
1. | Federal Reserve Bank | ||
Supposedly a bank started in 1913 by the USA govt for the people - this is a myth.
The Federal Reserve Bank is a privately owned and controlled organisation that now has to continuously print more and more money in order to devalue the dollar in order to cover the cost of printing and distributing that dollar in the first place. These "BANKSTERS" then loan the money they make back to the American people + interest in order for Bush to finance WAR ON TERROR. It is estimated that around 30% of the average americans wages is taken out of their pay check every year to pay the IRS for taxes that go to pay "interest" on the national defecit owed to the Federal Reserve Bank, none of this money goes towards schools, hospitals, or infrastructure.
There is no law that actually enforces you to pay this tax, everyone just pays it because they think they have to. |
2. | Federal Reserve Bank | ||
(ECONOMICS) Any of the 12 constituent district banks of the Federal Reserve System. Federal Reserve Banks may be referred to either by the number of the district they serve (e.g., 12th FRB) or by the city in which they are headquartered (e.g., FRB of San Francisco). Representatives of the FRB's are eligible to serve on the Federal Open Market Committee (FOMC), the committee that actually administers monetary policy through sales or purchases of treasury securities. The Federal Reserve Bank of New York (2nd FRB) is by far the most important of the 12 district banks. Each bank holding company is likely to have a subsidiary in NYC, and the 2nd District is uniquely guaranteed a seat on the FOMC. The other 11 rotate, with 4 taking a year-long turn at the FOMC at any given time. The Federal Reserve Bank of New York has historically supplied the secretaries of the Treasury or else the chairmen of the Federal Reserve Board.


text:
Gregg Kellogg
Gregg's personal blog
Palau Januay 2012
Just got back from my second trip to Palau, a wonderful place to dive. You can check out the photo album, or see the video slideshow along with some video clips.
Powered by Typo – Thème Frédéric de Villamil | Photo Glenn


text:
Scripting Photoshop With JavaScript and Ruby
You might not be aware of this, but Photoshop has had scripting support for some time now. It even comes with it's own JavaScript debugger that adds a reflection interface. It has well documented support for JavaScript, AppleScript, and Visual Basic, all of which have their own set of problems. Thanks to the efforts of Apple on RubyOSA, we can now use Ruby to script this behemoth of an application.
Scripting, Before you Begin
I think the developers at Adobe were a little Bipolar when creating the scripting API for Photoshop. Some things are simple and straight forward, while others are extremely complex, causing you to go bat-shit crazy trying to make sense of it all.
If you're ready to brave the storm, you can find the documentation for Photoshop Scripting in Photoshop/Scripting Guide/*. There is documentation for all 3 supported languages, and some simple examples for all of them. If you're wanting to go hard core, there is a forum of dedicated Photoshop scripters who've posted some great examples of some of the more complex things like creating UI's through scripts.
There are two AppleScript bridges that I'm aware of: RubyOSA and rb-appscript. I'm using RubyOSA because I found it to be more Ruby-like; there are rumors it will be included with Leopard; and it's an official Apple project. With that being said, rb-appscript is fully capable of scripting Photoshop and the author makes a convincing case as to why you should use rb-appscript over RubyOSA. I'll leave that up to you, but for me, RubyOSA fits my style.
After you've installed RubyOSA via the directions on the site, you might want to generate some rdoc documentation for it (use –ri for RI docs).
$ rdoc-osa --name 'Adobe Photoshop CS2' --op ~/Documents/PhotoshopRuby
I found the Allison template by Evan Weaver to be much easier to navigate than any of the standard rdoc templates, not to mention it's just a swanky template that's much easier on the eyes than anything rdoc has to offer.
$ rdoc-osa --name 'Adobe Photoshop CS2' --op ~/Documents/PhotoshopRuby --template ./allison/allison.rb
Photoshop, Bend To My Mercy!
Quickly, we'll create a new document.
require 'rubygems'
require 'rbosa'
app = OSA.app('Adobe Photoshop CS2')
app.settings.ruler_units = OSA::AdobePhotoshopCS2::E440::PIXEL_UNITS
app.make(OSA::AdobePhotoshopCS2::Document, [], :with_properties => {
:name => 'Ruby Rocks',
:width => 500,
:height => 500
The first couple lines of code include rubygems and rubyosa. The next thing we'll do is get a pointer to the Photoshop Application. I'm using CS 2, but I'm sure this would work with other version of Photoshop as well.
After that, I want to make sure the ruler units are pixels. This is an odd name for a module, and there are plenty more that look just like it with the weird, seemingly arbitrary numbers. The JavaScript API is full of crazy stuff like this, which makes it a bitch to use for a lot of things.
Finally, the meat of the code. The last bit of code calls make
, which is an all-encompasing function for creating documents and layers…although I had problems creating layers with it. Basically, we pass it a class type, specifying what we want to make, the second argument is at
, which specifies the location where the element should be made at, but it's useless here, finally we pass in some options like name, width, and height.
You can run this directly from TextMate (cmd + r) and you should see Photoshop create a new 500px X 500px document, with the name 'Ruby Rocks'. Pretty cool stuff! **Note: You should probably open Photoshop before running these commands—even though I think Photoshop will automatically open, after 20 minutes of course)
What about a more complex example?
require 'rubygems'
require 'rbosa'
app = OSA.app('Adobe Photoshop CS2')
app.settings.ruler_units = OSA::AdobePhotoshopCS2::E440::PIXEL_UNITS
app.instance_eval do
def create_document(options = {})
make(OSA::AdobePhotoshopCS2::Document, [], :with_properties => {
:name => 'Ruby Rocks',
:width => 500,
:height => 500
def add_layer(name, kind)
kinds = %w(NORMAL GRADIENTFILL PATTERNFILL TEXT SOLIDFILL)
do_javascript %(
var doc = app.activeDocument;
var layer = doc.artLayers.add();
layer.name = "#{name || ''}";
layer.kind = LayerKind.#{kinds.detect {|k| k.downcase == kind} || 'NORMAL'};
app.create_document(:name => 'Schweet')
layer = app.add_layer('A text layer', 'text')
texto = layer.text_object
texto.size = 40
texto.contents = "This is some text"
Ok, so what's going on here? I created two new instance methods as a shortcut for creating new documents and new layers. After you get beyond the instance_eval
bits, is the working code. I'm creating a new text layer, then setting the font size, and finally supplying some text to it.
But what about that do_javascript
line in the add_layer
method? It's a pretty handy method, especially considering I couldn't for the life of me figure out how to add a new layer using pure Ruby. Supposedly make
is responsible for adding a new layer too, but I couldn't get it to work. This is where do_javascript
comes in handy considering there are numerous JavaScript examples floating in the wild and Photoshop comes with a special plugin called Script Listener
which generates JavaScript based on the actions you manually perform in Photoshop. For example, if you select a 50px round brush with the Script Listener plugin installed, it will generate the JavaScript code to automate that process.
How useful is any of this?
Thats up for debate. Scripting Photoshop is one of those things when you need it, it's indispensable. Here are a few cases where it could come in handy:
- Adding names to images based on product information stored in a database
- Automating the process of adding Metadata to your images.
- Executing a series of actions on a group of Photos via
If you give this a spin, let me know what you manage to accomplish.
March 5th
... this has made my day.
said on
March 5th
This is a great find, I'll be delving into this later tonight. Thanks!
said on
March 5th
thank you for introducing me to RubyOSA :) I recently stumbled ober rb-appscript but it didn't feel that rubyish to me. with RubyOSA I feel more comfortable even if it might not be as powerful. thanks a lot.
said on
March 5th
How about scripting the gimp :)
said on
March 5th
Adobe Photoshop CS3 add MATLAB scripting as well, which should be exciting for anyone doing heavy image processing in technical fields.
said on
March 5th
This is great, I spent days trying to figure out the applescript equivilent a couple of years ago.
said on
March 5th
That's very nice, thank you :-)
said on
March 5th
ichigo: "I recently stumbled ober rb-appscript but it didn't feel that rubyish to me."
Yeah, Ruby and Apple events have distinctly different ways of doing business (OO vs. RPC+queries), so a bit of mismatch is pretty much inevitable. I think folks who design relational-object mappers for relational databases often encounter similar problems (the Apple Event Object Model is partly based on the relational model, btw).
As you can guess, appscript and RubyOSA deal with this mismatch in different ways. Appscript trades some syntactical Pythonisms/Rubyisms for a level of functionality and application compatibility that's equal to AppleScript's (modulo any really rare and obscure application glitches I've yet to hear of). It wears the differences on its sleeve, if you like, so can feel a bit strange at first – users soon seem to get used to it though. In contrast, RubyOSA tries to hide away all the differences behind a pure OO facade which gives it a bit more 'Ruby-ish' syntax, though it loses some features, is more prone to hidden gotchas, and runs into application compatibility problems more often than AppleScript/appscript. But you pays your moneys and takes your choice.
BTW, here's a pure Ruby version of Justin's second example using appscript for comparison:
require 'appscript' PS = Appscript.app('Adobe Photoshop CS2') PS.settings.ruler_units.set(:pixel_units) doc = PS.make(:new => :document, :with_properties => { :width => 500, :height => 500}) layer = doc.make(:new => :art_layer, :with_properties => { :name => 'A text layer', :kind => :text_layer}) text = layer.text_object text.size.set(40) text.contents.set("This is some text")
Photoshop's scripting implementation can be a little quirky at times; if you get stuck, a good place to ask is Apple's AppleScript-Users mailing list. One thing I've changed in my version is that the script no longer names documents when creating them, leaving PS to generate unique names itself. That's because when PS returns references it likes to identify documents by name, which can cause confusion when two or more documents have the same name. You can sort of get around this by always creating your own references to the frontmost document, but that gets pretty clumsy and it's cleaner and easier to just use references returned by PS. Adding unique suffixes to your own names would be easy enough though, e.g.:
name = 'Schweet' existing_names = PS.documents.name.get if existing_names.include?(name) i = 1 i += 1 while existing_names.include?(name = "#{name}-#{i}") end
said on
March 5th
(With apologies for length, bad Textile escaping ['=>' should've been '=>'], etc.:)
said on
March 5th
RubyOSA rocks!
Thanks for the interesting example of how it can be used to script Photoshop. We hacked together a version of the Marshmallow bot a while back that broadcasts into Campfire your currently playing iTunes song title and link to the lyrics, just to get our feet wet with RubyOSA. We called it Kumbaya.
I'm excited about the possibility of the next iteration of the Mac OS using RubyOSA as it's scripting language-of-choice and interested in seeing what other cool things people are doing with it.
Thanks again and keep hacking!
said on
March 6th
For the windows users this article on Scripting Photoshop I wrote about a year ago might come in handy.
Has a C# code example just after the first pic.
said on
March 6th
Justin: "Can you tell me the why you explicitly define `get` and `set` when ruby handles these perfectly fine"
Oh man, you had to ask. ;) I started writing a response here but it was turning into an essay, and seeing as it's something that does get asked from time to time I've finally stuck it on its own page over at the appscript site:
It's kind of a long story, as to really understand the 'why appscript does X' one needs to understand a bit about how Apple events work, and what makes them so different to the other IPC systems that most folks are more familiar with.
The brief answer is that there are very good technical reasons for doing it, not least "that's the way that Apple events actually work, after all". Not that I didn't also spend a lot of hours trying to think of a viable way to make it all work 'implicitly' (like in AppleScript) back when I originally started (Python) appscript. However, it just wasn't possible without making compromises elsewhere; compromises that would have stopped appscript from working as well as AppleScript, and were therefore judged unacceptable. And FWIW, three years on and plenty other hard-knock lessons later, I'm confident I made the right decision on this issue at least, though I daresay the education/awareness side could still be better.
(In fact, there were already two other Python-AE bridges available at the time; it was dissatisfaction with those that made me roll up my sleeves and write appscript myself. I may not know much about programming, but, as a longtime AppleScript 'expert', I know what I like.:)
Anyway, go read the appscript 'FAQ' page, and if your brain is still working by the end of it, go check out the two papers mentioned at the end of it (they're on the links page) if you want to learn more. And if you've any other questions, feel free to ask away (though if you could maybe manage some simple ones next time…<g>)
said on
March 10th
This rules! There's also another Ruby-AppleScript bridge called RubyAEOSA, but it's deprecated and not so Ruby-ish.
said on
March 11th
Can you see my socks? No! They're long gone.
I had no idea you could do this type of thing. Particularly like the idea of running actions once a new document is set up.
And I suppose you can run save actions?
said on
March 15th
Nice but there are so many COM references to photoshop already out there on the web but has any one managed to save their master pieces it the one stumbling block thats got me stumped.
I managed to code a few line of pure ruby but couldnt save it at resorted back to javascript
said on
March 17th
said on
March 18th
said on
March 20th
ei2uisk1ffqrr drqhcpyk3tnms8snj vlusxmpglhre
said on
March 27th
wow – interesting article. Until now I work with PHP but I think Ruby is the future.
Greetings from Germany Sven
said on
Sorry, comments are closed for this article.


text:
Bishopbriggs Academy Wester Cleddens Road, Bishopbriggs G64 1HZ Tel: 0141 955 2351 Email: School Office
You are here:
Bishopbriggs Academy pupils and staff work hard throughout the year to raise funds for a range of charities. Use the links on the left to find out more about our fund raising efforts this year.
EDC website