ALWAYS BE IN SYNC Share with a link and instantly get updates from your designer. No more e-mail attachments or huge PSD uploads.
WEB & NATIVE APP Preview and inspect PSDs on the web or use the native app on any platform - Mac, Windows or even Linux.
EVERYTHING FROM A PSD Choose anything from a PSD and get exactly what you need – CSS, SVG, images, fonts or colors…
You know, I am starting to get that “designer” itch again. I am not a designer; but, I can pull
something outta my ass every once in a while. Going to try to get a private beta to see if
I can use this for some projects as well.
I have bitcoin and do not plan on paying any tax on it. I didn’t “buy” any amount using taxable USD, and don’t see a need for “regulation.” Trying to tax my Bitcoin is basically using a gun to say I need to pay a tax on the open-source software I write: it has value to a select few, and is completely useless to most.
The alpha version of Dark Wallet – the hyper-anonymising bitcoin wallet – goes live today.
Created by Amir Taaki and Cody Wilson, Dark Wallet provides new tools for financial privacy, including in-built coin mixing and ‘stealth’ wallet addresses.
As well as making it easier for people to disguise their transactions from the government, Dark Wallet is also a torpedo aimed at those in the bitcoin community who have embraced co-operation with regulators.
Conceived last year and partly funded by $50,000 raised on Indiegogo, the wallet was developed by unSystem, a collective of anarchist bitcoin developers. It represents an ethos that has been largely excluded from the mainstream discourse around bitcoin.
In January of this year, Circle CEO Jeremy Allaire told CoinDesk that bitcoin was “absolutely” moving away from its libertarian roots, and described attempts to avoid the regulation of bitcoin as playing into the hands of “anarchists and criminals”.
And I personally liked this little nugget from the related article…
If your goals are to create a sort of shadow financial system that runs in offshore jurisdictions and is attractive for anarchists and criminals, then maybe [regulation] is not important.
There is a new movement taking place in web development over the last few years.
It is called static sites. Just as it sounds, it is simply a collection of .html, .css, .js and images that serves up a complete site. What you may not know is that there are literately 100s of frameworks out there that generate these static sites for you from a single common theme/template.
Static Site Generators
I stumbled upon a collection of these frameworks here:
This is pure opinion, but it would seem that most of these frameworks came
out of the Linux/OSX world from developers that needed to generate a static site for this or that. Those that did it often, needed a way to regenerate a whole static site by just changing, say, the header area.
I know that after my recent conversion to Octopress (aka Jekyll) I have been brainstorming about my own static site generator. As you can see in the link above, I am not the only one that had a similar thought.
Advantages to Static Sites
If you sit back and think about it, there are a number of advantages for running a static site.
Hosting costs
Can you really get any cheaper than free? GitHub pages can host your static site for free. If you really want to pay for something, then upload your static site files to Amazon S3 file storage and serve your site from there – for about $0.25/mo for 1000 uniques.
Security
You never have to worry about someone hacking your site. No SQL injection, XSS, CSRF attacks.
Even if someone was to gain access to your hosting account, there is no database or code to hide backdoors in.
Defacing
If someone gains access to where you are storing the files and defaces the site, just redeploy – which overwrites everything.
Simplicity (aka Serenity)
It is just a bunch of html, images, css and js files. You really can’t get any simpler than that.
How a static site becomes dynamic
The real power behind these static sites is the interactions that the end user have on your site using 3rd party remote widgets. It makes your site seem fairly dynamic by giving recent information. Just to give you an idea, here are a few widgets built into most of these frameworks:
Flickr photo albums, single photos
Disqus commenting system
Google Forms/Surveys (aka Contact Us, product support, etc)
Stackexchange Profile
GitHub Profile
GitHub Repo browser
Twitter feed, single quotes
Sitemap generators
…and a lot more. By using these widgets, and carefully skinned to look like your site, it creates a dynamic site of sorts that continually updates even it really is a static site.
I use Google Forms here on my site as an example for my Contact page. It looks and feels like I actually did something on the backend to send me an email – I didn’t.
Customizing the generated output
Almost all of these frameworks support plugins and extensions allowing for customizing the generated site to your preferences. Basically these plugins work like this.
Parse article/post content, usually on some plain-text form like Markdown
Process categories and tags
Redirects by creating /old-url/index.html kind of pages
Code highlighting
Pagination
And so on. Perhaps an indicator of the quality of the framework is the article/post/page parser with its extensions built into it, and how extensible it is. Take Octopress for example, it has butt load:
blockquote
code
date
GitHub gist
img
pullquote
video
Creating your own tag is fairly straight forward using a well documented Liquid Template parser for ruby.
Speeding up writing is key (for me at least)
I am now free to write my thoughts in any place I can write notepad. I insert things like {% blockquote %} and write a small blurb and I’m done. I’ve been wanting to switch to Markdown since I started using it with Unfuddle many many years ago, and now I can.
If this post made you think about making more sites static, drop me a line in the comments below.
On May 5 we’re launching a “Drop your Data” contest and challenging you to use as little mobile data as you possibly can. While we want you to think about reducing your data usage, we don’t mean using your smartphone less – there are many ways to conserve data without sacrificing your mobile phone experience. Take simple steps like connecting to Wi-Fi at home and at work, downloading your favorite audio and video podcasts automatically on Wi-Fi and so on.
The contest will be set up in two, week-long intervals and will utilize Onavo Count (Android/iPhone), a nifty data reporting app. The first week, you’ll use your smartphone as you normally would, and then for the second week, work on cutting down your mobile data usage! Open to customers and non-customers alike, all participants will be entered in a random draw to win $1,000 cash or one of three $150 Ting credits!
Don’t want to use Onavo Count? That’s fine. You can use the native data counting options on your phone or another counting method. Just ensure that the screenshots you submit clearly show the time period and your mobile data use (not Wi-Fi or Wi-Fi plus mobile data) for the time period.
If you’re not currently a Ting customer, you’ll also receive service credit for your percentage of data savings from the first week to the second. In other words, if you cut your mobile data use by 74%, you’ll receive a $74 Ting credit.
Stay tuned for complete details inside this blog post on Monday, May 5.
Even though I’ve carefully been monitoring my data usage for years because I value battery life
over “always connected” distractions, I’ll be entering this contest to see if I can drop it even
further. Challenge accepted.
I’ve been a Ting user for nearly 1 year now, have saved over $1000 (which already paid for our new phones,
canceling our contracts, and then some) and cannot live without the real-time stats and alerts they
have.
I like how they invite people that are not Ting users to enter the contest as well.
The Xbox One’s CPU component brings Microsoft’s architecture of choice back to x86, just like the first-generation Xbox. This time, the company kicked IBM to the curb and opted not to jump into another Intel/Nvidia love triangle. Instead, it put a ring on AMD’s finger, tapping the same source for general-purpose and graphics computing IP. At the same time, Sony was courting AMD’s semi-custom division as well. Both competitors ended up sharing a bed, but due to NDAs was never caught laying down.
Microsoft had Intel for Xbox 1st gen. Then IBM for the 2nd gen. For the 3rd gen Xbox One and PS4, we
all know they went with AMD now.
So this got me thinking… Chuck Thacker is still at Microsoft. It does take a while to design and produce your CPU. I wonder if Microsoft will drop that bomb in the next decade.
It’s sad because after the Zune fiasco, with Zune software no longer compatible with
the Zune players, I’m left with $600 in media players that are worthless and useless
cause I can’t sync any music to them. So I don’t think I’ll ever go back to
Microsoft products after that. It was one too many low blows over the last decade.
In related news, a buddy of mine sums up how the Xbox One vs PS4 has played out over the last 6 months:
Every time I go to look at new Xbox One releases I regret not buying a PS4 instead.
There are many benefits to both your readers and yourself if you were to put your
blog under source revisions. I would go as far to say that you own it to the community
to publish all revisions of your blog that was ever public for pure archiving reasons.
Revision those files you linked to
Recently I setup my hacker’s blog
and I had a need to import my old blog posts from CommunityServer. The steps were a bit
hackery itself as I had to get data out of CS and into a format that one of the common
importers of Jekyll/Octopress could read from. I chose BlogML to export as that seemed
to have the oldest support (my CS blog was 9 years old).
Finding that old file that no one cares about any longer
After spending a few days off and on tweaking the exported BlogML data, I basically found only
a single BlogML importer for Jekyll. This is why I chose this route to begin with. So, when
it came time to perform the import guess what? The blogml.rb ruby script links were all broken!
Then I had a thought: if the author of the script was running Jekyll/Octopress, especially on
GitHub pages, then perhaps there is a revision history.
I had to dig through about 2 years of commits; but, I found it!
You can even backup a folder and see his entire snapshot of his blog during the import process.
Thank you Philipp Küng for revisioning your blog.
Changing blogging platforms
What if you are switch blogging software every 5 years? Keep old snapshots and revisions of your old site
in tags and refer to them in your change revisions. Even if you don’t keep the same technology,
having an old copy around for public reference can be useful to the community.
Domain expiration, hosting company goes under, etc
So your domain expires or got snatched up by a squatter? Or your hosting company pulls the plug?
At least having a revision available will allow you the flexibility, even if you don’t continue
a blog any longer.
Updates, changes and redactions
Opinions online can be heated and made in jest. You may have published something that you wish you
didn’t. Or after some nice comments are posted, you update the post. Maybe a DMCA takedown request
forced you to remove a piece of content. Wouldn’t it be nice to know and show the revision history of your post?
I know that me for one is going to stop with the dozen tiny edits for spelling and grammar because
of this. Who knows, it may cause me to actually think before publishing.
And FYI, you can see each revision of each post and page I make to my site here.
Backups
Similar to the above, having a full backup you can take with you can be advantageous.
Personally, I not only publish my source code here at GitHub; but, I also have an additional
remote added for BitBucket and always do the following:
Now, you can do this for any source code sure. It’s these next steps that make it viable.
1234
> rake deploy
^- this publishes the live site to GitHub pages
> cd ./_deploy
> git push backup master
Yep, I also deploy a 2nd copy to my BitBucket account. Even though it will never be used as a real
site, it’s a full backup of the live site in the master branch.
The Optopress command rake deploy also pushed it up to GitHub pages on master – that’s how it
“publishes.” So all I have to do is make a quick backup. What’s even nice is the script does
a pull request as well, to keep the _deploy folder in sync so when I do perform a backup, it’s all there.
I am new to git branch tracking; so, I may have to tweak that last command by forcing -f up the
push to backup if it gets out of sync or something.
Finally, having multiple copies of your repo online and publicly accessible can help with…
Government seizers
All too often, governments are taking domains and peoples’ hosting accounts in the name of DMCA and
copyright infringements. Oh, and free speech as well.
Why not publish your blog open source?
The last step to further solidify your published site and source would be automate a bittorrent release
for every deployment. Doesn’t seem to far out of reach with these snapshots readily available.
Death
What if you were to pass away? Would your annual payment to your domains continue for decades? What
about the fee you pay your hosting company? Same as the previous reason, publishing it may very well
keep it going for a long time even if the domain is gone, people can still get to the source.
Especially at a place like GitHub pages.
Why not?
I hope I sparked some food for thought and I would like your opinions on the matter.
I cannot come up with solid reasons for not to publish your blog open source. I know at first I
wrestled with the idea that:
Wait, my database connection strings would be publicly visible. I can’t do that.
Then it hit me that Octopress/Jekyll is completely static – there are no database connection strings.
Q
My secret keys for my 3rd party integrations may be exposed.
Actually not. Twitter, Disqus, LinkedIn and so on all use public kesy/ids to identify you with their
widgets. Even Flickr allows for a vast array of public apis.
You would only need private keys on your site if you were programatically pushing or changing content
elsewhere in a write-permission need. But again, this was planned as a static site – no problem here.
I have private downloads I don’t want others to see.
Ok, this one did get me. I do have private downloads of password-protected files on my old site.
I have to think back to the longevity of my blog – do I want the downloads archived forever? Short
answer, no.
I moved my blog, and the photos didn’t go with it.
You can try browsing the images in my Flickr set called Blogs
for the one you were looking for; but alas, I didn’t upload all photos (sorry Venna White fans).
Fret not. If you really need that photo, just use the contact button at in the header and/or footer
of this site and send me the link you want the photo(s) for.
I recently abandoned my 14 year dedication to Dell laptops in favor of the
Lenovo Helix ultrabook/tablet. In doing so, I needed a stylus for the active
digitizer as the one that came with the Helix just isn’t going to work for
diagramming and sketching.
Research: Styluses for the Lenovo Helix
I had a problem: I was obsessed for days reading every blog, review and comment
and watching every video I could find online to figure out what stylus would work
with the Wacom Active Digitizer that is built into the Helix.
Sadly, I couldn’t find a straight answer.
Wacom ZP501ESE Intuos3 Special Edition Grip Pen
This is the pen I decided on. It arrived today and I immediately ripped it open
only to find out it didn’t work. And yes, I removed the OEM stylus cause there is
a switch that disables the digitizer when the pen is inserted to save battery.
So which one?
Now that I am armed with new search queries e.g. Lenovo Helix Intuos3 doesn’t work,
I’ve found new pages with additional info that I wish I’d found in the first place.
Usually I am diligent enough to find these errors ahead of time. But, I failed this
time around and I’m having fun writing on my new Octopress blog – so, why not whip
up a quick post to let others know.
I found this thread
that was the most helpful in figuring out which stylus to get. Specifically, this post:
FYI, the Wacom Penabled Digitizer system is not compatible with Intuos, Cintiq, and Bamboo Tablet pens.
Any other Wacom Penabled Tablet PC Pen will work (as mentioned, Series 7 slate, Asus EP121, Lenovo ThinkPad Tablet 2, Lenovo X61 - X230T series, Fujitsu T900 series, Motion F5t, Wacom Bamboo Feel pens to name just a few).
Additionally the Wacom Pen Display Pens will work (eg DTU- series).
These pens come in different shapes, sizes and button configurations, but the pen must match up with the digitizer system that is built into the tablet and many people aren’t aware that Wacom have different systems.
The Penabled system is not as advanced as the Intuos or Cintiq unfortunately (fewer pressure degrees, no tilt angles etc), but still very impressive and useful.
Well, there we have it. NewEgg, a return is coming!
As announced previously, I’ve recently converted my blog over to Octopress.
This was not without a few stumbling blocks on Windows using Posh-Git. I’ve also recently started to suspect some issues
with Posh-Git now that I am using it on a daily basis.
In this post, I am documenting the procedure for future installs on Windows; and, maybe I can help someone else who runs across the
same issues.
Ruby on Windows? No, Yari on Windows
This is my first exposure to Ruby. I know, I’ve been closed off to anything non-.NET since, well, .NET in 2002. With that the first
steps to getting ruby installed. A few quick searches yielded some issues with Windows and Ruby and Octopress, until I ran across
Robert Anderson’s Octopress install.
They key point to this type of installing is this golden snippet:
Use yari instead of RVM/rbenv
Scott Muc has written yari which lets you switch between Windows Ruby versions.
Once all dependencies are fixed up, it’s onto following the setup guide over at Octopress:
Now, I am going to use GitHub Pages for my static blog hosting. Those are the instructions I am going to focus on here and below.
The next step is to call the task to setup your repo for GitHub deployments. Just take a quick gander a what it does,
as listed on the Octopress install guide:
Ask for and store your Github Pages repository url.
Rename the remote pointing to imathis/octopress from ‘origin’ to ‘octopress’
Add your Github Pages repository as the default origin remote.
Switch the active branch from master to source.
Configure your blog’s url according to your repository.
Setup a master branch in the _deploy directory for deployment.
If that sounds like a lot, wait until you see what actually does happen below. So, we’ll run it and look at the output:
12345678910111213141516171819202122232425
C:\gd\code\eduncan911 [master +2 ~1 -0 !]> rake setup_github_pages
## Set the codepage to 65001 for Windows machines
Enter the read/write url for your repository
(For example, '[email protected]:your_username/your_username.github.io.git)
or 'https://github.com/your_username/your_username.github.io')
Repository url: [email protected]:eduncan911/eduncan911.github.io.git
fatal: remote origin already exists.
Added remote [email protected]:eduncan911/eduncan911.github.io.git as origin
Set origin as default remote
Master branch renamed to 'source' for committing your blog source files
rm -rf _deploy
mkdir _deploy
cd _deploy
Initialized empty Git repository in C:/gd/code/eduncan911/_deploy/.git/
'My Octopress Page is coming soon
'hellip' is not recognized as an internal or external command, operable program or batch file.
[master (root-commit) f1e0e3f] Octopress init
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
fatal: remote origin already exists.
cd -
---
## Now you can deploy to [email protected]:eduncan911/eduncan911.github.io.git with `rake deploy` ##
C:\gd\code\eduncan911 [source +2 ~3 -0 !]>
Btw, kudos to the developers of Octopress to put this much output in the build processes – makes
things much easier to debug than the vast majority of scripts you run.
But doh! We have our first stumbling blocks. We have a number of errors to work out here, three exactly.
Fortunately, line 7 is an extremely common problem when working git. Unfortunately though,
the common fixes doesn’t seem to work with any Posh-Git install I’ve used to date.
Before we get to that though, let’s take a look at the ruby task to see exactly what is going on
before we jump to any conclusions.
desc"Set up _deploy folder and deploy branch for Github Pages deployment"task:setup_github_pages,:repodo|t,args|ifargs.reporepo_url=args.repoelseputs"Enter the read/write url for your repository"puts"(For example, '[email protected]:your_username/your_username.github.io.git)"puts" or 'https://github.com/your_username/your_username.github.io')"repo_url=get_stdin("Repository url: ")endprotocol=(repo_url.match(/(^git)@/).nil?)?'https':'git'ifprotocol=='git'user=repo_url.match(/:([^\/]+)/)[1]elseuser=repo_url.match(/github\.com\/([^\/]+)/)[1]endbranch=(repo_url.match(/\/[\w-]+\.github\.(?:io|com)/).nil?)?'gh-pages':'master'project=(branch=='gh-pages')?repo_url.match(/\/([^\.]+)/)[1]:''unless(`git remote -v`=~/origin.+?octopress(?:\.git)?/).nil?# If octopress is still the origin remote (from cloning) rename it to octopresssystem"git remote rename origin octopress"ifbranch=='master'# If this is a user/organization pages repository, add the correct origin remote# and checkout the source branch for committing changes to the blog source.system"git remote add origin #{repo_url}"puts"Added remote #{repo_url} as origin"system"git config branch.master.remote origin"puts"Set origin as default remote"system"git branch -m master source"puts"Master branch renamed to 'source' for committing your blog source files"elseunless!public_dir.match("#{project}").nil?system"rake set_root_dir[#{project}]"endendendjekyll_config=IO.read('_config.yml')jekyll_config.sub!(/^url:.*$/,"url: #{blog_url(user,project)}")File.open('_config.yml','w')do|f|f.writejekyll_configendrm_rfdeploy_dirmkdirdeploy_dircd"#{deploy_dir}"dosystem"git init"system"echo 'My Octopress Page is coming soon …' > index.html"system"git add ."system"git commit -m \"Octopress init\""system"git branch -m gh-pages"unlessbranch=='master'system"git remote add origin #{repo_url}"rakefile=IO.read(__FILE__)rakefile.sub!(/deploy_branch(\s*)=(\s*)(["'])[\w-]*["']/,"deploy_branch\\1=\\2\\3#{branch}\\3")rakefile.sub!(/deploy_default(\s*)=(\s*)(["'])[\w-]*["']/,"deploy_default\\1=\\2\\3push\\3")File.open(__FILE__,'w')do|f|f.writerakefileendendputs"\n---\n## Now you can deploy to #{repo_url} with `rake deploy` ##"end
Let’s step through what this task does to our repo:
RakeFile
12
# If octopress is still the origin remote (from cloning) rename it to octopresssystem"git remote rename origin octopress"
Ok, no problem. We are renaming origin. But what you don’t know is with Posh-Git, when
you rename origin, it seems creates an empty origin! So, when the next system command executes:
RakeFile
1234
ifbranch=='master'# If this is a user/organization pages repository, add the correct origin remote# and checkout the source branch for committing changes to the blog source.system"git remote add origin #{repo_url}"
We get our first error, fatal: remote origin already exists.
Ok, back on task of what the RakeFile is doing to move forward.
RakeFile
1234567891011
puts"Added remote #{repo_url} as origin"system"git config branch.master.remote origin"puts"Set origin as default remote"system"git branch -m master source"puts"Master branch renamed to 'source' for committing your blog source files"elseunless!public_dir.match("#{project}").nil?system"rake set_root_dir[#{project}]"endendend
Interesting. I haven’t seen this in my git-ninja code before. A quick Google and we come up
with this SO answer on how to setup master to track a remote branch:
You can do the following (assuming you are checked out on master and want to push to a remote branch master):
Set up the ‘remote’ if you don’t have it already
# git remote add origin ssh://… Now configure master to know to track:
So now we have master tracking a remote branch and on line 29, we’ve renamed master to a new branch
called source (which also switches us to source for future commands).
Ah, we are create a new directory (_deploy by default Octopress config) and by calling
git init we create a new bank repo! This was not clear to me as to why at first, until I got things
working. You’ll see why in a bit.
And look here, on line 46, we have our 2nd error in the output. It would seem this
is a parsing typo on Windows machines. So, we never get this index.html file! No biggie,
we’ll be replacing that very shortly anyways.
This is my first Ruby playground, so I am not exactly sure what this line does. I would say we create
a branch called gh-pages, but that is for GitHub Projects (for corporate accounts), not our
GitHub Pages that we using here.
I suspect the unless branch == 'master' is what prevents this line from running on my installation.
RakeFile
12345678910
system"git remote add origin #{repo_url}"rakefile=IO.read(__FILE__)rakefile.sub!(/deploy_branch(\s*)=(\s*)(["'])[\w-]*["']/,"deploy_branch\\1=\\2\\3#{branch}\\3")rakefile.sub!(/deploy_default(\s*)=(\s*)(["'])[\w-]*["']/,"deploy_default\\1=\\2\\3push\\3")File.open(__FILE__,'w')do|f|f.writerakefileendendputs"\n---\n## Now you can deploy to #{repo_url} with `rake deploy` ##"end
Finally we are at the end. Let’s see, back on line 48 we are sitting in a new directory
called _deploy with a new clean git init. So, on line 50 we add a remote for origin…
And get our 3rd and final error, that we have already seen before.
fatal: remote origin already exists
As I mentioned earlier, this is most likely because Posh-Git already creates an origin and never
leaves an empty remote.
I’ve seen this fatal: remote origin already exists
error all too often and it usually means you already have an origin and cannot add another one. Usually git on Linux allows you to fix with a set of simple and meaningful commands:
12345
# pseudo code, not actually used during this install guide$ git remote add temp [email protected]/repo.git
$ git remote rm origin
$ git remote add origin [email protected]/repo.git
$ git remote rm temp
But this has never worked for me using Posh-Git. When trying to remove origin with Posh-Git, you get a new and blocking
error:
12
C:\gd\code\eduncan911 [source +2 ~3 -0 !]> git remote rm origin
error: Could not remove config section 'remote.origin'
Searching online basically leads you to a dead end in that this normally works using other versions of git. I did stumble upon
a related SO question about remotes using set-url, which lead me to come up with this solution:
As you can see, the rake setup_github_pages has renamed our origin to octopress. But Posh-Git seemed to have created
another empty origin and it won’t the script add one. Let’s fix that:
There we go. Let’s rake that setup_github_pages script again, shall we?
123456789101112131415161718192021
C:\gd\code\eduncan911 [source +2 ~3 -0 !]> rake setup_github_pages
## Set the codepage to 65001 for Windows machines
Enter the read/write url for your repository
(For example, '[email protected]:your_username/your_username.github.io.git)
or 'https://github.com/your_username/your_username.github.io')
Repository url: [email protected]:eduncan911/eduncan911.github.io.git
rm -rf _deploy
mkdir _deploy
cd _deploy
Initialized empty Git repository in C:/gd/code/eduncan911/_deploy/.git/
'My Octopress Page is coming soon
'hellip' is not recognized as an internal or external command,
operable program or batch file.
[master (root-commit) 27d2dd5] Octopress init
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
fatal: remote origin already exists.
cd -
---
## Now you can deploy to [email protected]:eduncan911/eduncan911.github.io.git with `rake deploy` ##
Well crap. We still get that fatal: remote origin already exists on line 17 error after all we did!
Ah, but remember what I said earlier about a directory called _deploy? They are making a new repo
and setting up the origin manually.
This is just checking to see what was there and as we suspected the git remote add origin command in the task did not work.
You may also notice that when you change directories to the _deploy new repo, we are on master now of a different repo.
We were previously on `source’ branch of the root repo from the previous scripts.
There we go. All fixed up and ready to continue. Make sure to change directories cd .. to backup to where you were
before continuing.
At this point, it is not necessary to run the rake setup_github_pages again because the script continues even with
errors, as we’ve seen above. The last part of the script seems to modify the RakeFile. We’ll leave that for another
topic as we want to keep hacking on our new blog to get it up.
To the keen observer, you may notice that we have two branches of the same repo:
The first part of Octopress’ instructions for github actually branches what you cloned from Octopress’ github into a source branch. Ok, check.
But recall that we created a sub-directory called _deploy and we git init a new clean repo there. It was already set to master, and finally we made its origin the same as our original source.
What this means is now you will have two branches with completely different code. Your source branch is what you will work from, commit to and push up. While the Octopress ruby framework will handle the generation of the static site and deployments to the master branch.
The last piece to remember is that GitHub Pages will only use the master branch to serve your static site.
Sweet! Our website (aka master branch) will be nice and clean based on this _deploy directory, whereas our source branch will be the work committed.
rake generate
This runs without issue.
rake deploy
Aw shit, it would seem we still have some issues because this task generates errors:
C:\gd\code\eduncan911 [source +2 ~3 -0 !]> rake deploy
## Set the codepage to 65001 for Windows machines
## Deploying branch to Github Pages
## Pulling any updates from Github Pages
cd _deploy
fatal: No remote repository specified. Please, specify either a URL or a
remote name from which new revisions should be fetched.
cd -
rm -rf _deploy/index.html
## Copying public to _deploy
cp -r public/. _deploy
cd _deploy
## Committing: Site updated at 2014-04-03 22:58:56 UTC
[master 5257cf9] Site updated at 2014-04-03 22:58:56 UTC
61 files changed, 1118 insertions(+)
create mode 100644 assets/jwplayer/glow/controlbar/background.png
...(snip)...
create mode 100644 sitemap.xml
create mode 100644 stylesheets/screen.css
## Pushing generated _deploy website
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
## Github Pages deploy complete
cd -
C:\gd\code\eduncan911 [source +2 ~3 -0 !]>
We got two errors to sort out. Let’s take a look at the first one.
fatal: No remote repository specified. Please, specify either a URL or a remote name from which new revisions should be fetched.
Humm, this sounds like a git pull was issued. Let’s take a look at the ruby commands for this. Again, thanks to
the great output from the developers, a quick search in the RakeFile finds this code.
RakeFile
123456789101112131415161718192021
desc"deploy public directory to github pages"multitask:pushdoputs"## Deploying branch to Github Pages "puts"## Pulling any updates from Github Pages "cd"#{deploy_dir}"dosystem"git pull"end(Dir["#{deploy_dir}/*"]).each{|f|rm_rf(f)}Rake::Task[:copydot].invoke(public_dir,deploy_dir)puts"\n## Copying #{public_dir} to #{deploy_dir}"cp_r"#{public_dir}/.",deploy_dircd"#{deploy_dir}"dosystem"git add -A"puts"\n## Committing: Site updated at #{Time.now.utc}"message="Site updated at #{Time.now.utc}"system"git commit -m \"#{message}\""puts"\n## Pushing generated #{deploy_dir} website"system"git push origin #{deploy_branch}"puts"\n## Github Pages deploy complete"endend
Ah hah, there marked on lines 5 and 6 is the git pull for the _deploy directory. Smart, they are pulling down any
changes you may have made manually to your static pages. For example, using GitHub’s edit file feature to edit a file
directly in the browser.
I wonder why that didn’t work because as you recall, we setup the origin correctly. Let’s figure out why.
Wha… We already set this before. What happened? Well, I can tell you that it is because I re-ran the
rake setup_github_pages a 2nd and 3rd time. If you recall from the setup_github_pages take, it doesn’t care if you have
an existing deployment directory or not – it blows out and creates it again!
Before we continue, let’s take a quick look at that second error. Scrolling down to line 18 in the same ruby
task above we see a git push origin master being executed.
Because we had no origin set correctly, this would cause yet another error. We got that fixed already though with
the above git remote set-url --add command.
Let’s try to deploy again now that we fixed the _deploy folder.
C:\gd\code\eduncan911 [source +2 ~3 -0 !]> rake deploy
## Set the codepage to 65001 for Windows machines
## Deploying branch to Github Pages
## Pulling any updates from Github Pages
cd _deploy
Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of known hosts.
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
cd -
rm -rf _deploy/assets
rm -rf _deploy/atom.xml
rm -rf _deploy/blog
rm -rf _deploy/favicon.png
rm -rf _deploy/images
rm -rf _deploy/index.html
rm -rf _deploy/javascripts
rm -rf _deploy/robots.txt
rm -rf _deploy/sitemap.xml
rm -rf _deploy/stylesheets
## Copying public to _deploy
cp -r public/. _deploy
cd _deploy
## Committing: Site updated at 2014-04-03 23:21:58 UTC
# On branch master
nothing to commit, working directory clean
## Pushing generated _deploy website
Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of known hosts.
Counting objects: 79, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (72/72), done.
Writing objects: 100% (79/79), 186.45 KiB | 0 bytes/s, done.
Total 79 (delta 1), reused 0 (delta 0)
To [email protected]:eduncan911/eduncan911.github.io.git
* [new branch] master -> master
## Github Pages deploy complete
cd -
C:\gd\code\eduncan911 [source +2 ~3 -0 !]>
Humm, a few warnings about no tracking information for the remote branch, which we renamed to be source from master
if you recall from earlier. I think this is normal because we haven’t pushed source up yet.
git push origin source
Now, let’s see if we can fix the tracking information for our source branch by pushing our changes up.
I’m sticking a fork in her and calling it… These may be normal warnings with the way the remote tracking is handled
as I don’t have a lot of experience with that part of git.
It’s all downhill from here
If you have stuck with me this long, I have some good news – you’re done! Time to start blogging!
You can read the rest of the deployment guide from here as they have some useful tips. Also, make sure to commit
your work (they mention this too).
My last piece of advice after you get the hang of things and create a few test posts is to look into these commands.
123
rake generate # Generates posts and pages into the public directoryrake watch # Watches source/ and sass/ for changes and regeneratesrake preview # Watches, and mounts a webserver at http://localhost:4000
You’ve already run rake generate; but, take a look at the other two.
rake watch is nice to auto-generate files as you change them.
rake preview is even better! It will watch for and auto-generate your site; but, more so it runs a very lightweight
tiny webserver (much less tiny than IIS!) in the background where you can open a browser and hit refresh to your heart’s
content.
I advise everyone to do that to keep the number of commits down because once you have a few 100 pages, that generate and
deploy is going to take a long while. Might as well get into the habit early!
~E
PS: I am thinking of renting a Macbook Pro because of the time lost with stuff like this
under Windows. Argh…
Three years, 11 months and 22 days… That’s how long it has been since my last blog post.
When I originally launched this blog, I was using the software I originally wrote for CommunityServer back in
2004 and 2005. Ever since then I have dreamed of grand visions of new blogging software. Tinkering with new
design patterns, following Ken Robertson’s advice of trying out new frameworks with the concept of an Hello Blog,
where you create a blog using whatever language you want. While that was all said and good, I never got around to
finishing any of them good enough to launch them live.
For those that haven’t heard about it, go read about it. In short, it uses Ruby to create a static blog for
you to upload anywhere. Yes, just raw .html files and css/js/image files. And, that’s about it.
12
git clone git://github.com/imathis/octopress.git octopress
cd octopress
You write your posts in MarkDown, and be done with it. There are all sorts of little hacks shortcuts when writing posts that I
am going to have a lot of fun with.
12
rake preview
# now open browser to eduncan911.local:4000/
When you go completely static, interesting opportunities start to emerge… You no longer need a “web host” – all you need is a place
to dump your files online somewhere.
GitHub allows you to host static pages in a public repo. I’ve been hosting my code.eduncan911.com
there for years.
A few Google searches revealed I wasn’t the only one who thought this way. If I create a static blog, I can just host it at GitHub.
At first I stumbled upon Jekyll which gives you full control over markup, css, etc. But here I was in
the same position – writing code. I found that Octopress is built upon Jekyll; but, it already has a default theme, css, plugins, etc.
The best part is they have step-by-step instructions on how to publish it straight to GitHub Pages. It really can’t get any easier than
this, for any hacker skill level.
123
git add --all
git commit -m "new post: My Hacker Blog"
git push origin source
That’s right, this blog is hosted at eduncan911.github.io. They have instructions on
setting up a CNAME (in my case though, an ALIAS for the root eduncan911.com domain) and that’s it, you’re live.
As a matter of fact, go browse my site just like the old “directory browsing” method.
If you want to see the source code in how I generate the site, switch branches to source to
check that out. Tip: most of that is Octopress. Drill into the /source/ directory to see the raw nit-n-gritty fun stuff.
I will admit though, it took some tinkering to get Octopress setup and working correctly on Windows with PoshGit and PowerShell.
The way forward
There are a number of plug-ins, and there is some work I want to do to the asides (right column). But I am liberated
to no longer wait, and just do.
Most of all, being just raw MarkDown, I can write from any device now: tablets, smart phones, anywhere. And, being on GitHub,
I can just browse to my source branch and create a new file to start blogging. There are instructions for a C.I. server to
take callbacks from GitHub, and to publish it on the site after commits. Yep, very fun stuff…