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.

What’s in a brand?

What comes to mind when thinking about branding? Maybe a worldwide-recognized commercial product like Coca-Cola? or a successful commercial operation like McDonald’s? Did you think of yourself?

Steve Jones presented ‘Branding Yourself for Your Dream Job: The Modern Résumé’ at SQL PASS on Thursday, October 13. As SQL professionals, we are selling a product – our skills. The demand for that product will determine the desire of employers to hire us. Consider the “long tail,” popularized by Chris Anderson in Wired; very well-known people in the industry like Paul Randal and Brent Ozar are on the head of the long tail because they are recognized widely for their talent, experience, breadth of knowledge, and popularity. The rest of us are somewhere on the same curve, depending on skill level and how well that skill level is marketed.

The more you market yourself, the further along and up the “desire” curve you move, and the more likely someone will want to interview and hire you. This is new and different from the traditional job market. It’s important to be able to stand out from the 100+ resumes received for the job you applied for.

Steve quoted a survey done by CareerBuilder.com that one third of hiring managers reject job candidates based on information found on online. Whether it’s your employer-critical tweets, political Facebook public wall posts, or party pictures on Instagram, it’s out there and available to be found by someone looking for decision-forming details about a potential new employee. It’s important to stay aware of how your online persona reflects on you personally.

An employer may prefer someone with an established internet presence that demonstrates their professional skills and willingness to be part of a knowledge community over someone who does not do more than tweet once or twice a month. A readiness to learn and share on your own time may be enough to set you apart from other applicants and increase an employer’s desire to interview or hire you.  What you put out there becomes part of your brand.

Steve: “Image is not everything, but it does matter, and it’s very important. Your brand is your image, it’s your reputation. It’s very important that you pay attention to what it is. You can have any brand you want, but just be aware of what it is. For better or for worse.”

So how to stand out from the crowd? There are numerous avenues, both within and outside of your organization. For example:

  • Volunteer at user group functions or conferences
  • Speak at a user group event or conference
  • Publish a blog
  • Contribute articles to print or online magazines
  • Write a book
  • Keep your online profiles (e.g. LinkedIn) up to date with current projects and as a historical repository

When applying for a job, always include a cover letter, and customize for each organization. It can contribute to a positive first impression, especially when applying via a referral. Include links to your online branding in your résumé but keep the content professional and appropriate.

When it comes to social media profiles, try to keep your personal interests separate from your professional persona. Anything posted online reflect on you, whether you posted it or not. Use what Steve calls “the test”: if it (whether memo, email, picture) appears on the front page of the newspaper tomorrow, can you defend it to your boss? If in doubt, run it by your mom or other second opinion.

You should also monitor what is being posted about you via a tool like Google Alerts. Avoid being blindsided in an interview by something posted by a friend as a joke or a malicious former co-worker.

Keep your résumé up-to-date. Set a reminder every three months to update it. If you don’t have anything to add to it, reflect on whether or not you need to change-up something to move forward in your career.

Networking online can lead to networking offline. Quite often, people have communicated online for years before meeting in person at a business conference. The wider your network, the greater reach you have when looking for a new job or even seeking help with an issue. Stick with handing out contact information when networking online, not identity information. Use an email address that you monitor; you never know when someone you chatted with over coffee at last year’s conference decides to look you up and invite you for a job interview.

When volunteering, do what you like and want to do, not simply something that would look good on your résumé. It has to be sincere. It’s a good idea to get permission from or advise your employer of your volunteer activities to avoid any conflicts. When volunteering at work, make sure it’s highlighted in the corporate newsletter or intranet, and keep a record of it for yourself. It can be used at annual reviews to demonstrate your willingness to learn and contribute to organizational success, or as a response to an interview question.

Steve polled the audience to see who wrote and read technical blogs. In his experience, only 10% of professionals have technical blogs, and 80% read blogs. Having a professional blog is an excellent way to showcase your skills. Don’t compare yourself to others when looking for topic inspiration. It’s your voice, and you don’t have to be a Microsoft Certified Master. Write about what you learn, know, solve, do, and think. It’s a long-term record of your career, and should be kept separate from personal topics and hobbies. It’s a good idea to advise your employer of your blog, and use proper discretion when discussing work-related information. DO NOT PLAGIARIZE other peoples’ work!

Keep a history of your professional development. You never know when you’ll need to pull out an example for an interview or annual review. Use appropriate development to customize your résumé for each job.

Watch the video for yourself.

This was an enjoyable session, and a good reminder of how a little bit of effort can pay off huge in the future. It gave me lots of ideas of things that I should be doing to improve my opportunities and skills. My biggest problem is being a strong introvert! All that networking stuff is very stressful. But I am proud of the connections that I’ve made at this and previous PASS conferences. And, I’ve got a start on a blog!

SQL PASS Summit 2011, Day 1

I was very fortunate to get last-minute approval to attend the Summit. This is my third year attending, but the first time that I’ve represented my employer.PASS 2011 button

I arrived late on Tuesday evening, so I couldn’t go to the Welcome Reception. I heard it was a lot of fun, with everyone receiving a coloured sticker with a number on it. The goal was to find the other person with the same number.  In a room with a thousand people, that can be quite daunting! But apparently someone added an index to the crowd,which helped things along.

This year the keynotes of the Summit are being broadcast live so everyone who isn’t able to attend can join in on the fun. See the Summit home page.

First up in the morning was the keynote. There was a fair bit of derision on Twitter about the content of the keynote, as Microsoft seemed to be intent on wowing a customer with cute charts, instead of providing the technical meat wanted by their audience. Some of the demos were badly done, with fonts that were too small to read, but no zooming done by the demonstrator.

The highlight of the keynote was the official announcement of SQL Server 2012, formerly known as Denali. They also demoed Data Explorer and the link to Apache Hadoop. Microsoft will be contributing to the Hadoop project.

The wowser announcement of the morning was Redgate’s DBA in Space contest. They’re going to send a DBA into suborbit!


I attended the following sessions:

Karen Lopez (Twitter| website) – Five Physical Database Blunders and How to Avoid Them

Database design will always come down to cost, benefit and risk. Can you justify why you’re doing what you’re doing? There can be many ways to accomplish something, but each method has pros and cons that have to be taken into account when making design decisions.

Denise McInerney (Twitter) – “BEGIN… COMMIT” is not Enough: Understanding Transactions

This was a great demo-heavy session. I use transactions, but they always frustrate me. This explained some of the unexpected behaviours and how to use transactions correctly.

Andy Warren – (Twitter | blogBuilding a Professional Development Plan

Do you have a professional development plan? I should, but I don’t (yet). Goals need to be written down, along with milestones and tasks, just like a project plan. You should treat your employer like a client with a one-year contract – do you have the skills to renew that contract? You need a minimum of 100 hours just to learn one new skill well, so if you want to move into a new role, you need a serious investment in time to get up to speed in new skills.  Make a budget every year for how you will spend money to develop – conferences? books? courses? speaking engagements?

I must remind myself – networking is an investment, networking is an investment….

Brent Ozar (Twitter | website) – BLITZ! The SQL – More One Hour SQL Server Takeovers

Brent’s presentations are always a hoot to attend, with half the fun being on Twitter as friends tweet comments throughout. Brent has such an infectious enthusiasm for his topics that you can’t help but get excited along with him. I was aware of the script that he posted about how to investigate servers that have been tossed your way with no documentation, but he’s gone much further by bundling his code into a single stored procedure that generates a very readable report that’s easy to archive or point the boss to.


Every year at Summit my goal is to get a bit better at networking. I was pleasantly surprised that a few people do remember me from previous years, so it was good to chat and catch up. I also talked to a few new people, some of them first-timers, offering to answer questions for them, or recommended some sessions to attend.

An early night tonight, despite invitations to SQL Karaoke. Save that for Thursday night.

Evernote FTW!

I am an apprentice GTDer, and continually look for ways to improve my ability to use the system successfully. After reading a few blogs that exhorted the benefits of Evernote for GTD, I thought I would give it a try.

While I can’t claim that it’s improved my practices any (not Evernote’s fault), I do love it. I have the clipping extensions installed in Chrome and constantly add new notes when I run across articles that I would normally bookmark for later reading, but by the time I get back to them, they’ve long since 404’ed.

This past weekend I decided to “catalogue” my DVDs. I hate perusing the bargain bin and seeing a title that I love at a bargain price, but I can’t remember if I replaced my VHS copy with a DVD copy already. So I clipped cover images for all my DVDs into Evernote, so I can now pull them up on my phone to check my list.

I also have multiple Evernote accounts because I want to isolate my investing materials away from my personal/work details. I found it very annoying to have to log out and log in with each account, and for a while I suffered by keeping one account in the desktop application and one configured as a web account. Depending on who you listen too, being able to switch easily between accounts is either a highly demanded feature request or something that only a few people might use. But I lucked out today browsing the Evernote forums – a solution!

By adding /DebugMenu to your Evernote shortcut, a new [Debug] menu appears, and you can flip back and forth between accounts effortlessly!

I just wanted to document this here so that I don’t forget it when setting up Evernote on a new machine, and hopefully it helps someone else suffering from this same problem.