LINQ to Tridion January 8, 2010
Posted by yoavniran in Programming, Tridion.Tags: .NET, anonymous types, CMS, Event System, Extension Methods, how to, LINQ, modular templating, templates, Tridion, tutorial, type inference
2 comments
Contents
Introduction
Its Friday evening, a good time to share a little something I’ve been working on.
.NET 3.0 brought with it a fantastic new language (VB, C#) extension called LINQ which stands for Language-Integrated Query.
Microsoft describes it as “a set of extensions to the .NET Framework that encompass language-integrated query, set, and transform operations. It extends C# and Visual Basic with native language syntax for queries and provides class libraries to take advantage of these capabilities.”
In short it gives the developer a more general syntax for querying sets or collections of data.
The beautiful thing about LINQ is that it can be used over any collection whether its XML, Database or even objects so long as they support the IEnumerable<T> interface.
For more information see the resources section of this article or simply google/bing it.
LINQ to Tridion In Action
Since LINQ provides a simple and powerful way to retrieve information from just about anything I thought to myself that it might be nice to have such a thing when working with Tridion.
Obviously the Tridion API is large enough and I only wanted to create a simple example but make it useful, therefore I focused on the ItemFields collections in Tridion.
Anyone who worked or played with the TOM.NET API must have quickly noticed that Tridion items such as components no longer have a Fields collection or MetadataFields collection as did the old COM API. Instead to retrieve those we need to create a new instance of the ItemFields object by passing information from the instance we want to get the fields for. In my article: Tridion Extension Methods I created an extension method that allows you to call Fields directly on a Component instance and get back an instantiated ItemFields collection.
Anyone who had the chance to work with the ItemFields and ItemField objects probably noticed that to get the actual value we need to cast the base ItemField to a more specific Derivative type (TextItemField, DateItemField, etc.).
This structure unfortunately does not work too well with LINQ queries for a few reasons, one of them being that performing a query on a Fields collection should ideally return all values and not just for a specific type. Another reason is that one ItemField may have several values (multivalued field) and that is more difficult to express in a generic query.
Ok, enough mumbling, lets get to some code:
So to get support for my LINQ to Tridion all you need is to make sure you are referencing the classes in the code I’ve made available to download, either by adding the class to your project or by referencing the assembly and add the using statement for namespace: “Tridion.ContentManager.Extensions.Linq“. Thats it.
Lets see an example:
1 2 3 4 5 6 7 8 9 10 |
var comp = session.GetObject("tcm:2-123") as Component; var q = from f in comp.Fields() where f.Name == "links" select f.ComponentValue.Title; foreach (var c in q) { Console.WriteLine("linked component title: " + c); } |
Whats this example does is first gets a component from Tridion, then we query for all values of a field named “links” that we know is of type component link. The ComponentValue returns a component instance from which we can get any component property such as its title. With the .NET ability to infer what type of results we want, in this case String, ‘q’ is now a collection (IEnumerable<String>) of titles of the components linked to our original component:
Lets now go through other parts of the code above. You may have noticed that the component instance exposes a method called ‘Fields()‘:
This is an extension method that returns a IEnumerable<LinqItemField>. The LinqItemField and the LinqItemFields classes are used to abstract all the nasty business of having the need to cast the ItemField objects to get their value. This also takes care of multivalued fields.
The default Value property returns a string value for any type of field. For a component link field the returned value will be the TCM URI of the linked component.
But LinqItemField comes with nice helper properties that can return a more specific type such as: DateValue, NumberValue and as the example shows also ComponentValue.
Currently keyword fields will return the string value of the keyword and embedded fields are not handled.
For comparison, this is how we would do the same thing when working with the API directly:
1 2 3 4 5 6 7 8 9 10 |
var comp = session.GetObject("tcm:2-123") as Component;
var compFields = new ItemFields(comp.Content, comp.Schema);
var compLink = compFields["links"] as ComponentLinkField;
foreach (var c in compLink.Values)
{
Console.WriteLine("linked component title: " + c.Title);
}
|
Which I think is less elegant than the LINQ code but perhaps that’s just me.
Here’s another example showing the coolness of Anonymous Types in .NET:
1 2 3 4 5 6 7 8 9 10 |
var comp = session.GetObject("tcm:2-123") as Component;
var q = from f in comp.Fields()
where f.Name == "contentType"
select new { Name = f.Name, Value = f.Value };
foreach (var c in q)
{
Console.WriteLine("{0}: {1}", c.Name, c.Value);
}
|
By using the keyword new and putting the properties names and their values within the curly braces, the Compiler will create a new (anonymous) type for us that will have these two properties, Name and Value. and of course VS gives us nice Intellisense support:
It was fun playing around with this and hopefully someone can use it in their implementations or at least learn from the examples I’ve provided.
This code can be integrated into modular templates code and with the next version of Tridion we should be able to use this with Event System and other types of projects as TOM.NET becomes Read/Write capable.
Source Code
Can be downloaded here.
Resources
Song: Private Dance (Rikud Prati) December 29, 2009
Posted by yoavniran in Poetry, Random.Tags: Israel, life, love, music, Poetry, song, wedding
add a comment
I finally had the opportunity to upload to YouTube a clip with the song I wrote earlier this year as a wedding gift for my wife’s sister and her husband.
The song was beautifully composed by Liron Grossman a singer/songwriter.
And was performed at the wedding party as a surprise by Liron and the very talented Yoli Kesten-Harel.
Luckily Liron and Yoli made a a recording of the song so it can be heard by more people and so here it is:
Hope you like it. If you do please share it with others.
These are the lyrics to the song, first in their loose translation to English and then the original in Hebrew:
~ Private Dance ~
I give you my hand
Join me in a private dance
This journey begins with a single turn
I cannot do it alone.
I will never let you fall
Look deep into my eyes
I will be your dancer
I will support you in a difficult step.
[Chorus]
The great stage awaits us
Melody swifts us in
The lights shine in our eyes
We are dancing
We are dancing
The dance of our lives.
She gives me her hand
I hold your hand
She whispers a sweet word
From now on she is my dancer
I am your dancer
She is all my soul seeks.
[Chorus]
The great stage awaits us
Melody swifts us in
The lights shine in our eyes
We are dancing
We are dancing
The dance of our lives.
Turning, turning
Never stopping
Turning, turning
Dancing to life’s rhythm.
~ ריקוד פרטי ~
אני מושיט לך את ידי
הצטרפי אלי לריקוד פרטי
זה מסע שמתחיל בסבוב אחד
לא אוכל לעשות אותו לבד.
לעולם לא אתן שתפלי מידיי
שמרי על מבט עמוק בעיניי
אני אהיה הרקדן שלך
בצעד קשה אתמוך רק בך.
[פזמון]
הבמה הגדולה לנו מחכה
הניגון שואב אותנו פנימה
האורות בעינינו כבר בוהקים
הנה אנחנו רוקדים
הנה אנחנו רוקדים
ריקוד פרטי של החיים.
היא מושיטה לי את ידה
אני מחזיקה בידך
ולוחשת בלט מילה מתוקה
מעכשיו היא הרקדנית שלי
אני מעתה רקדנית שלך
נשמתי מחפשת רק אותה.
[פזמון]
הבמה הגדולה לנו מחכה
הניגון שואב אותנו פנימה
האורות בעינינו כבר בוהקים
הנה אנחנו רוקדים
הנה אנחנו רוקדים
ריקוד פרטי של החיים.
סובבים סובבים
לרגע לא מפסיקים
סובבים סובבים
רוקדים בקצב החיים
Your Ideas – Everyone’s Gain December 24, 2009
Posted by yoavniran in Tridion.Tags: CMS, ideas, products, Tridion
add a comment
“Good ideas are common – what’s uncommon are people who’ll work hard enough to bring them about” ~Ashleigh Brilliant
For a while now we had an ideas site for SDLtridion, If you haven’t seen it before, this is the site: http://ideas.sdltridion.com/
The site allows you to suggest an idea you have for one of SDLTridion’s products , it then allows others to vote and comment about your idea as well as letting you vote on others’.
The site gives Tridion’s product management team insight into what the community wants, what the outside world thinks should be improved or simply doesn’t work as people think it should.
So, in short what I’d like to say here is that if you care about these products, if you wish to help make a difference and improve it so you can both get more value and enjoyment in working with them, check it out and cast your vote.
Together we can make a difference, yes we can! …hmm, ok, sorry got carried away there but that’s the spirit: the more votes an idea has the more likely it will be considered by the Product Gods.
It’s very simple to submit a new idea, 2,3 easy steps and you release your idea to the wild, the second important thing is to get as many people voting for it so it will be noticed.
And while you’re at it, consider the Tridion MVP Award Program and nominate someone you think deserves it, one of the most common complaint I hear from our customers and partners is that there isnt enough information and resources about Tridion available on the web. Well, there are some people who want to change this. The MVP programs’ purpose is to encourage such participation and contribution which is a wonderful idea in my book.
Poem: The Red Sea November 19, 2009
Posted by yoavniran in Poetry.Tags: Eilat, hebrew, Israel, poem, Poetry, San Francisco, Sea
add a comment
This one I finished last Sunday, November 15th, 2009 while visiting the beautiful San Francisco.
Thoughts about this poem though came while visiting Eilat(Israel’s Southernmost city) which sits on the Red Sea(Yam Suf).
Hope you enjoy it.
The standard disclaimers apply, the poem was originally written in Hebrew therefore the translation may lose or change some of the meanings, rhyming, wordplay, etc.
~ The Red Sea ~
Silence,
The world shrinks to a blue ribbon
I lean on the water line
Listening to the sea telling his story
It’s a familiar one, he tells:
Of love long forgotten
Of Innocence stolen
Of a war that never ended
But he also whispers of Hope.
Eyes skywards, I float
I can feel the world’s curvature
Can feel the life it stores
Feel all the words it holds
And yet he tells:
Of bitter disappointment
Of long-lasting sorrow
Of the broken human spirit
Yet he also sings of Hope.
The wild sun sears my skin
Her staring eye she never shuts
So I close my eyes
Let myself sink slowly
As I listen to the sea telling his story.
The original Hebrew version:
~ הים האדום ~
שקט,
העולם מצטמצם לפס כחול
אני מתפרש על קו המים
ומאזין לים המספר את סיפורו
זהו סיפור מוכר, הוא מספר:
על אהבה שנשכחה
על תמימות שנגנבה
על מלחמה שלעולם לא נגמרה
אך לוחש גם על תקווה.
עיניים מופנות למעלה, אני צף
מרגיש את קימורו של העולם
מרגיש את החיים שבתוכו הוא עוצר
מרגיש את כל המילים שהוא לא אומר
ובכל זאת מספר:
על אכזבה כאובה
על עצבות ארוכה
על רוח האדם שנשברה
אך שר הוא גם על תקווה.
השמש הפראית את עורי צורבת
את עינה החודרת לא עוצמת
אז את עיניי אני סוגר
ולאט שוקע אל קירבו
ומקשיב לים כשהוא מספר סיפורו.
Poem: Memories from the Green Mill October 27, 2009
Posted by yoavniran in Poetry.Tags: Chicago, hebrew, Jazz, loss, love, music, poem, Poetry
add a comment
This one i wrote in June of 2005. Strangely enough, I haven’t marked down the exact date of its writing even though I’ve started doing that long before.
I was reminded of this poem just the other day from speaking to a friend about being in Chicago and visiting its Jazz clubs.
I have to say that I have very fond memories of Chicago, it was a wonderful time and I found a really great city to experience and enjoy as well as meeting very interesting people while being there.
Update: This poem was also published at StormSage Central.
So here it is:
The standard disclaimers apply, the poem was originally written in Hebrew therefore the translation may lose or change some of the meanings, rhyming, wordplay, etc.
~ Memories from the Green Mill ~
“We are all born crazy,
Its just that some of us stay that way”.
Says the writing on the mens bathroom wall.
I return to my seat
The band is still playing the same song
A happy tune that reminds me of you
Everything reminds me of you.
I’ve already lost control of my mind
My thoughts control me without mercy
The memories hold me like a stringed puppet
I try to fight them
But I never had a chance.
I am drawn to pictures of the past
The melody is left behind
Its you that I see over and over again
I see the reflection of myself
Staring at me from the memory of your eyes.
A feeling of pain brings me back
The candle’s wax drips on my hand
But I do not stop it, I use it,
If only for a moment it distracts me
I savor the realness of the pain.
The guitar plays on my heart’s strings
The bass shakes a tear from my eye
It falls into my empty glass
My voice shakes as I call for another drink.
The players are already playing a new song
And I am left only to surrender
So I lean back in my seat,
I let the pure music run through my body,
The alcohol numb my senses
As the memories sweep the whole of me.
The original Hebrew version:
~ זיכרונות מהטחנה הירוקה ~
“כולנו נולדנו משוגעים,
רק חלקנו נשארנו כך”.
אומרת ההודעה שעל קיר שרותי הגברים.
אני חוזר למקומי
הלהקה עדיין מנגנת את אותו השיר
שיר שמח שמזכיר לי אותך
הכול מזכיר לי אותך.
איבדתי כבר שליטה על מוחי
המחשבות שולטות בי בלי רחמים
הזיכרונות מחזיקים בי כבובה על חוטים
אני מנסה להלחם בהם
אך לא היה לי סיכוי מעולם.
אני נשאב אל תמונות העבר
המנגינה נשארת ברקע
רואה אותך שוב ושוב
מסתכל על השתקפות עצמי
שמביטה בי מתוך זיכרון עיניך.
כאב מחזירני אל ההווה
שעוות הנר מטפטפת על ידי
אך אינני מפסיקה, משמשת אותי,
אם רק לרגע מסיחה היא דעתי
מתענג לזמן קצר על הכאב המוחשי.
הגיטרה פורטת על תווי נשמתי
הבאס מרעיד את הדמעה מעיני
נופלת היא לתוך כוסי הריקה,
קולי רועד כשאני קורא לעוד משקה.
הנגנים כבר עוברים לשיר הבא
ולי לא נותר אלא להיכנע
אז אני נשען אחורה בכיסאי,
נותן למוזיקה הטהורה לעבור דרכי,
לאלכוהול להקהות חושיי
ולזיכרונות שוב לסחוף את כול כולי.
A Few Useful Tridion Extension Methods October 26, 2009
Posted by yoavniran in Programming, Tridion.Tags: .NET, Event System, Extension Methods, interops, modular templating, templates, Tridion, tutorial
6 comments
Following my recent blog about extension methods. Here are a few useful extension methods I’ve created recently for working with Tridion’s TOM API.
.NET Interops – COM API (5.2 and onwards)
Here are a few useful methods to use with the older TOM API (interops), these can come in handy when writing custom tools, event system code, etc.
Publish
The publish method for both Page and Component objects require quite a few parameters which in many cases are always set the same within a single application scope. If you want to use defaults for these values you can use these extension methods to predetermine the values of the parameters leaving a shorter and more convenient way for sending the items to be published:
For Components:
1 2 3 4 5 6 7 8 |
/// <summary> /// Offers a simple call to publish a components using defaults /// for all of the publish parameters /// </summary> /// <param name="targets">one or more pucliation targets or target /// types to publish to /// </param> public static void Publish(this Component component, object targets, EnumPublishPriority priority) { component.Publish(targets, false, false, false, DateTime.Now, DateTime.MinValue, DateTime.Now, true, priority, true, 100); } |
For Pages:
1 2 3 4 5 6 7 8 |
/// <summary>
/// Offers a simple call to publish a components using defaults
/// for all of the publish parameters
/// </summary>
/// <param name="targets">one or more pucliation targets or
/// target types to publish to
/// </param>
public static void Publish(this Page page, object targets,
EnumPublishPriority priority)
{
page.Publish(targets, false, false, false, DateTime.Now,
DateTime.MinValue, DateTime.Now, true, priority, true, 100);
}
|
UnPublish
Very similarly to the publish method, here’s an example for creating a shorter way to call un-publish on a page object:
1 2 3 4 |
public static void UnPublish(this Page page, object targets,
EnumPublishPriority priority)
{
page.UnPublish(targets, true, false, false, DateTime.Now,
false, priority);
}
|
IsPublished
Tridion provides a method to check whether a page is published to a specific Target Type or Publication Target but what if you just want to check whether the page is published or not?
You need to check each target.
Here’s a way to add a method to the page type that will check whether a page is published by providing a list of targets to the method call:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/// <summary>
/// Assert whether a page is published or not
/// </summary>
/// <param name="page">The page in question</param>
/// <param name="targets">A list of target types or
/// publication targets to check
/// </param>
/// <returns>True if the page is published to at least
/// one of the provided targets</returns>
public static bool IsPublished(this Page page, IEnumerable<string> targets)
{
foreach (var t in targets)
{
if (page.IsPublishedTo(t)) return true;
}
return false;
}
|
Release
Its very important to make sure you correctly dispose of the Tridion COM objects exposed by the interops.
Here’s an example of how to easily do that for components and pages without having to add: “using System.Runtime.InteropServices;” to every code file:
For Component:
1 2 3 4 5 6 7 |
/// <summary>
/// Releases the COM Component object
/// </summary>
public static void Release(this Component component)
{
Marshal.ReleaseComObject(component);
}
|
For Page:
1 2 3 4 5 6 7 |
/// <summary>
/// Releases the COM Page object
/// </summary>
public static void Release(this Page page)
{
Marshal.ReleaseComObject(page);
}
|
TOM.NET (5.3 and onwards)
Fields
One of the things I was quite astonished to find when i first started working with the TOM.NET API was that the Component object no longer exposed a fields collection as a property. Instead to get an instance of those fields you are required to write code which is not very intuitive and definitely shouldnt be required for such a basic property.
I’ve since filed a formal request to our R&D department to change this but there’s no guarantee that this is going to change anytime soon.
If you are using Tridion 2009 and .NET 3.5 or brave enough to write your .NET templates on 5.3 or 5.3 SP1 with .NET 3.5 you might be interested in using the following extension method:
1 2 3 4 5 6 7 |
/// <summary>
/// Returns an ItemFields collection for the Component
/// </summary>
public static ItemFields Fields(this Component component)
{
return new ItemFields(component.Content, component.Schema);
}
|
With this method in place to get the fields collection of a component you only need the following: comp.Fields()…
Root StructureGroup
Another oddity in the relatively new API is that the publication object doesnt expose a RootStructureGroup property while it does expose a RootFolder property. Slightly annoying but easily fixed with… you guessed it! An extension method:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/// <summary>
/// Returns the root structure group for this publication
/// </summary>
public static StructureGroup RootSG(this Repository publication)
{
Filter filter = new Filter();
filter.Conditions["ItemType"] = ItemType.StructureGroup;
IList<RepositoryLocalObject> items = publication.GetItems(filter);
if (items.Count == 0)
return null;
else
return (StructureGroup)items[0];
}
|
Conclusion
These are just a few useful methods that can make your Tridion development quicker and more convenient.
Undoubtedly there’s many more such methods people can think of, if you do have some that you use please share them and if we have enough I will create an extension on World with all of them!
Code
You can download the methods ive shown in this article here: code.
for all of the
A few useful String extension methods October 26, 2009
Posted by yoavniran in Programming.Tags: .NET, BCL, configuration, Extension Methods, Strings
1 comment so far
There are a couple of actions I find myself doing over and over again when it comes to strings and frankly, its becoming rather annoying writing the same lines of code over and over again for every application I create.
So, I have created a few of useful (at least for me) Extension Methods that encapsulate the reoccurring logic.
If you are not familiar with extension methods, its a great way introduced in .NET 3.5 to add functionality to an already existing type.
You typically use these methods to attach functionality to types you dont have access to their source code, those could be types in the .NET’s BCL, in a 3rd party library or even your own code you dont think this addition merits a change to the source.
So here are mine:
IsEmpty
This is a simple one born from pure laziness
. While i was working on an application recently I got tired writing
if (String.IsNullOrEmpty(str))…
for the hundredth time so I created an Extension method for the String type that does just that, now i can write it in shorter way:
If (str.IsEmpty())…
/// <summary>
/// Executes the String.IsNullOrEmpty on the current string
/// </summary>
/// <returns>True if either empty or null</returns>
public static bool IsEmpty(this String str)
{
return String.IsNullOrEmpty(str);
}
CsvToList
Working with configuration files quite allot I noticed that many times im passing a collection of (usually) comma separated values in a single string and then to parse this list im using the String.Split method.
What you usually need to do with the split method is provide a separator character or an array of these separators and optionally use the StringSplitOptions enumeration.
Doing this once is fine but what if you need to do this more than that? here’s my solution:
/// <summary>
/// Parses the String into a list of values separated by a comma (',')
/// </summary>
public static IEnumerable<string> CsvToList(this String str)
{
return CsvToList(str, ',');
}
/// <summary>
/// Parses the String into a list of values separated by the provided delimiter character
/// </summary>
/// <param name="delimiter">A character used in the String to separate between the values</param>
public static IEnumerable<string> CsvToList(this String str, char delimiter)
{
var delString = delimiter.ToString();
var delimiters = new[] { String.Format(" {0} ", delimiter), String.Format("{0} ", delimiter), delString };
return str.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
}
Take
Probably could have found a better name for it. This method lets you specify the start and end index of the sub-string to extract from the original string.
When manipulating strings and extracting sub-strings from other strings this method could come quite handy.
/// <summary>
/// Extension method allowing to state the start and end positions of the sub string to get from another string
/// </summary>
/// <param name="start">The start index of the sub-string</param>
/// <param name="end">The end index of the sub-string</param>
public static string Take(this String str, int start, int end)
{
return str.Substring(start, (end - start));
}
Conclusion
None of these methods I presented in this article are revolutionary by any means, their purpose is to make life a bit easier, especially when like with these examples you find yourself writing the same couple lines of code over and over again.
If at first it seems unnecessary, I promise that after making use of such extension methods youll find them both time saving and convenient to use.
So what extension methods are you using?
Source Code
You can download these methods here: code. I even included a method that creates a CSV String from an IEnumerable<string>
Poem: The Horizon August 25, 2009
Posted by yoavniran in Poetry.Tags: dream, hebrew, life, memory, poem, Poetry
2 comments
This one i wrote on July 2nd, 2009.
The standard disclaimers apply, the poem was originally written in Hebrew therefore the translation may lose or change some of the meanings, rhyming, wordplay, etc.
~ The Horizon ~
I found myself sitting before the horizon
Looking at that distant line
The border between a memory and a touch
A divider between my past and the dream.
I found myself for one moment content
for an instant gazing at it aloof
It – that cuts the imagination to broken shards of glass
The ever threatening wave that is reluctant to come.
As I sat there, I found a tree nearby
Old it was, barren limbs, leafs no longer growing
like me its gaze is full of wonder
but the tree is staying here and I’m already disappearing.
I found myself thinking about that disconcerting horizon
Does more life exist beyond its colors?
Is it covering an internal light, or rather,
Is it holding back the darkness from blanketing my world?
Does the horizon also have searching eyes?
Does it see my already fading footsteps?
For a moment it pleased me to sit here
but I’m rising to go, I’m already disappearing.
The original Hebrew version:
~ האופק ~
מצאתי עצמי יושב מול האופק
מביט אל אותו קו מרוחק
הגבול בין זכרון ובין נגיעה
חוצץ שעובר בין עברי והחלום.
מצאתי עצמי לרגע מרוצה
לרגע באדישות לעברו בוהה
הוא שחותך דמיון לזכוכית שבורה
הגל המאיים אך שלא מגיע.
בעודי יושב שם מצאתי לידי עץ
עץ זקן, ענפיו ריקים ועליו לא צומחים
כמוני הוא מסתכל לעבר האופק ומשתהה
אך הוא נשאר כאן ואני כבר נעלם.
מצאתי עצמי חושב על אותו אופק מתעתע
האם מעבר לצבעיו יישנם עוד חיים?
האם הוא מסתיר אור נצחי, או שמא,
מחזיק מבעד החושך לכסות עולמי?
האם גם לאופק עיניים מחפשות?
האם רואה את עקבותיי שכבר מטשטשות?
לרגע קט הישיבה נעמה לי
אך אני קם והולך, אני כבר נעלם.
Favorite Poems of the Day Up to Date: 21/08/2009 August 21, 2009
Posted by yoavniran in Poetry.Tags: life, loss, love, poem, Poetry, poets, twitter
1 comment so far
As some of you know I’ve taken upon myself to try and publish a link to a poem i like per day on Twitter: #PoemOfTheDay.
Admittedly, I havent been able to keep it up everyday since I started but I did manage to share quite a few over the past few months.
I’d like to take the opportunity to collect some of my personal recent favorites in this post.
Enjoy!
August 19th 2009 – “Metallic Wing” by Efrat Mishori: http://tinyurl.com/mdlv57 – “Metallic wing in its socket, beating unseen.”
August 18th 2009 – “Pleasure for Pleasure” by Peter Stavropoulos: http://bit.ly/3Y7S4O – “…Pleasure for pleasure will surely start”
August 13th 2009 – “Night Heron” by Samuel Peralta: http://bit.ly/rtZ1m – “rising from the waters / like a dream.”
August 11th 2009 – “Sonnet 56” by William Shakespeare: http://bit.ly/hPEcw – “Sweet love, renew thy force! Be it not said…”
August 10th 2009 – “from: Prayers of Atonement” by Lea Goldberg http://bit.ly/klx4t -”If there were torments–then they voyaged toward you”
August 3rd 2009 – “Endless Poem” by Yehuda Amichai: http://bit.ly/jGQ7o – “Within me / My heart / Within my heart / A museum”
July 30th 2009 – “Listening” by Amy Lowell: http://bit.ly/1K8pK – “‘T is you that are the music, not your song…”
July 27th 2009 – “The Garden” by Mark Strand: http://bit.ly/rSKuf – “it shines: even now in the moment before it disappears.”
July 26th 2009 – “Song of Hope” by Thomas Hardy: http://bit.ly/n4rlU – “To-morrow shines soon -Shines soon!”
July 21st 2009 – “On Pain” by Khalil Gibran: http://bit.ly/vmHgr – “…your pain would not seem less wondrous than your joy…”
July 17th 2009 - “Petals” by Amy Lowell: http://twurl.nl/s5v6ai – “…Petal by petal the flower of our heart…”
July 16th 2009 – “When the Eyes Open” by Dahlia Ravikovitz: http://bit.ly/Z8Re0 -”as the soul returns to the body when the eyes open.”
July 15th 2009 – “Touched by an Angel” by Maya Angelou: http://bit.ly/uAerx – “Yet it is only love which sets us free.”
July 12th 2009 – “A Pearl, a Girl” by Robert Browning: http://bit.ly/6rDpB -”…Through the love in a girl!”
July 10th 2009 – “Valentine” by Carol Ann Duffy: http://bit.ly/YMoIj -”I give you an onion. It is a moon wrapped in brown paper…”
July 4th 2009 – “Moonwalk” by Samuel Peralta : http://bit.ly/4sbHqx -”…The words begin to form a song / The melody begins to burn…”
July 3rd 2009 – “Wild Nights” by Emily Dickinson: http://bit.ly/qOMhk -”…Wild nights should be Our luxury!…”
July 1st 2009 – “If You Forget Me” by Pablo Neruda: http://bit.ly/1j9EgT -”if each day,each hour,you feel that you are destined for..”








