Difference between revisions of "User:Crutchy"

From SoylentNews
Jump to: navigation, search
(Git/GitHub)
(Git/GitHub)
Line 95: Line 95:
  
 
I started by creating a new repository called "test". Just for kicks. Can be deleted later.
 
I started by creating a new repository called "test". Just for kicks. Can be deleted later.
 
+
<pre>
 
$ mkdir test
 
$ mkdir test
 
$ cd test
 
$ cd test
 
+
</pre>
now in /var/www/slash/git/test
+
You're now in /var/www/slash/git/test
 
+
<pre>
 
$ touch README.md
 
$ touch README.md
 
$ git init
 
$ git init
 
+
</pre>
 
A commit is essentially a snapshot of all the files in your project at a particular point in time.
 
A commit is essentially a snapshot of all the files in your project at a particular point in time.
 
+
<pre>
 
$ git add README.md
 
$ git add README.md
 
$ git commit -m "first commit"
 
$ git commit -m "first commit"
 
+
</pre>
 
So far, everything you've done has been in your local repository, meaning you still haven't done anything on GitHub yet.
 
So far, everything you've done has been in your local repository, meaning you still haven't done anything on GitHub yet.
 
To connect your local repository to your GitHub account, you will need to set a remote for your repository and push your commits to it.
 
To connect your local repository to your GitHub account, you will need to set a remote for your repository and push your commits to it.
  
 
Create a remote named "origin" pointing at your GitHub repository (repository name is case sensitive):
 
Create a remote named "origin" pointing at your GitHub repository (repository name is case sensitive):
$ git remote add origin https://github.com/crutchy-/test.git
+
<pre>$ git remote add origin https://github.com/crutchy-/test.git</pre>
  
 
Send your commits in the "master" branch to GitHub:
 
Send your commits in the "master" branch to GitHub:
$ git push -u origin master
+
<pre>$ git push -u origin master</pre>
  
 
FORKING THE "slashcode" REPOSITORY
 
FORKING THE "slashcode" REPOSITORY
Line 122: Line 122:
 
click the fork button on the Soylent/slashcode repository github page @ https://github.com/SoylentNews/slashcode
 
click the fork button on the Soylent/slashcode repository github page @ https://github.com/SoylentNews/slashcode
  
$ cd /var/www/slash/git
+
<pre>$ cd /var/www/slash/git</pre>
  
 
Download files into a subfolder named slashcode:
 
Download files into a subfolder named slashcode:
 +
<pre>
 
$ git clone https://github.com/crutchy-/slashcode.git
 
$ git clone https://github.com/crutchy-/slashcode.git
 
$ cd slashcode
 
$ cd slashcode
 +
</pre>
  
 
When a repository is cloned, it has a default remote called "origin" that points to your fork on GitHub,
 
When a repository is cloned, it has a default remote called "origin" that points to your fork on GitHub,
Line 132: Line 134:
 
you need to add another remote named "upstream"
 
you need to add another remote named "upstream"
  
$ git remote add upstream https://github.com/SoylentNews/slashcode.git
+
<pre>$ git remote add upstream https://github.com/SoylentNews/slashcode.git</pre>
  
 
Push commits to your remote repository stored on GitHub:
 
Push commits to your remote repository stored on GitHub:
$ git push origin master
+
<pre>$ git push origin master</re>
  
 
PULL IN UPSTREAM CHANGES
 
PULL IN UPSTREAM CHANGES
  
 
Fetch any new changes from the original repository:
 
Fetch any new changes from the original repository:
$ git fetch upstream
+
<pre>$ git fetch upstream</pre>
  
 
Merge any changes fetched into your working files:
 
Merge any changes fetched into your working files:
$ git merge upstream/master
+
<pre>$ git merge upstream/master</pre>
  
 
==IRC logging bot==
 
==IRC logging bot==

Revision as of 10:14, 14 March 2014

I'm from Australia.

PHP/SQL/HTML/CSS and Delphi (Object Pascal) are my preferred languages.
I'm pedantic about code etiquette (indents, spaces, etc).

New to Perl but interested in learning. I have a basic perl virtual host set up on my dev machine. Also got the slashdev virtual machine going, which makes the prospect of being able to contribute something that might be considered useful to the project a bit more likely.

Look out for me on #Soylent IRC.

Crutchy's perl journal: http://soylentnews.org/~crutchy/journal/72

Code doc project: http://soylentnews.org/~crutchy/journal/82

slashdev journal: http://soylentnews.org/~crutchy/journal/114

Watch pages:
Style
CSS Work

Unit testing

An area that I've been getting into a bit more with some of my other (mainly php) work. It's supposed to be that you write the tests first, but since slashcode is already written it's a bit hard to do that, but some kind of automated regression testing framework probably wouldn't hurt.

Code style

Perl programming style guide:
http://perldoc.perl.org/perlstyle.html

Just to start the ball rolling ("borrowed" from perl.org):

  • closing curly bracket of a multi-line BLOCK should line up with the keyword that started the construct
  • 4-column indent (slashcode uses tab indents, but in gedit you can set tab width or raplace tabs - tab may be better anyway?)
  • Opening curly on same line as keyword, if possible, otherwise line up
  • Space before the opening curly of a multi-line BLOCK
  • One-line BLOCK may be put on one line, including curlies
  • No space before the semicolon
  • Semicolon omitted in "short" one-line BLOCK
  • Space around most operators
  • Space around a "complex" subscript (inside brackets)
  • Blank lines between chunks that do different things
  • Uncuddled elses
  • No space between function name and its opening parenthesis
  • Space after each comma
  • Long lines broken after an operator (except and and or )
  • Space after last parenthesis matching on current line
  • Line up corresponding items vertically
  • Omit redundant punctuation as long as clarity doesn't suffer

If anyone has any others or wants to change any, feel free to do so. Maybe add a reason/background in change summary just so others know where you're coming from.

We should maybe make a wiki page for coding style and develop it so that all our code is readable and consistent regardless of author.
Also looking for one for other languages used for Soylent: CSS, HTML, JS, SQL

Goes without saying, but HTML and CSS should be W3C compliant.

Slashcode

IHMO there are way too many folders nested in the slashcode source tree. There may be good reasons but I generally prefer a flat filesystem (as much as possible anyway) for code accessibility. Also helps to reduce likelihood of duplicate filenames. In the slashdev virtual machine I noticed that the apache public directory has links to a lot of the key files in a single directory, which makes things a lot easier.

What do other devs think of prefixing function names with source filename?
For example, main() function in article.pl becomes article__main()
Not suggesting that it all be changed to suit this convention right away, but might be handy for new functions to make it easier to figure out where things are declared.

gedit identifies a syntax error in shtml.pl getFileText function (line 74). Looks like a rogue "s" after the "!-" operator.

slashcode files of interest

https://github.com/SoylentNews/slashcode/blob/master/themes/slashcode/htdocs/article.pl

https://github.com/SoylentNews/slashcode/blob/master/themes/slashcode/htdocs/comments.pl

Git/GitHub

Useful information for beginners:

https://help.github.com/articles/set-up-git

https://help.github.com/articles/create-a-repo

https://help.github.com/articles/fork-a-repo

https://help.github.com/articles/using-pull-requests

# apt-get install git
$ git config --global user.name "crutchy"
$ git config --global user.email ""
$ git config --global credential.helper cache
$ git config --global credential.helper 'cache --timeout=3600'

In my case /var/www/slash is served by apache2 (just on local network). This will be different if you're using the slashdev VM.

$ cd /var/www/slash

$ mkdir git
$ cd git

This creates the directory where I will keep local copies of all my git projects.

I started by creating a new repository called "test". Just for kicks. Can be deleted later.

$ mkdir test
$ cd test

You're now in /var/www/slash/git/test

$ touch README.md
$ git init

A commit is essentially a snapshot of all the files in your project at a particular point in time.

$ git add README.md
$ git commit -m "first commit"

So far, everything you've done has been in your local repository, meaning you still haven't done anything on GitHub yet. To connect your local repository to your GitHub account, you will need to set a remote for your repository and push your commits to it.

Create a remote named "origin" pointing at your GitHub repository (repository name is case sensitive):

$ git remote add origin https://github.com/crutchy-/test.git

Send your commits in the "master" branch to GitHub:

$ git push -u origin master

FORKING THE "slashcode" REPOSITORY

click the fork button on the Soylent/slashcode repository github page @ https://github.com/SoylentNews/slashcode

$ cd /var/www/slash/git

Download files into a subfolder named slashcode:

$ git clone https://github.com/crutchy-/slashcode.git
$ cd slashcode

When a repository is cloned, it has a default remote called "origin" that points to your fork on GitHub, not the original repository it was forked from. To keep track of the original repository, you need to add another remote named "upstream"

$ git remote add upstream https://github.com/SoylentNews/slashcode.git

Push commits to your remote repository stored on GitHub:

$ git push origin master</re>

PULL IN UPSTREAM CHANGES

Fetch any new changes from the original repository:
<pre>$ git fetch upstream

Merge any changes fetched into your working files:

$ git merge upstream/master

IRC logging bot

had a go at scripting a little quick & dirty irc bot for soylent.

requires sic (http://tools.suckless.org/sic)

if you're using debian:

sudo apt-get install sic
#!/bin/bash

chan="#test"
log="test.log"
pipe="log-pipe"

trap "rm -f $pipe" EXIT

if [[ -f $log ]]; then
	rm $log
fi

if [[ ! -p $pipe ]]; then
	mkfifo $pipe
fi

substr="End of /MOTD command"
joined=""

sic -h "irc.sylnt.us" -n "log-bot" <> $pipe | while read line; do
	if [[ -n "$line" ]]; then
		echo $line >> $log
	fi
	if [[ -z "$joined" ]] && [[ -z "${line##*$substr*}" ]]; then
		joined="1"
		echo ":j $chan" > $pipe
	fi
done

exit 0