On Dragon Burn Photography

As a volunteer for Dragon Burn I am responsible for maintaining the Dragon Burn website. Part of that responsibility is curating images created by the Dragon Burn Community. As with other aspects of running a Burn, what seems like a simple task can have some unique challenges.

Dragon Burn

Dragon Burn is an event that runs once a year in Anji. It is a temporary village built in a forest near a flower farm where couples take wedding photos, and by a reservoir that gave Yang Guifei her beauty. It is entirely non-profit and is built in part by every member of the community.

I mention this because an important aspect is that we do not pay photographers for their images. Instead, images are gifted to the community by photographers after the event. The quality of these images range from amateur to professional.

Collecting Images

Our first attempt at curating images was to simply create a shared iCloud. Participants could upload images they wanted to share to the cloud. This led to many problems:

  • We ended up with a gallery of hundreds of images that were completely unorganised.
  • Many people were uploading the same images over and over again, leading to a lot of duplicated images.
  • People were uploading images they didn’t create themselves.

This led to me publishing newsletter where images were incorrectly credited. I was quickly contacted by the actual authors of said images. I had to follow up the newsletter with an errata that gave the corrected credits.

But I knew I had fucked up. We didn’t know who any of the images we had belonged to. Even worse than that, we had no idea if we actually had permission to use the images that had been uploaded.

When images are gifted to the community, the least we could do is give the correct credit and make sure we actually have permission to use said images.

We needed a better solution.

Getting Enthusiastic Consent

To fix our issues we needed an actual process for curating images. The first thing we did was set up a “Ministry of Photography”. This was just an email address that forwarded to anyone on our social media team.

The second thing we did was to create a page explaining how to gift images to the community. Here we give some recommendations (use watermarks!), state what permissions we request, and also make it clear that we do not take ownership of any images gifted through this process.

This page does several things:

  • It gives recommendations to photographers on how to protect their work.
  • It tells them how we may use their images so they can give explicit permission for these uses.
  • It makes it clear that we don’t claim ownership over any images and that we will take them down at their request.

Now after every event we can share this page and anyone who wants to gift images will know exactly what to do.

One last thing we did is to start organising the images by the photographer that donated them. You will see on the sidebar that since 2017 the albums include the name of the photographer. This is much easier than crediting each individual image. Especially when there are albums with more than 500 photographs.

We Don’t Like It RAW

So now we have images coming in nice zip files and each collection is attributed to an author who has given us permission to use their images. Problem is that not every photographer is web-dev savvy.

Sometimes you get images which have been selected, edited, and reduced in resolution and size. They are usually good enough to upload straight away.

Sometimes you get 500+ RAW images ranging from 5 to 15MB in size each with a resolution of 4000px+. Total size is usually 50GB+. That’s going to take a while to upload through WordPress.

I’ve tried various WordPress plugins to handle automatically optimising images. It turns out it’s not a task that plugins can handle.

Realistically the only way to do it is to optimise the images before uploading. I use Caesium Image Compressor for this. It’s simple enough to use and has no limit on the number of images it can process.

WordPress Desperately Needs Better Image Management

Anyone who’s worked with WordPress for a while knows that the way it handles images sucks. I love WordPress, but come on! It really needs to handle images a lot better than it does.

I use the NextGEN Gallery plugin to manage all our galleries. It’s the most popular plugin and it works pretty well. The only caveat is that due to our site being bilingual we have to create two pages for each gallery.

Dream Diary: Stargate

People of another world arrested me and Samantha Carter and locked us in some kind of van. We could see that two men were patrolling outside, guarding us. We discussed how to escape, but we knew that it was possible we were on another world. Escaping would only mean we were still trapped.

I managed to break out of the van and disable one of the guards. I took his gun and started firing it at the other guard. The gun was some kind of energy weapon designed to incapacitate rather than kill. It needed constant firing to hold a target. I kept firing at the other guard as Carter and I fled.

We managed to make radio contact with Teal’c and O’Neill who told us that a nearby Stargate to Earth would open soon. Carter had a scanner on her that she could use to locate the Stargate and see when it would dial up. It also showed a ship warp into orbit and descend on our position. Pursued by ground troops and with a ship bombarding us we ran into a forest in search of the gate.

The gate’s position seemed to be moving, but with 14 seconds to spare we found the gate. The event horizon hadn’t formed yet. We considered giving the enemy the runaround for a few more seconds until the gate opened. But what if they decided to stay and guard the gate?

The gate seemed to open early. We weren’t sure if it was open early enough but the enemy was closing in so we took a chance and jumped through.

Meanwhile in space O’Neill and Teal’c seemed pissed at being left behind. “Fine!”, said O’Neill, “We’ll do it ourselves!” The gate was now spinning through space next to them. They opened the gate and floated through.

Setting up a Development Environment for Forge Modding

Note: Since I have a Windows machine this tutorial will focus on that platform.

Java Development Kit

You will need the JDK to develop in Java. You can get the latest JDK at the Oracle website. Make sure you download the Java SE 8u201 / Java SE 8u202 and make sure you download the JDK (not the JRE).

IDE – Eclipse

The IDE (Integrated Development Environment) is where you will write all your code. You will need an IDE for Java development. You can use any IDE you like, but most tutorials use Eclipse, and since I like Eclipse I will follow suit.

If you download the Eclipse Installer and run it you will be given an option on which IDE to install.

We need to choose Eclipse IDE for Java Developers. You can then select a directory to use as your first workspace. If you have many hard drives you should choose the one that has the most free space.

Set Up Forge

You will need to download the Forge MDK to develop Forge Mods. Make sure to download the correct version you wish to develop mods for. Select the MDK on the right for downloading and NOT the Windows Installer:

At the time of writing 1.12.2 was the latest stable version that Forge supports. The following tutorials will focus on that version for modding Minecraft.

After downloading Forge, you can extract it to the folder where you created the workspace :

Open Eclipse and select File -> Open Projects from File System… and select Forge project folder:

Now we need to decompile Minecraft. Navigate to the Forge folder in Explorer. Hold shift + right-click and select Open PowerShell window here. You should now see the following:

From here we need to run three commands. Some of these commands will take a while to run so be patient.

.\gradlew tasks

This will setup the project and give you a list of tasks you can run.

 .\gradlew setupDecompWorkspace 

This will decompile MineCraft and set up the project ready for modding. This command will take a while, especially if you have a slow internet connection.

 .\gradlew eclipse

This will set up the Eclipse project.

And that’s it – we can now start modding Minecraft! But first we should think about Source Control.

Source Control: Github

Source control helps you track changes to projects over time. It can help you back up and revert changes that may have messed up your code. It’s vital for any development project, even if you work alone.

In my professional life I prefer Perforce, but Github is great for open source and solo projects.

You can create a github account at their website. Once you have done so, click the + in the top right to create a new repository.

Give the project any name you like then note the URL of the project.

Next we need to download and install git. Once we have done so we can open up our PowerShell window on the Forge directory again:

You can then run the following commands to create a git repository:

git init

This will initialise a git repository.

 git remote add origin <URL_TO_YOUR_REPO> 

This will tell git which repository to upload your code. Replace <URL_TO_YOUR_REPO> with the repo you created in git. For example, https://github.com/doc-bok/DaggerMod is my repo.

git add .

This will add all files in the folder to the local repo. Don’t forget the dot at the end of this command.

git commit -m "My First Commit!" 

This will commit the files to the local repo, saving their current state.

git push origin master

Finally this will upload your changes to the remote repo on github.

After this you can continue to use the command line to commit new changes. To do this you can use the last three commands in PowerShell:

git add .
git commit -m "<MY_CHANGE_DESCRIPTION>"
git push origin master

You could also download Git for Windows and use that instead.


Here are all the resources listed in this article:

Here are a couple of tutorials I found useful for this. The Medium article sends you to an old version of Forge but it still contains useful information. Supergerrie2’s site contains many other tutorials for 1.12 modding that I’ve found useful so far.

How to Learn Minecraft Modding

Learning for the sake of learning is an exercise in futility. You will often end up losing focus and will never have achieved anything. You need to set a clear goal, and then figure out how to meet that goal.

What this means for Minecraft modding is that you shouldn’t set out to learn how to mod. You will learn how to add an item, a new material, a block, and a lot of basic things. But it will be a long time before you take the leap and create an actual mod.

Rather, you should figure out what you want to *create* first. Then figure out how to create that thing. It doesn’t hurt to keep your goals simple at first.

So that’s what this post is about. What do I want to create first?

Doc’s Dagger Mod

The design I’ve come up with is by no means original, but it should help me create something solid while I learn how to mod. I want to create an alternative weapon: a dagger.

The dagger will have 5 subtypes like any other tool: wooden, stone, iron, gold and diamond. Other mods could then extend this if they wanted to.

The dagger will do less damage than a sword but will attack faster. It will also have half the durability of a sword of the same type. It will not have a sweep attack – it will attack only one enemy at a time.

Players should be able to throw daggers. Doing so will cause the same damage as a melee attack. This will cost 1 durability if they hit a creature, or 2 durability if they hit a block. Thrown daggers will be recoverable provided they don’t break.

Until Next Time

So that’s the basic mod I’ve designed. By no means original, but it’s a simple goal that will leave me with a complete mod at the end. I’m confident I can learn how to do all/most of this. It won’t teach me *everything* there is to learn about Minecraft modding, but it will give me a start. And if I enjoy it, I can always design another mod after this one.

Hengshan Park – Places You Might Miss

The French Municipal Council built Hengshan Park in August 1925. During construction, they took 5000 tonnes of mud from XuJiaHui River. They used the mud to fill out the low-lying channel to the north of the park. Afterwards, they built a pavilion on top and planted many arbour trees. In May 1926 they opened the park to foreign visitors only, like many other parks in Shanghai at the time. It had the name Beidang Park until October 1943 when they renamed it to Hengshan Park.

Arbour Trees
Arbour Trees

Hengshan Park Layout

Over the years the landscaping hasn’t changed much. Hengshan Park has a size 10,855 square meters. 3 camphor trees over 150 years old are preserved inside. Two are on the west side of the park with a bench beneath each. The third is on the far eastern corner. Arbor trees, bushes and flowers complete the scenery in this small park. Like many other parks in China, there are exercise machines on the north side.

150 Year Old Camphor Trees
150 Year Old Camphor Trees

Shen Jun Ru

In the centre of the park is a statue of Shen Jun Ru. In 1936, the Chiang Kai-shek government arrested Shen and 6 others. This caused a national crisis known as the Seven Gentleman Incident. It wasn’t until after the Japanese invasion in the Summer of 1937 that they were released. Later in 1949 Shen would attend the first Chinese People’s Consultative Conference (CPCC). Here, he would be appointed as the first President of the Supreme People’s Court. He held this position until 1954. Shen would also hold several other important positions in his later life. He died in 1963.

Statue of Shen JunRu
Statue of Shen JunRu


This park lies hidden away on Hengshan road, near Guanyuan road, in Shanghai. It is one of the many small places in Shanghai that you could walk past and never even know it was there.

Hengshan Park's Central Pavilion
Hengshan Park’s Central Pavilion

Dandong Beer Festival

Last time we were in Dandong we saw an advertisement for the Dandong Beer Festival. We planned to finish our holiday with some excessive beer consumption.

After returning to Dandong we rested up in our hotel for a short while. The we headed over to Peter’s for some food. Over lunch we realised that none of us knew the address to go to the Beer Festival. A frantic search over the wireless internet didn’t turn up anything.

We decided to just go to a taxi driver and tell him “pijiujie” – Beer Festival. The taxi driver smiled when we asked – he knew where to go. We hopped in and he took us to the other side of town. Before we got out he offered to take us back and gave us his number.

Before us lay a glowing neon sign. In both Chinese and English it declared “Dandong New District International Beer Festival”. Several of the locals had set up market stalls selling souvenirs and toys. People were going back and forth to and from the entrance of the festival.

It didn’t take us too long to find tickets and get inside. Once inside we saw a corridor lined with tents. Tents that weren’t selling beer. They were selling property. It turns out this whole thing was a set up to get people to invest in Dandong New District.

We hastily made our way past the property market and made our way to the large beer tent ahead. Buying a beer proved to be rather difficult. They had a system where you had to go to one place and get tokens then come back and fight your way to the front of the crowd at the bar then shout loud enough that the bartenders would pay you attention and finally tell you that they were out of beer.

It was a little annoying.

We moved past the first big tent and on to the next tent. There was a live music performance here. We finally managed to find a bar that would sell us beer. They had cheap wheat lager for sale. We paid up and stood impatiently as they took forever to pour our drinks.

Finally we got a taste of beer at the Dandong Beer Festival. It tasted stale. We stayed for a while watching the music and forcing our beers down us. It was clear that we weren’t going to have a good time here.

We decided to leave after our first beer. We called the taxi driver who had offered to take us back. He was surprised to hear from us – he had expected us to take much longer. He had taken another fare so it took him a while to come back for us.

In the meantime we looked through the wares being sold outside. There were Transformer rip-offs and dolls and other cheap toys.

Our taxi driver arrived and we went back to Dandong Old District. We returned to the bar we went to on our first night and knocked ourselves out with some real beers.

More choice than the festival
More choice than the festival

Sino-Korean Border Road Trip

The day after our long detour from Ji’an we set off back to Dandong. We had planned to start driving down the Sino-Korean border from Linjiang. Unfortunately we ended up 90km off course so we would only get to do it from Ji’an.

This is a drive I would recommend anyone. The border is essentially a river going through a mountain range. There are few cities, especially on the Korean side. This means it’s a great route to see the natural side of China.

Along the way you can see North Korean villages and rice farms dotted along the river. Often they’d have mountains behind them. I wondered how much contact they had with the outside world. I saw a lot of bicycles in the countryside in the DPRK. There were some vehicles most of which seemed to be transporting goods or military. I imagine a lot of people riding between villages on bicycles. Perhaps to get to the nearest small town where there might be a school or a market. It would be interesting to see what country life is like in the DPRK. Unfortunately this seems to be one of the things the country wants to keep secret for now.

At one point during our drive we had to drive through a check point. Two soldiers carrying Chinese rifles signalled us to stop. These weren’t policemen; this was a military checkpoint. There wasn’t any trouble – they just checked our passports and let us through.

I guess there must be several checkpoints along this border on both sides. I thought about people who had fled North Korea. Would they avoid civilisation? This area had wide rivers and heavily forested mountains. You could take a boat at night but then you would have to destroy it so patrols wouldn’t find it. Then you would be faced with the prospect of difficult and uncharted terrain. Walking through one of the largest countries in the world and living off the land. It would be an impossible feat.

This is why they would need help from the Chinese side. Fake documents and long distance bus travel seems to be the way they do it. Perhaps this is one of the reasons why travel inside China is made so difficult.

Shortly after the checkpoint we came across one of China’s many “scenic spots”. A small area for parking was provided, allowing people to stop to take pictures. On seeing how impressed we were with the view our driver pulled in to park.

On the way I saw the Great Wall of China for the second time. Dandong has a tourist area where you can see more of the wall. I still haven’t been on the wall – I need to get this off my bucket list before I leave China.

We made it back to Dandong and needed to sort out our hotel. Unfortunately the communist style hotel we stayed at last time was fully booked. We booked into a nice hotel instead. Our driver took us there and left.

The hotel looked nice. Unfortunately appearances were deceiving. The rooms were tiny and the beds felt like rough cardboard. The shower didn’t have hot water. Somehow this fancy hotel was worse than the cheap communist one.

Well we were back in Dandong. And we had a beer festival to go to. At least we’d be able to drink ourselves to sleep.

A Funny Thing Happened on the Way to Ji’an

We were in Linjiang having just rode a boat along the border. A friend’s uncle had offered to take us out to dinner since he lives in the area. Our plan was to join him for dinner and then go on to Ji’an. I hadn’t eaten that day so I was looking forward to trying out some local cuisine.

This is always a small risk as there’s a good chance I may not like the food on offer. But being in a city it’s always easy to find something you can eat: fast food or street noodles.

Our friend’s uncle was waiting for us on the bridge to Huandao Island. He took us to his van and told us to get in. Our driver was nearby so we had to figure out what to with him and his van. We said we could come back but our friend’s uncle said it would be better if we followed him.

So we set off following him along the road. He drove us out-of-town. Huh. Guess he lives in one of the outlying villages. We passed the first village. Guess it’s not that one. Then we passed the next one. When we passed a third we started wondering where he was taking us. We were driving in the opposite direction to Ji’an.

Our driver asked seemed to be getting frustrated. We understood why – we hadn’t paid him to drive us out here. He asked us where we were going. We told him we had no idea. He signalled our friend’s uncle with the lights and stopped the van. Our friend’s uncle stopped his van and the driver called him over. He asked him where he was taking us. The driver seemed to get angry at the response. Our friend’s uncle insisted that it wasn’t that far, and the driver disagreed. They went back and forth shouting at each other while we sat in the van waiting. At one point our friend’s uncle fetched a map. They carried on arguing over the map. I suggested we head back. My friend got out and lit up a cigarette. Eventually our friend’s uncle agreed to pay the driver extra money to take us to his place. He really wanted us to try the local food.

The rest of the drive took 2 hours. It turned out the place he wanted to take us was over 90km away. And in the wrong direction. I was starving by the time we got there.

We got out at Fusongzhen. We invited our driver to join us but he wasn’t interested. I don’t think he liked this guy. Our friend’s uncle took us to show us the local delicacy that we were about to eat. It was river lobster. Which I’m intolerant of . If I ate this I would spend the rest of the road trip running back and forth from the toilet. Or the bushes depending on where we were. I watched as they poured the still-living lobster into a grinder. They would make soup out of the resulting mince. My stomach grumbled.

What followed was an awkward dinner with his family. I had to decline all the food offered to me for fear of having a reaction. We were annoyed at being 90km away from where we were supposed to be. Yet we were totally British about not wanting to insult their hospitality. We had a few small conversations, but we just wanted to get out of there and back on our way. We had been delayed 2 hours already. We were also looking forward to another 2 hour delay to get back where we started.

After dinner we took some group pictures and then headed on our way. Our driver threw away the cigarette he was smoking as we returned. We now had a 4 hour drive to Ji’an which would be our next chance to eat. We said our goodbyes as we drove off then apologised to the driver once again. We then asked if there was anywhere we could stop for food.

We couldn’t, but we did drive past someone selling honey. A lot of people in the Chinese countryside do this. They run small hives and sell the honey to passers-by. We got out to negotiate the price of some honey. When we figured out what we wanted our driver sent us back saying he’s got this one. He bartered a really good price for us. It was an amazing thing for him to do for us completely out of the blue. It put us at ease because we knew now he wasn’t angry at us.

We didn’t get to Ji’an until after dark. We didn’t do much as we didn’t have any time left. We got ourselves booked into a hostel and went looking for food. The KFC round the corner was tempting. But then we found a Korean barbecue place closer to the river.

There was a weird ginseng based spirit for sale here. My friend decided that we were both going to do a shot. By shot he meant a full half-liter glass of it. Being the pushover I am I couldn’t say no. I was instantly drunk after downing that disgusting beverage.

We stopped at an import beer store on the way back to the hostel. It sold several imported beers from places like Belgium and Germany. The store had a little seating area in the back where we could sit and drink. After a few more beers we were done and headed back to the hostel. I fell asleep with a beer in my hand and covered the bed sheets in beer. This was why my girlfriend slept in the other bed. It was also why I had to pay a 1000 RMB fine the next day to cover the cost of cleaning the bed sheets.

The KFC was impossible to resist that morning so we ate breakfast there. Then we set off to do what we had missed out on the previous day. We would drive along the Sino-Korean border.

Linjiang: A Boat Ride Along the Border

The next stop on our tour along the Sino-Korean border was Linjiang. This is another city that lights up like Vegas at night. Only the Chinese built this one across from a small North Korean farming community.

The hotel we stayed in Linjiang was right next to the town square. It was a nice hotel, but nothing too special. There is a small island to the south of the city called Huandao. This place is set up for tourists and the thing to do here is to get a boat ride along the border. So we set out to find a boat. Crossing the bridge to the island you first see a statue of Chen Yun. He was an important Communist Party leader who used to live in Linjiang.

We found people selling the boat rides on the farthest side of the island. It turned out our friend knows one of the locals here, so they talked for a while. I listened in, trying to understand what they where saying. I think my Chinese still has a long way to go.

Across the Yalu river we could see North Korea. The only thing of interest was a small village which looked to be a farming community. I asked if they had boats as well. It turns out that North Koreans aren’t allowed boats here, only the Chinese. I wasn’t sure if the restriction came from China or the DPRK. Or both.

It was late afternoon so we decided to explore the island and come back the next day for our boat ride. Further down the river was a larger boat moored on the island. There were several tables set up and a kitchen was preparing food. We decided to see if we could get some beer. Our friend and I sat down and asked for a beer while Yi went off to take pictures.

In Linjiang foreign tourists aren’t common so they were happy to see us. The beers were 5 RMB (around 50 pence). The owner sat next to us and told us “Chinese pay 5 kuai, foreigners pay 6 kuai!”. We could tell he was joking as we had already paid someone else. We laughed and he joined us as we drank, asking us the usual questions tourists get asked. A girl sat at another table jumped up and asked for a picture with me. This sort of thing happens a lot outside of the major cities in China.

We polished off our beers and left to walk along the river bank. Large forested hills prevent you from seeing too far into Korea. I wondered if there was ever any real communication between the villagers and Linjiang. Probably not. Any illicit activities going on between the borders would surely happen somewhere less obvious.

All along the bank several Linjiang locals were washing their clothes in the river. I got the impression that they did this because they preferred river-washed clothes. Much the same way we hang clothes out to dry in the sun in England rather than using a drying machine. The clothes smell nicer and don’t get damaged.

The sun set and darkness rose. Linjiang lit up like Christmas in Vegas. North Korea stayed in the darkness. It occurred to me their village may not have electricity, or at least not a large supply. With nothing more to see, we wandered back into town to get some food.

At night Linjiang has a large street market. There was more street food here than I had seen anywhere in China. I looked for the easy stuff: barbecued meat and/or noodles. My girlfriend went for some of the more local street food. We ate our fill then spent the rest of the night in a small bar we managed to find near our hotel.

The next day we had a solid plan. Yi has a friend whose uncle lives near Linjiang so he had invited us to lunch. So we were to ride the boat then go have lunch with him. We didn’t have much time before we met him so we went straight to the boats.

Our friend was waiting for us. We paid up front and were handed bright orange life jackets to wear. The three of us boarded the boat with our driver and we were off down the river.

The Chinese side was a built up urban area. Grey skyscrapers and factories filled the riverbank.

The North Korean side was definitely more of a rural area. Green hills, woods and forests lie beyond a small countryside road. The only thing connecting the two is a railway bridge. Dotted along the riverbank were several small towers. These towers watch out for people trying to cross the river. They were as hidden as they can be, but it was obvious what they were there for.

The Koreans lived their lives like any other. They were washing their clothes in the river. The kids were playing in the water. They would often wave at us as we went past. At one point we saw two naked men bathing in the river. They smiled at us and waved. Our boat driver told us this was a common occurrence.

Our boat tour was now over and we headed back to Linjiang proper. It was time to meet Yi’s friend’s uncle who had offered to take us to lunch. I hadn’t eaten yet so I was excited by the prospect of food. Unfortunately not everything was to go quite to plan.

Social Links: No need to use plugins

Social media links can help a site gain a following. They can allow people to share pages and follow your social media pages. There are several plugins that can add links for you and they can work quite well. The problem is that these plugins hook your page into a third party application. I wouldn’t have too much trouble with this on its own. These applications seemed quite well put together. Then I found that my page load speed was increasing by an average of 3-4 seconds!

Thus I began a quest to figure out how to add social media links without plugins. I decided to have two places for social media links. The first at the end of each post, allowing users to share pages. The second would be links to follow my Twitter, Facebook and Google+ pages. These would appear in the sidebar.


The simplest way to add twitter buttons can be found on their website. It’s as simple as selecting the type of button you want and copy/pasting the code.

I wanted to have a vertical follow button like I was using for the others. There was no option for styling the button on the page. After a brief search I found this page. Here it lists a bunch of options for changing the style of the button.

Twitter code requires a URL. Each page and post in your website has a different URL so it’s not ideal to add one for each by hand. Fortunately you can replace the link with a WordPress function. If you look at the code provided you find it has something like data-url="http://www.your-link-here.com/subpage". We can add a call to get_permalink which provides the link to the current page.

The other thing you need to do is make sure that data-via references your screen name. The final code for my share button looks like this:

Continue reading “Social Links: No need to use plugins”