Katrina 1 year later – Celebrate Life event schedule in Waveland today

Posted with permission from author.  Over the next few days, i’ll look for photos online to link to.

To all those who have helped:

We know that we will never be able to remember or to thank all those who came to our aid after Katrina. Some gave gifts of food, water, ice, clothing, gift cards, tools, computers, appliances, fire trucks, police cars, utility vans, buses and a myriad of other things to help us through those early days. Some traveled for days in trucks filled with supplies. Others delivered washers and dryers so that we could do our laundry. Some came and set up emergency facilities to feed, cloth and provide medical aid to people very much in need.

Some came and dropped off things, others stayed for weeks and months, and others still are here. Some knew to come right away and others knew we would need sustained help. Hundreds of volunteers have donated thousands of hours helping people gut out their homes, pick up debris, and paint. And they listened and gave hugs freely as they helped people begin to pull their lives together.

As we continue to Rebuild Waveland, we could never say THANK YOU, in a big enough way. We know that many of you came because of your faith and others just because they saw people in need and could not turn away. Your kindnesses were unbelievable!

As we approach the one year anniversary of the day that Katrina changed all our lives, we are reminded of the trials we have endured and count our blessings. You have been there beside us. You have given us much hope and help.

We were planning to spend the day pretty quietly, but as events unfolded and continued gifts came our way, we have a very busy day planned. We invite all of you to be here to spend the day with us. If you can’t be here physically, please know that you are in our thoughts and prayers as we remember those who came to help.

Schedule for “Celebrate Life” in Waveland, Mississippi, Tuesday, August 29, 2006:

8:00 a.m. Ecumenical Prayer Service on the Beach at Coleman Avenue
9:00 a.m. Moment of Silence as we remember those who lost their lives in Katrina.
9:01 a.m. Hancock County Bells Ring – to signify a “New Birth.”

4:00 p.m. Parade down Coleman Avenue to honor Volunteers and Contributors
5:00 p.m. Dedication of Katrina Memorial on the Beach at Coleman Avenue
Acceptance of Gift for Rebuilding City Hall
5:30 p.m. Live Music on the Beach, Tailgate Party
Special “Tribute to Waveland” Appearance by Colin Raye
Followed by Heather and the Monkey King
Bring lawn chairs, picnic baskets and beach blankets.

Please join us, if you can.

Mayor Tommy Longo
City of Waveland, 335 Coleman Avenue, Waveland, MS 228-467-4134

Recent Power Toy "Getting the word out" Changes

Update:  I’ve attached the OPML file (see bottom of this post) used to create the MSDN RSS feed, in case you’re having issues with the RSS feed on the power toy landing page.

Over the past week, we’ve made some changes to the way we interact with the community, some based on internal discussions and others based on your feedback (keep it coming!):

Power Toy Forums is now retired.  You can now find all the forum posts to your favorite power toys on their respective CodePlex projects

Power Toy Landing Page pulling from team OPML file.  Now there’s an inclusive RSS feed for everything happening on our blogs (instead of just reading my power toy RSS feed).

Keep the feedback coming!

The Future of the Power Toys Forums

Many of you power toy users out there have already visited our power toy forums
We created this forum to discuss current and future power toys.  This forum has supported both the needs of our community and our internal processes very well.

However, CodePlex itself has discussion boards, aka forums, associated per project.  I’ve struggled for some time with what to do with our forums versus those on CodePlex.  After having attended OSCON, i’m convinced that we need to migrate to CodePlex discussion boards.

Reasons for Migrating to the CodePlex discussion boards

  1. Categorization of comments – having just MSBee-related comments in MSBee project, etc.
  2. More diverse content - The MSDN Forum boards are optimized for "How Do I" related Q&A. What I want to see moving forward is having any internal discussions posted on our disucssion boards (i.e. triage notes, core-developer monthy sync-ups, dates for potential chats, etc.) This goes back to the first bullet point that if i don’t have the discussion forums grouped by project, it will become increasingly difficult to find related project content.
  3. One less registration system, One less website - i’ve always felt weird having to redirect people from Codeplex to the MSDN forums.  I believe most, if not all, power toys people, have an account on MSDN Forums.  But it goes back to having the discussion boards more closely tied to each project, and having to enter a new site, with a new username / identity, seems to take away from building a community around the project.

And now the trade-offs

  1. Moving away from the consistent, one-stop shop nature of the MSDN Forums.  As i said earlier, most power toy people, if not all, are using the MSDN forums.  Now i’m asking them to learn/use yet another web forum…
  2. We lose the internal tracking ability that the MSDN Forums provide us.  We get internal notifications about Q&A status.  However, i’m hoping CodePlex will give us more specific RSS feeds on that we can subscribe to regarding forum Q&A updates.

For future tools, we’ll post our questions in the forum for the corresponding technology.  For example, if i were going to write a tool called "Sara’s Super-Snazzy C# Snippet Sampler," (argh, what is this writing technique called in English courses?)  i will post my questions / opinion polls in the C# IDE / editor forums.

Just another step closer to bringing you a better power toy community…

brought to you by Windows Live Writer!

Good thing to know when making a custom editor

Good thing to know when making a custom editor
By Matthew Manela (Developer Solution Intern)

Here’s a walkthrough to a problem I ran into when I was trying to create a custom editor that lets you change what language the code window is in on the fly. 

Here is the situation: You are developing a VSIP package for Visual Studio.  In this package you want to create a custom editor that will open a simple xml file called simple.myxml which contains data like this:

<Data>

  <Title>My Loaded File</Title>

  <Language>C#</Language>

  <Code>         

      string word = "editor";

      foreach(char letter in word.ToCharArray())

      {

            Console.WriteLine(letter);

      }         

  </Code>

</Data>

 

Your editor will read this xml file and parse it and populate two fields in an editor control.  One is the title field which is just a text box that will contain the text between the Title tags.  The other is a control which contains an IVsCodeWindow with an IVsTextBuffer attached to it.  This text buffer is completely in memory and has no association with a file on disk.  The code windows language service will be set based upon the text in the Language tags and the text in the code window will be loaded with the text between the Code tags.  The finished result after loaded simple.sml is something that looks like this:

First Code Editor displaying correct color coding

This all seems to have worked well. The file loaded was parsed correctly and was loaded into my editor. The color coding worked so we have nice C# color coding. At this point you think “wow, so easy”. Then you load your second file that has different code and you see this:

Second Code Editor not displaying correct color coding

It seems now only the text color coded correctly and nothing else did.  But what went wrong.  If you try this with a J# language service you see the same problem, but you don’t see it with the VB language service.

The reason this isn’t working has to do with how the C# and J# language services figure out if two text buffers are the same.  They check something called the BufferMoniker.  Usually if your text buffer is directly correlated with a file on disk the buffer moniker will be the filename.  However, since our text buffer is completely in memory our buffer moniker is an empty string.  This caused a problem only when you open your second file.  The first file color codes fine but when you open the second the language service will make a check and say “Is the current buffer moniker the same as the previous one then don’t refresh the color coding lexical data”. In this case it will check is empty string equal to empty string, then don’t refresh lexical data.

This problem is hard to figure out but the solution isn’t hard.  You need to set a unique buffer moniker for each of your text buffers.  You can set the buffer moniker uniquely using a generated Guid and your IVsTextBuffer object.

    IVsTextBuffer myTextBuffer;//defined elsewhere

   

 

    IVsUserData userData = (IVsUserData) myTextBuffer;

    string uniqueMoniker = Guid.NewGuid().ToString();

    Guid bufferMonikerGuid = typeof(IVsUserData).GUID;

    userData.SetData(ref bufferMonikerGuid, uniqueMoniker);

That is all you need.  Before your load your doc data just set the buffer moniker for the text buffer you created and now color coding will work for more than one window. 

Not so Fast … We are not done yet!

Depending on how you are inserting text into your code window you can run into more problems. Let’s say you use the following method to insert text into the code window:

      void SetText(string text)

    {

 

        IVsTextLines vsTextLines;

        vsCodeWindow.GetBuffer(out vsTextLines);

        Object oObj;

        vsTextLines.CreateEditPoint(0, 0, out oObj);

        EditPoint editPoint = (EditPoint)oObj;

        editPoint.Insert(text);

 

    }

This worked fine until you added the buffer moniker. The problem here is that the automation model (which contains EditPoint’s) makes an assumption. If a buffer moniker is not empty that means there is a file on disk. Since your buffer moniker isn’t a file on disk then CreateEditPoint will fail and oObj will be null. So the wonderfully simple solution above has broken your code.

The answer to this problem is: don’t use the automation model. Ideally you would be able to use the automation model to edit the text buffer but given that limitation you can still get SetText to work. You can use ReplaceLines in IVsTextLines to replace the content in the text buffer with other text.

public void SetText(string text)

    {

        IVsTextLines vsTextLines;

        vsCodeWindow.GetBuffer(out vsTextLines);

        int endLine, endCol;

        textLines.GetLastLineIndex(out endLine, out endCol);

        int len = (text == null) ? 0 : newText.Length;

        //fix location of the string

        IntPtr pText = Marshal.StringToCoTaskMemAuto(text);

        try

        {

            textLines.ReplaceLines(0, 0, endLine, endCol, pText, len, null);

        }

        finally

        {

            Marshal.FreeCoTaskMem(pText);

        }

    }

Now your custom editor control works. Often a problem that seems impossible has a simple solution that’s really hard to find.