Building a learning routine

The industrious Protestant Danes have dropped more consonants onto their icy windswept soil than any indolent tropical tribe.

Guy Deutscher, Through the Language Glass: Why the World Looks Different in Other Languages

To accomplish my ultimate goal of learning Danish, it’s important to include activities that focus on the four areas of language learning: reading, listening, speaking, and writing. The focus area is indicated on each task. My schedule for the next week:

Saturday

  • Blog daily tasks for the next week (this post!)

Sunday

Monday

  • Review DC101 conversation and practice speaking (R) (L) (S)
  • Write and practice teacher recording (W) (S)

Tuesday

  • Review teacher commentary
  • Review DC101 conversation and practice speaking (R) (L) (S)
  • Read and translate one paragraph of Kvinden i Buret. (R)

Wednesday

  • Review DC101 conversation and practice speaking (R) (L) (S)
  • DC101 Beginner Lesson #7: Shopping for Clothes in Denmark (R) (L)
  • Record grammar lesson, new words (W)

Thursday

  • Review DC101 conversation and practice speaking (R) (L) (S)
  • Write and practice teacher recording (W) (S)

Friday

  • Review teacher commentary
  • Review DC101 conversation and practice speaking (R) (L) (S)
  • Write and record short text related to weekly lessons (W) (S)

Saturday

  • Review DC101 conversation and practice speaking (R) (L) (S)
  • Blog about my success!

Every day will include the following tasks:

  • Maintain Duolingo streak (R) (L) (S)
  • Flashcard practice (R) (L) (S)

As of today, I am at 15264 XP on Duolingo (daily lessons completed). With a minimum of 20 XP per day, I should be past 15404 by next Saturday.


Time-permitting, I will also work on the following:

See you back here next Saturday!

Frederiksborg Slot, Hillerød, Denmark

Accountability

I’ve decided to get serious about accomplishing something that I’ve dithered about for the past 30-odd years — learning Danish.

My cousin Henning started teaching me Danish way back in 1987, starting with numbers and the alphabet. Since then, I’ve spent some time living in Denmark, have taken in-person classes, and used Duolingo on and off for a few years (username: caelestia_2000), but I still can’t hold a real conversation with anyone.

So I’ve decided to invest in some online training with a teacher.

Now, just signing up and paying for a course isn’t going to make me any more successful than I’ve been in the past. What I really need are goals, a plan, and accountability to that plan.

This blog post and those that follow are one of several steps I’m taking to be accountable.


I was six years old the first time my parents took me to Denmark. I don’t remember much from that trip; most of my “memories” are from the photo albums. The second time, I was thirteen. It was then that I fell in love with the country of my father, and started dreaming of moving there. In my final year of high school, I announced that I wanted to go to Denmark by myself and live there for a while. My father, a strong believer in not interfering with his children’s’ lives, made the arrangements for me to stay with his brother’s family.

So off I went, age seventeen, to work on a mink farm. But back then, I was too shy and fearful of looking stupid to try and talk Danish to my relatives.

Learning to skin mink, back when I had way more hair.

Fast forward 30 years, and I’m far less shy, so time to make advances in my language learning. I have multiple reasons for becoming fluent:

  • Family: I would like to be able to have conversations directly with my older relatives who don’t speak English. There are only three of my father’s siblings still alive and it would be wonderful to talk to them directly and hear their stories of my dad. As an amateur genealogist, these stories are like gold.
  • Family: When I visited a cousin on my most recent trip to Denmark, I felt frustrated because, while she spoke English, her husband didn’t, so he was either left out of the conversation, or everything needed to be translated for him. She also gifted me with a Danish mystery novel, as encouragement to continue learning. I’ve translated the first paragraph of the prologue so far!
  • Life: Since childhood, I’ve wanted to move to Denmark. I don’t know if I will ever get that chance, but I figure with the language under my belt, my chances of getting a job might be a fraction higher.
  • Genealogy: I’ve learned the basics of reading parish and census records, but understanding notes and expanding out to non-standard records will help my research.

In my next post, I will detail specific goals and outline a weekly plan to work towards them. Stay tuned!

LAURIDSEN, Karl Henrik: Brick Wall

In genealogy, there comes a point in everyone’s research where there are no more records, and no route further into the past. Unless you’re descended from royalty or some other person of historical significance, that path into the past may end within a hundred years, or four hundred years, depending on the location.

I have been very fortunate on my mother’s French side to have well-documented Québec lineage, many lines of which can be traced back to France in the 16th or 17th century. Those records in the French archives are challenging to decipher!

On my father’s Danish side, I can trace most branches back to the mid to early 19th century, but I’ve been confounded by one branch where the brick wall is an illegitimate birth. Of course, such a birth was scandalous at the time, so it would not be surprising to have no information about the father. But in my case, I had a name!

The birth record (12) of Martin Henriksen in 1877 in Møborg (Rigsarkivet image).

Martin Henriksen was born on 10 August 1877 in Møborg parish of Ringkøbing Amt to unmarried Ane Elisabeth Ingvardsen and unmarried Karl Henrik Lauridsen (as best I can decipher) of Ulfborg parish.

The note in the last column of the parish record is of particular interest (my transcription and interpretation).

Moderen opholdt sig 10 mdr. i Ejsing Sogn hvortil undfangelsen er sket. Faderen har skriftlig erkjendt sig paterniteten (faderskabet).

This translates as “The mother temporarily stayed 10 months in Ejsing parish where she got pregnant. The father has acknowledged the paternity in writing.” (If you can help me to improve the Danish transcription or English translation, please comment below.)

It was typical of the youth of lower-income families to work outside their parents’ home, and quite often in a different parish. In this case, Ane was working in Ejsing, likely as maid.

My understanding of parish obligations is still minimal, but I believe there was some form of subsidy for unwed mothers from either the parish where they conceived or gave birth. In this case, the impregnation occured in Ejsing, so I also checked the parish register there just in case there was additional useful information. As was typical for the time, there was also an entry there.

The record (0) of Martin Henriksen’s birth in Møborg in the Ejsing parish (Rigsarkivet image).

The notes within this record note the father’s name as Karl Martin Henriksen of Ulfborg parish. I see this as a bit suspicious; it seems more like a recording error, with the father and son having practically the same name. Or it could be that the son was intentionally named directly after his father?

Since finding these records, I have searched every combination of the father’s name I can think of but have found no records that lead me to conclude that my search result is the same person. I will follow up this post with additional details about the various searches I’ve done and what I’ve found.

In the meantime, if Karl Henrik Lauridsen or Karl Martin Henriksen of Ulfborg appears in your tree, born around 1850, I would love to hear from you!

Confluence on Windows Azure

I’m a big fan of Atlassian products, particularly their Confluence wiki. Since leaving a job where I was the Confluence administrator, I’ve really missed the ease of its use, compared to the SharePoint piece of crap at my current job. So I decided to set up my own instance on a Windows Azure server.

First off, let me say that I am by no means knowledgeable about Azure. In large part, this is an opportunity for me to learn more about it (and then share what I learn!).

I built a basic A2 (2 cores, 3.5 GM memory) Windows Server 2012 R2 server with Microsoft SQL Server 2014 pre-installed. I then downloaded the 64-bit Confluence installation to my local machine because I got fed up with the default security on the server’s Internet Explorer. So my first problem was how to transfer the file. I solved that by editing the Remote Desktop Connection to include local drives in the connection. After the transfer completed, the application installation went smoothly.

RDP Configuration

RDP Configuration

Following the configuration instructions, I created a new database with the necessary collation and a database owner login and user. I put this information into the JDBC connection settings and watched the database be built.

Once the configuration completed, I logged in with the administrator account and set up a new user. Not surprisingly, when I tried to connect to the website from my local machine, the operation timed out. Now, as I’ve said, I’m not a Azure expert. How do you configure security in Azure?

Googling around, I finally discovered endpoints. By default, Confluence uses the 8090 port, so there needs to be an endpoint defined to connect to that port internally. It is possible to change Confluence’s port with a minor tweak of its server.xml file.

Endpoint screenshot

Azure endpoint configuration for Confluence

After configuring this endpoint, I still couldn’t connect, but this time it was connection refused. Progress, at least. More hunting around. The tip-off came from one minor line in the Azure documentation:

Ensure that the firewall on the virtual machine has been configured to allow the traffic corresponding to the protocol and private port.

Bingo! The missing link. After configuring a firewall port, I was able to connect successfully.

firewall settings

Confluence firewall protocol

I am thrilled to once again have access to a Confluence instance. At this point I’m not sure what the cost will be, but extrapolating from one day, it should be less than $40 a month. I have an MSDN subscription with $110 credit per month, so that seems like a right good deal to me!

Now I just have to convince my employer that it’s superior to SharePoint’s sorry excuse for a wiki.

Is this the best way to set it up? I have no idea! If you’re an Azure expert and want to give me a tip on how to do it better, leave a comment!

Adding SharePoint Wiki Hyperlink Anchors

I’ve been spoiled by several years of working with Atlassian’s Confluence wiki. So it was a shock to the system to change jobs and be introduced to the Microsoft SharePoint version of a wiki. Seriously? How can they even call it a wiki? No wiki markup to speak of, no preview, and things that are absolute basics in Confluence seem to require administrative programming to accomplish in SharePoint.

My struggle today was to create intrapage hyperlinks. I have a really long document, and wanted to have a table of contents at the top. Hmm, what’s the equivalent of the [toc] macro? Oh, there isn’t one? Plan B: use a wiki bookmark. Oh, that requires some server-level and site-level functionality to be enabled? Fat chance of me getting that approved in my lifetime. So off I went to find another solution.

I read about embedding functions, jQuery scripts, manually editing the source code… None of these things were appealing. Then I happened upon an innocuous post on StackExchange about the very thing I was trying to do. The last comment on the page, which had been voted down, was an easy and brilliant solution (abet ridiculous for this kind of product).

  1. Open Microsoft Word to a blank document.
  2. Create a list of your planned hyperlinks and their associated anchor destination.
  3. Select each anchor destination, and on the Insert ribbon, click Bookmark.
  4. Provide appropriate label text (no spaces) and click Add.
  5. Select each planned hyperlink, and on the Insert ribbon, click Hyperlink.
  6. In the dialog, click ‘Place in this document’ and select the related bookmark created in Step 4.
  7. Once you’ve completed linking, select one or all and paste into the wiki page.
  8. Cut, paste, and format the hyperlinks and anchors.

I’m very disappointed in this product for making something that should be very simple so difficult. I’ve had a low opinion of SharePoint for many years, but having seen demos of the most recent version, my opinion was slowing improving. But this alone has wiped out any goodwill that was developing.

For the original post, see How to add a hyperlink anchor in a SharePoint wiki page.

How to do an Adobe Reader Custom Installation

Having just bought a new computer with a rather small (100 GB) SSD OS drive, I’m making every effort to install programs on the terabyte D: drive. So I get more than a bit cranky with applications that either don’t let you choose the install path or don’t respect it after installation.

One of those applications is Adobe Reader. If you go to Adobe’s website to install it, it will detect your OS and offer you the appropriate installer, along with a bunch of opt-out crap ware. Then, it’s just a straight install, with the only option being whether or not to allow Adobe to install updates automatically (I don’t).

So digging around for a way to customize the installation, I ran across the Adobe Customization Wizard, which seemed a bit like overkill for my problem, but worth investigating. I found instructions on how to retrieve an unencumbered and unpackable version of Reader. Hmm, this has potential.

For your future installation pleasure, skip the Adobe website and go to the FTP site! For the current Windows version, browse this folder. These versions do not have any optional opt-out toolbars or virus scanners packed into them.

To unpack the executable, run this, updating with your folder paths:

adbeRdr11009_en_us.exe -nos_o"D:\Downloads\Adobe" -nos_ne

You will be presented with a standard Windows unpacking dialog box. Once completed, go to the extraction folder and run the MSI file. Voila! A prompt to pick the installation path. Exactly what I wanted!

Customizing Confluence User Interface Text

Boilerplate text for Confluence pages is stored in a single file that can be modified. The file contains a long list of key value pairs. To determine the key value of the test you wish to change, append ?i18ntranslate=on to the page URL to see the key values displayed.

e.g. http://<host name>/dashboard.action?i18ntranslate=on

The file containing the boilerplate text is ConfluenceActionSupport.properties, and it’s packed in a jar file. To unpack the file, copy <confluence install>\confluence\WEB-INF\classes\confluence-x.x.x.jar into a different folder and run the following:

“C:\Program Files\Java\jdk1.7.0_25\bin\jar” xf confluence-x.x.x.jar”

Modify the path to the JDK appropriately, as well as the name of the jar file with your particular version. This command will unpack a few thousand files in multiple subfolders into the folder where you copied the jar file. DO NOT extract the jar file in the installation directory!

Before making modifications to the default file, check to be sure there isn’t already a customized file. A customized file could have been repacked into the jar file, but it’s easier just to place the customized file in the regular file system, and it will override the version in the jar file. Look in \confluence\WEB-INF\classes\com\atlassian\confluence\core. If the core folder and ConfluenceActionSupport.properties file do not exist, the jar file is not being overridden.

Open ConfluenceActionSupport.properties in a text editor and search for the key value that you found earlier. As an example, the following change will customize the text on the login screen and the name of the dashboard.

login.name=Log in using your Active Directory credentials
title.dashboard=Confluence Portal

Once edited, place ConfluenceActionSupport.properties at the following location, which may necessitate creating the core folder:

<confluence install>\confluence\WEB-INF\classes\com\atlassian\confluence\core

This location is based on the file’s location in the packed jar file.

Note: These instructions were tested on Confluence version 5.4.2.

Hide Child Page List

A source of annoyance for me on our internal Confluence installation is the default list of child pages at the bottom of every page. I finally found a solution on Sarah Maddox’s blog post Confluence tip – how to hide child pages in the Documentation theme.

child pages

Caveat

These instructions are tested on the Documentation space theme. If you are using a different theme in your space, it may not work.

Pre-requisite

You must be the space administrator to make this change. If you’re not the administrator, suggest this to the administrator.

Steps

  1. Go to Browse > Space Admin > Stylesheet.
  2. Add/edit the stylesheet.
  3. Paste this code in the box.
  4. #children-section{display:none;}

  5. Save and rejoice!

Check out Sarah Maddox’s awesome Confluence book Confluence, Tech Comm, Chocolate: A Wiki as Platform Extraordinaire for Technical Communication (affliate link).

Adding ‘Recent Places’ to SSMS

1-17-2012 12-09-09 PM

Generic Open File dialog in SSMS

I was recently frustrated by the plain Open File dialog box presented in SQL Server Management Studio. The Look in: options are limited to Desktop, My Projects, and My Computer. I make frequent use of ‘Recent Places’ in Windows Explorer, so I wanted to add it to the SSMS dialog box as well.

I tested these instructions on a 64-bit Windows 7 Enterprise version, using SQL Server 2008 R2. They have not been tested on other versions of Windows or SQL Server.

WARNING: The following instructions modify the registry. Always back up the registry before making changes. Changing the registry improperly can do significant harm to your computer. If you are uncomfortable modifying the registry, do not proceed.

Open the Registry and navigate to the following location:

\HKCU\Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\Open Find\Places\UserDefinedPlaces

NOTE: Depending on your version of SQL Server, you may see 90, 100, or something else.

Add a subkey for each additional ‘Look in:’ shortcut you wish to add. Name them Place0, Place1, Place2, Place(n).

Add two REG_SZ values for each subkey added:

Value Name: The display name of the shortcut; Value Data: The path of the shortcut.

To add Recent Places, make the Value data field equal to C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent.

Replace <username> with your profile name.

1-17-2012 12-25-51 PM

This is the end result:

1-17-2012 12-23-08 PM

SSMS Open File dialog with Recent Places added

I hope that helps you as much as it did me!

Sticky Wikis

John Rotenstein, Business Intelligence Manager at Atlassian, made a presentation at the Atlassian Summit in San Francisco on how Atlassian makes its Confluence wiki “sticky.” As an international organization, Atlassian expects its employees to “live in” Confluence all day as the single point of access for corporate knowledge, collaboration and communication.

A couple of the highlights:

Adding wiki search to the browser

In Chrome, right-click on the search bar and select ‘Edit search engines…’ Scroll to the bottom of the list and add a new search engine. Set the keyword to something obvious (I picked ‘mywiki’) and the URL to:

http://my-wiki/dosearchsite.action?queryString=%s.

Replace my-wiki with the DNS name of your Confluence site. It will look like this:

searchengine

Now you can open a new tab and type in the search bar “mywiki[space][search term]”. Check out what happens once you hit the space bar:

search bar

Then, continue typing the search term:

display

And see the results:

output

Sharing pages

Sharing pages with co-workers is a great way of alerting someone to content that they might find useful, or request a review or comment. Every page and blog post has a Share link in the top right corner. Add the recipients and a personalized note, and they will receive it as an email, with a link right to the page.

share dialog

You can view the slides from the presentation at http://www.slideshare.net/GoAtlassian/collab-06-john-rotenstein-final.