10th Anniversary of My Blog!

Yesterday marked the 10 year anniversary of this blog, even though it had two different homes over that time.

I had tried blogging a couple of times earlier. In 1995 I went scuba diving in Egypt for a week, and I documented that on the personal web site I had created. This was done in a diary/blog format using an IBM Thinkpad 701 and pictures taken with a Kodak DC-40 digital camera. All HTML was coded by hand. Some years later I installed the blog templates for Lotus Domino to try it out, but I was never motivated to start blogging for real.

But in 2008 it was the right time. The IBM business partner Lotus911 (later GBS) had registered the domain BleedYellow.com and offered free blog hosting, using IBM Connections. I also felt more confident and wanted to share some code and knowledge as a way to pay back for all the help I had been getting.

I registered an account and started blogging right before Lotusphere 2008. I kept blogging at BleedYellow.com for a number of years, but in October 2012 I moved my blog to WordPress and my own domain. I was able to import all my existing blog entries to WordPress, so you can still view them even though GBS did shut down their US operations in 2015.

I started by blogging mostly about Notes and Domino, with some more personal articles. Eventually I expanded my blogging to cover other technologies, like web development using Javascript and jQuery, but still with an eye towards Domino developers.

Lately I have also started to share code related to NetSuite, a platform I have now been working with for a little over a year. I have been wanting to blog more about NetSuite, but been lacking the time. But don’t expect the content about Notes and Domino to go away. Version 10 is coming later this year, and I expect there will be plenty of new features to write about!

At times I have not been blogging as much as I wanted, due to work as well as some health issues I had in 2016. I apologize about that. I hope to be able to blog more frequently in the future. I have several subjects lined up, I just need the time to write.

Thank you for reading my blog and commenting on my articles. To know that I was able to help someone makes it worth to keep blogging.


Blogging anniversary – 7 years!

Yesterday marked my 7 year anniversary of this blog. It was in January 2008 I created my TexasSwede blog on BleedYellow.com, and in October 2012 I moved it to my own domain and switched to WordPress hosting.

My blogging frequency have been going up and down, based on what’s been going on in the IBM/Lotus world as well as how busy or motivated I have been. Over the years I have written 404 blog entries (including this one), making it an average of almost 58 entries/year or close to 5 entries/month.

So why am I blogging? I am not sure there is just one simple answer to that. I think it mainly have been a combination of wanting to share information I have gathered over the years , as well as wanting to be seen and/or recognized. The latter was more of a result of my blogging, not a reason in itself to blog, but it encouraged me to continue.

I had started blogging a couple of times earlier using the different Domino based blogs available, but those attempts ended up being just one or two posts. The one exception was in 1995 when I “blogged” during a scuba diving trip to Egypt. I wrote a web diary every day on the IBM Thinkpad 701 laptop I brought with me and also added photos I took with an early Kodak digital camera (DC-40 I believe I used on that trip). I did not have any kind of internet access during the trip, so I uploaded the page and pictures after I got home. Also, as opposed to a modern blog, the oldest/first day was at the top, as in a more traditional narrative/diary. I lost the text of that diary since, but some of the pictures have survived.

In 2008 I started blogging right before Lotusphere. I wrote a couple of entries the first few days, and I got good feedback on them, as well as several hundred views. So I got encouraged and continued. After about a month I got brave enough to start sharing code on my blog, and I also started using it as a way to expand on answers I gave to question in the developerWorks forums.

The next year at Lotusphere more people recognized me from my blog, and that further made me feel like it was worth my time and effort to share information. Eventually my posts became less frequent. One reason was that it was hard to post code on the IBM Connections based blog, and only registered users could comment, limiting the public participation. Those were among the main reasons for my move to WordPress in 2012, together with a desire to use my own domain.

With WordPress it was suddenly much easier to post code and embedded videos, and my blogging started up again. I could now also easily blog from my smartphone. I have been lucky enough that my boss let me blog more or less during work hours, and even publish code and information I generate for work. Usually I do it during lunch or after work, though.

Lately I haven’t been blogging that much, due to things going on in my life. The next few months will be very busy for me, but I hope to be have the energy to continue sharing code and information here. Last year I was so busy at Lotusphere IBM Connect that I did not write very much from there, but I hope to do a better job this year. Especially for my many friends who are not able to go this time.

So to everyone who been reading my blog: Thank you!
And an extra big thanks to everyone who took the time to comment on my ramblings.



#ThrowbackThursday – World War 1

OK, this is a pretty extreme #ThrowbackThursday, but I wanted to promote a blog I have been reading since the beginning of the year.

Arthur Linfoot, who took part in World War 1, wrote a diary every day from January 1 1914 to December 31 1918. It was written in Pitman’s shorthand, and his son Denis Linfoot translated the diary and is now publishing it as a blog, each entry posted to the day 100 years after it was written.

This is a fascinating way to follow World War 1, especially since my grandfather also served in it (but on the German side). So if you haven’t visited http://www.arthurlinfoot.org.uk yet, take a look at it and perhaps you get hooked just like me.

Sample entries from http://www.arthurlinfoot.org.uk/
Sample entries from http://www.arthurlinfoot.org.uk/

Happy New Year – My Year in Review

2013 has been a very interesting year for me.

It started with a trip to Connect in Orlando that almost did not happen. The company I work at was in a money-saving mode, and denied my request to attend. I had already resigned myself to this and come to terms with the fact that I would be missing Lotusphere for the first time since I stared going in 1997. It was made even harder as I heard several of my friends in the community saying that they feared this would be the last Lotusphere, either for them or for the conference itself, in the shape we knew it.
But suddenly out of the blue I was offered a press pass to cover Connect, like I had been doing in the past for a few publications (as well as a blogger, during the now-cancelled blogger attendance program). With the conference fee covered, and with a kind offer from a friend in the community to share his room, I purchased my own airline tickets, requested vacation days at work and headed to Orlando for what I thought might be the last time.

Connect 2013 was, despite the name change, better than I expected. It was a great conference, my schedule was full of excellent sessions and I got to meet many of my friends again. There were a few faces missing, but many of the familiar faces and voices were seen and heard during the week.

Unfortunately, one voice was silenced forever the Sunday before Lotusphere. Kenneth Kjærbye was killed in a motorcycle accident, during a yearly ride with other attendees and presenters. This of course affected many in the community, but my opinion of IBM increased more than a few notches from hearing how well they responded to the tragedy.
This was not the only familiar face in the community that we lost. Rob Wunderlich and Jens Augustiny both passed away, also way too early,  in 2013. You will all be missed.
There were also some other emotional farewells at Connect 2013, with long-time attendees being there for the last(?) time.

On a more personal level, things changed as well in 2013.
I still haven’t started working very much with XPages, but with the release of Notes and Domino 9.0 in 2013, it feels like XPages are more solid and ready for prime time. My workplace is still on Notes 8.5.2 Basic client, which limits me to classic Notes development. I use Notes/Domino 9.0 at home, though, and I am very impressed with the stability.
I also started on a web application, developed using Bootstrap and jQuery, working with a Domino-based backend. I can’t talk too much about this project yet, but it has a lot of potential to help children in need, and I am very happy to be in a position to work on it.

I also moved, something that if you know me is a big deal. I don’t like to move. I actually loathe moving, which is why I had been living at my apartment for 9 1/2 years when I finally moved. But the reason I moved was to move in with my girlfriend in Dallas. In the end of 2012, I was lucky enough to meet Chrissy, and during 2013 the relationship developed to a level where we decided that I should move in. It is wonderful, but also sometimes annoying, to be in a relationship with someone who is on the same level as oneself when it comes to intelligence, logic and knowledge. Sometimes I wish her mind was not as sharp, like when she manages to out-logic me in a discussion. 🙂

Work have been steady busy. I have been involved in a couple of projects where we provide data from Domino databases to external applications. In one case it was to create a nightly export in CSV format to be used in a SalesForce application, other one was to create a RESTful web service to return JSON used in a web application being developed for our underwriters. I have of course also been busy keeping up with the requests from different department heads to modify their different mission-critical Notes application, based on new business requirements and regulatory demands as well as department reorganizations.

The end of 2013 was the pinnacle of the year. Not only did I get moved in with Chrissy, I also received a surprise email telling me that I had been selected IBM Champion. Professionally, this is huge for me. I feel very flattered and humble to be on the same list as so many of the great names in the community, people who I looked up to and learned from for years.

Looking forward to 2014, I have a busy year ahead. Connect 2014 is coming up in just over 3 weeks, and this time work approved and paid for the trip. Despite some missing faces, I hope that Connect 2014 will be as good as previous years, and that I will learn new technologies, learn more about what I already know, and connect with new people.
I also have some additional trips planned. Hawaii in the end of March for a conference (hopefully with some personal time available, as I have never been there before), London in May to visit my best friend who lives there with his family, and perhaps a quick trip over to Holland to visit Chrissy’s cousin who is living there, a real life (well almost) Indiana Jones. 🙂

I am also planning to step up my blogging some in 2014. 2013 was the first full year of my blogg being hosted on WordPress, but I did not setup the statistics to save more than the last 120 days, so I don’t have a full years worth of statistics, something I realized just the other day. I wrote 60 entries this year on my blog, as well as seven on SocialBizUG.org, but I hope to be able to create even more content in 2014.

So in closing, I want to wish everyone reading my blog a Happy New Year, may 2014 be a great year for you and your families.


Update: Blog comments working again!

I got the comments working again, all existing comments are being displayed properly.

So feel free to comment again. And just as a reminder, my policy for comments are copied below.

My policy on comments

I require a real name (or well-known handle) and a real email address. If the address sounds bogus or made up, I reserve the right to delete the comment. Same thing for trolls. You can be critical of what I write about, but then you must come with some valid arguments. Just saying “Notes sucks”, “Android sucks”, or anything similar is not constructive. If you think a product I write about is not good, explain why.



Blog issues – comments not displaying

After updating the blog to the iFeature Pro 5 theme, comments are not being displayed. The contents is there, but something in the template code prevent them from being displayed. I have contacted their support, and hope to have it working soon.

There are also a couple of other issues that I (as well as other users) experienced and reported, and the makers of the theme are in the process of fixing it. That is why the slider at the top of the main page is gone. The major issue is however that images are not being inserted. They have to be coded by hand using HTML, after being uploaded to the blog. A fix is promised for the next version, due out in a few days.



Reminder – Great icon set for free!

Two years ago I wrote about the FamFamFam Silk icons, a free set of 1000 icons that I use. I still use them in all my applications, and have even modified a few of them to suit my purposes. They come as PNG files, but I have converted them to GIF format so I can use them in for example Notes action buttons.

If you downloaded my generic database template, which I posted about two years ago as well , you have the GIF version of all the icons as image resources.

So if you haven’t taken a look at those icons, you should. Few things help your application or website to look professional as a set of consistent looking icons. And yes, it works in Xpages. You just have to add a little piece of CSS to make it look good, as Per Henrik Lausten told me when I posted about that in StackOverflow.

The magic code is:  .lotusBtn img {   margin-right: 10px; }
This will give you 10 pixels between the icon and the label. It might be enough with 5 or 6 pixels, depending on what the desired look of the page is.



Stock images for blogs, websites or applications

Most of the images I publish on this blog, use on my websites or use in applications I create are created by myself. But sometimes I need a stock image of some kind, for example of hands typing on a keyboard and the bands in the corner of the featured post images. Sometimes I find free images/graphics, but sometimes I want something special or don’t have the time to search badly designed free websites.

There are many commercial websites that offer stock photos, but I started using StockFresh.com recently. I find the site easy to use, I can pre-purchase credits (as few as 10 at a time), and the cost of the images in different sizes are clearly marked.

Earlier today I purchased and downloaded higher resolution versions of the Swedish and Texas flags, so I could recreate my logo in higer resolution. This way I also know that the logo is 100% legit, as I don’t remember where I got the images I used previously.

The site sell both photos and vecor clipart, below is a skyline of Stockholm I downloaded a while back for another project. There are similar skylines for many other cities as well.

Try the site out and see what you think.

Disclaimer:  The link to StockFresh.com is my affiliate link, but since my application still is pending, I don’t know if it will make a difference.


Lightbox Plus – Thanks Bob Balfe!

Earlier today, Bob Balfe wrote a blog post about installing Lightbox Plus on his blog. I decided to test it on this blog as well, and I really like it. I might make the images I post slightly smaller in the future, as the plugin does not scale down the full-size image is it is larger than the browser window.

Installing the plugin was as easy as it could be. I just selected “Add New”, searched for the plugin,clicked the install button and then activated it. There was a warning that the plugin might not work with the newer version of WordPress I am running, but it all worked for me without any issue. I did not even have to configure anything, the images started showing up in the lightbox automatically. There are a few settings, mainly for the style of the lightbox. But you don’t even need to touch that if you don’t want.

Thanks Bob for posting about this!

1 Comment

Moving blog posts from Connections to WordPress

As I switched from IBM Connection to WordPress for my blog, I started thinking about my existing content. Was there a way to move them all over without having to manually copy and paste and recreate all 268 entries?

Well, there is, and this is how I did it, using just a  few tools. First I used Wget to retrieve my old blog. This put all the posts on one folder (entries), and all images in another (resource). It was then a simple task to write a Lotusscript agent that processed each file in that folder and read the content, parsed out the title, date originally posted and HTML for the blog post itself. I put that data into separate Notes documents, after performing some cleanup and string replacement.

I had already moved all images to a filer on my primary web server, so I performed a replace of the image URLs in the HTML, to have any images pointing to their new location. I also had to fix some special characters and replace them with the corresponding HTML entities.

Now when I had all the data, I just wrote another agent to export the data out again, to create a CSV file. I then installed a CSV importer in my WordPress blog and used to to import the file I just created.

After a few tweaks I performed a successful import. Later I realized I had missed a few special characters, so I had to fix those entries, but we are talking about 4 or 5, out of 268 entries.

If there is an interest, I might clean up the code a little and create a nicer UI (right now many of the values like path and URL are hard-coded) and then release the code if anyone else is planning to go through the same exercise. Below is the existing code to read the blog entries into a simple Notes database.

Option Public
Option Declare

Dim entrydir As String
Dim resourcedir As String

Sub Initialize
	Dim filename As String
	Dim cnt List As Integer
	Dim blogentry List As String
	Dim tst As Variant 

	entrydir = "D:\BleedYellowBlog\www.bleedyellow.com\blogs\texasswede\entry\"
	resourcedir = "D:\BleedYellowBlog\www.bleedyellow.com\blogs\texasswede\resource\"

	cnt("Total") = 0
	filename = Dir$(entrydir + "*.*")
	Do While fileName <> ""
		blogentry(filename) = entrydir + filename
		cnt("Total") = cnt("Total") + 1
		fileName = Dir$()

	cnt("Processed") = 0 
	ForAll be In blogentry 
		cnt("Processed") = cnt("Processed") + 1
		Print "Processing " & cnt("Processed") & " of " & cnt("Total")  
		Call ProcessBlogEntry(ListTag(be),be)	
	End ForAll
End Sub

Function FixHTML(html As String) As String
	Dim tmp As String

	tmp = Replace(html,_
	tmp = Replace(tmp,_
	tmp = Replace(tmp,"/BLOGS_UPLOADED_IMAGES/","/uploaded_images/")
	tmp = Replace(tmp,"´",|"&acute;"|)
	tmp = Replace(tmp,"’","&acute;")
	tmp = Replace(tmp,"“",|&quot;|)
	tmp = Replace(tmp,"”",|&quot;|)
	tmp = Replace(tmp,"…",|"..."|)
	tmp = Replace(tmp,"<wbr>",||)
	tmp = Replace(tmp,"> < ",|>&anp;nbsp;< |) 	
        FixHTML = tmp 
End Function 

Function ProcessBlogEntry(filename As String, localpath As String) As Boolean 	
        Dim session As New NotesSession 
	Dim db As NotesDatabase
        Dim blogentry As NotesDocument 	
        Dim rtitem As NotesRichTextItem
        Dim siteurl As String  	
        Dim html List As String
        Dim tmp As String
        Dim import As Boolean
        Dim titlesection As Boolean
        Dim row As Integer
        Dim currow As Integer  	
        Dim titletext As string
        Dim htmltext As String
        Dim title As String
        Dim posteddate As String
        import = False 	
        titlesection = False
        row = 0 	
        Open localpath For Input As #1 charset="UTF-8"
        Do Until EOF(1)
            Line Input #1, tmp
            If InStr(tmp,|class="entryContentContainer"|) > 0 Then
	 	import = True		
	    End If
	    If import = True Then
		If InStr(LCase(tmp),|<!-- rating -->|) > 0 Then
			import = False		
		End If
 	    End If
	    If InStr(LCase(tmp),|<!-- entry title and info -->|) > 0 Then
		titlesection = True		
	    End If
	    If titlesection = True Then
		If InStr(LCase(tmp),|<!-- user name, date, meta info -->|) > 0 Then
			titlesection = False
		End If
	    End If
	    If titlesection = True Then
		titletext = titletext + tmp
	    End If
	    If InStr(LCase(tmp),|blogsdate.date.localize|) > 0 Then
		posteddate = StrLeft(StrRight(tmp,"localize ("),"));")
	    End If
	    If import = True Then
		row = row + 1
	 	html(CStr(row)) = tmp
	    End If
	Close #1

	Set db = session.CurrentDatabase 
	Set blogentry = New NotesDocument(db)
	blogentry.Form = "Blog Entry"
	title = Replace(FullTrim(StrLeft(StrRight(titletext,"<h4>"),"</h4>")),"@amp;quot;",|"|)
	Set rtitem = New NotesRichTextItem(blogentry,"Content") 
	posteddate = Format$(JSMillisecondsToLSDate(CDbl(posteddate)),"mm/dd/yyyy hh:nn") + " GMT"
	siteurl = "http://www.bleedyellow.com/blogs/texasswede/"

	Call blogentry.ReplaceItemValue("Title", title)
	Call blogentry.ReplaceItemvalue("PostedDate", posteddate)
	Call blogentry.ReplaceItemValue("OriginalURL", siteurl + filename)
	currow = 0
	ForAll t In html
		currow = currow + 1
		If InStr(t,	|class="entryContentContainer"|)>0 Then
			' Do nothing				
			If currow < row-2 Then
				Call rtitem.AppendText(fixhtml(t))
				Call rtitem.AddNewLine(1,true)
			End If
		End If
	End ForAll
	Call blogentry.ComputeWithForm(True,False)
	Call blogentry.Save(True,True)

End Function

Function JSMillisecondsToLSDate(millis As Double) As Variant
	Dim ndt As NotesDateTime
	Dim zoneOffset As Integer
	Dim jsEpochDouble As Double, adjustedEpochDouble As Double, millisDateDouble As Double

	JavaScript millisecond values are based on GMT
	but writable LotusScript date/time values are local.
	We need to know the local timezone offset from GMT,
	and for that we need a NotesDateTime object
	with both date and time components

	Set ndt = New NotesDateTime(Now)
	zoneOffset = ndt.TimeZone

	'The JavaScript epoch is midnight (day start) January 1, 1970 GMT
	jsEpochDouble = CDbl(DateNumber(1970,1,1))

	'Adjust epoch to local time
	adjustedEpochDouble = jsEpochDouble - (zoneOffset/24)

	'There are 86400000 milliseconds in a day
	millisDateDouble = adjustedEpochDouble + (millis / 86400000)
	JSMillisecondsToLSDate = CDat(millisDateDouble)
End Function


And here is the  agent to export the documents to a CSV file that can be imported into a WordPress blog using the CSV import plugin.

Option Public
Option Declare

Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim doc As NotesDocument
	Dim filename As String

	filename = "d:\bleedyellow.csv"
	Open filename For Output As #1
	Print #1, |"csv_post_title","csv_post_post",| + _ 
                  |"csv_post_type","csv_post_excerpt",| + _ 
                  |"csv_post_categories","csv_post_tags",| + _ 
	Set db = session.Currentdatabase
	Set view = db.GetView("By Title")
	Set doc = view.GetFirstDocument
	Do Until doc Is Nothing
		Print #1, GetCSV(doc)
		Set doc = view.GetNextDocument(doc)	
	Close #1
End Sub

Function GetCSV(doc As NotesDocument) As String
	Dim rtitem As NotesRichTextItem 
	Dim tmp As String
	Dim content As String

	Set rtitem = doc.Getfirstitem("Content")
	content = Replace(FullTrim(rtitem.GetUnformattedText()),|"|,|""|)
	tmp = |"| + Replace(doc.GetItemValue("Title")(0),|"|,|""|) + |",|
	tmp = tmp + |"| + content + |",|
	tmp = tmp + ",,"
	tmp = tmp +|"| + "Old Blog Post" + |",|
	tmp = tmp +|"| + doc.GetItemValue("Tags")(0) + |",|
	tmp = tmp +|"| + doc.GetItemValue("PostedDate")(0) + |",,,|

	GetCSV = tmp
End Function
1 Comment

Welcome to my new blog

After having my blog hosted by Lotus911 (later GBS) at bleedyellow.com for almost five years, I have decided to switch blog platform. The main reason is due to limitations in IBM Connections as a blog platform (no anonymous comments and issues for example when trying to embed videos). I decided to go with WordPress as my blog platform, as it is common and widely supported.

Another advantage with a WordPress hosted blog that is that I now can have the blog hosted under my personal domain, as blog.texasswede.com.

Earlier today I imported the existing content to the new blog. I will write about that process in another blog entry shortly. Basically I wrote a couple of Lotusscript agents in Notes and retrieved the existing blog content and then reformatted it for WordPress. As I did not have very many comments, I did not import them, as I decided the amount of work was not worth it. They can be found on my old blog, as I will keep it alive. That way all the links to it from different placs will also continue to work.
I have not verified all old entries, so if you notice anything that need to be fixed, please let me know. One known issue is when I reference another blog entry, the link will currently take you to bleedyellow.com.

Again, a big thanks to GBS who hosted my blog for the last five  years, and who got me into blogging. I had made some attempt prior to 2008, but never got motivated enough. Hopefully the switch to WordPress and the greater possibilities will lead to me blogging more frequently than lately.


End of content

No more pages to load