Tuesday, September 6, 2011

git and nomad life

This entry is like a note to myself, just to help remember setting this thing up again if needed...

So I have my track creations in a public git repo at repo.or.cz.
So far I've only been using it to publish my ideas to the world, but now my time schedule has changed and I wanted to gain full access from another computer, too.
I had no problems using git clone to clone the project on the new computer. Then I've set up some tracking branch with 'git branch -t track_name origin/track_name', fetched it with 'git fetch origin' and began working on it after the merge: 'git merge origin/track_name'.
But then after some changes I wanted to push them to the repo, so I could continue work on the other computer. However I could not get it working unless adding a new user at repo.or.cz/reguser.cgi. It also meant generating a new SSH key with ssh-keygen, and copying the public key to the appropriate edit field on the register page.
Then I've edited the file .git/config and added a new line in the section '[remote "origin"]' a new line, right after the fetch URL line:
pushurl = ssh://newusername@repo.or.cz/srv/git/kilo_torcs_tracks.git

Now I can fetch the whole thing issuing 'git fetch origin track_name' and push to it 'git push origin track_name'. The server asks for the SSH passphrase and voila it works.
Right, it may be obvious for some, but I am happy now and wanted to share it :D

Note #1: you may ask why did I not use my existing pubkey to register. Simple: forgot where my USB stick with my pubkey was, and did not want to wait 3 more days with the whole procedure when I got back to the same situation... yes I know, I am lazeeeeehhhh.

Note #2: remember, don't git pull, rather git fetch and then git merge... Details here and here.

Sunday, August 28, 2011

Knockhill dilemma solved

Thanks to everyone who has expressed his/her opinion about my planned track.

The results are:
Realistic: 5
Easy: 2

manfariel has even produced side-by-side videos with a real-life on-board lap on the left and himself driving around the track in Speed Dreams, on the right, synchronised. Wow!

So the more realistic option wins, even without my own vote. Thanks again for sharing your views.

Sunday, August 14, 2011

Knockhill dilemma


HELP NEEDED!

I've been working on a track for some time now, Knockhill in Scotland.

It is a 2 km long (or better, short), fast track with very interesting corners, turns and altitude changes. What gives me headaches is the latter one. The information available of the track says that it is "varying by around 200 feet (60m) from highest to lowest point." I've mapped the track outline, tried to get the altitude and banking changes right, but I have a burning un-certain feeling in my soul about it.

At first try I've made it so that the Z-size, ie the difference between the lowest and highest point on track was 200ft. Man, was that track hard to drive? Sure it was. It had some drops that you would even think about going down there by bike, not even a racecar... Robots behaved very different in the drops and climbs, some were flying out straight ahead like an F-14 catapults from a carrier ship, others slowed down and managed to follow the track more safe. In short, the track looked and behaved too dangerous.

Now, I haven't been to the track IRL. I only know it from photos and BTCC races available on Youtube. So I've never walked down there on those slopes to get a real feeling of them. There may be this kind of sharp changes in altitude, or there may be not.

My next idea was to halve the altitude changes of the track. It was easy to do, only had to change the 'grade' and 'profile end tangent' values of each segment in the track XML file. After generating the track, I was eager to see how it feels to drive around. And - I liked it more than the original! It seems the robots like it more, too. It simply feels more natural.

So I have this track that feels great to drive, and another one that is more hi-fi in regards of data. Which one is better? I cannot decide, so please help me! The two versions are available here (safe one) and here (tricky one). Please download and test them and share you views either in the comments or via e-mail.

Remember, I need your help
or this track won't be finished ever and all the great resources used for creating it will be lost forever to humanity :D

NB the tracks are unfinished - they don't have a pitlane, textures are basic, etc. But they are drivable. I've driven them in Speed Dreams, but I guess they also work in TORCS. To install them, just copy the contents of the archives to the track/road location, in a folder named 'knock'.

Thursday, June 30, 2011

Install Speed Dreams on Ubuntu

Following up of my TORCS install howto, today I'll tell you what I had to do to get Speed-Dreams up and working on a brand new, clean Ubuntu 11.04 (Natty Narval) install.
NB: I usually work on the trunk branch of Speed Dreams, using git-svn, but I think the download packages should work the same.


So this is what I've started with:

  • sudo apt-get install cmake libsdl1.2-dev libjpeg8-dev libxmu-dev

then made some links:

  • sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so
  • sudo ln -s /usr/lib/libGLU.so.1 /usr/lib/libGLU.so
  • sudo ln -s /usr/lib/libXi.so.6 /usr/lib/libXi.so

(idea from here)


then downloaded and installed Plib the usual way (later I learned there is a plib-dev package in Ubuntu now...):

  • Visit the PLib download page.
  • Download the 1.8.5 version, then do as told: tar xzf plib-1.8.5.tar.gz
  • cd plib-1.8.5
  • ./configure
  • make
  • sudo make install
and then onto adding some more dev libs:

  • sudo apt-get install libopenal-dev libenet1-dev

At this point "cmake ." still wasn't happy, whining about some plib thingies. Quick googling led me to our own forum (khm) and launching cmake in interactive mode (cmake -i .) I was able to set the correct location of the PLib includes.
This was so satisfying that cmake agreed to complete 100%.


Now in the make phase I quickly faced the first problem, at about 9% of compiling. It missed some libplib*.so files in the /usr/lib directory. Noproblemo, linking is our friend (every other day):

  • sudo ln -s /usr/lib/libplibul.so.1 /usr/lib/libplibul.so
  • sudo ln -s /usr/lib/libplibsg.so.1 /usr/lib/libplibsg.so
  • sudo ln -s /usr/lib/libplibsl.so.1 /usr/lib/libplibsl.so
  • sudo ln -s /usr/lib/libplibjs.so.1 /usr/lib/libplibjs.so
  • sudo ln -s /usr/lib/libplibssg.so.1 /usr/lib/libplibssg.so
  • sudo ln -s /usr/lib/libplibssgaux.so.1 /usr/lib/libplibssgaux.so

And so it compiled at last...
Now I'm busy racing :)

Monday, January 10, 2011

git <-> svn

You may guess now I like working with git. I am always amazed how easily I can match the abilities of this software with the several, often changing needs that arise during my work or hobbies. Oh right, it cannot help in skating faster...
And then there is Subversion. I should not say I hate it but I think it is a slow dinosaur, ugly, fat and slow-moving. But still, many projects use it so if you want to participate in them, you've got to follow the flow.
And there comes git-svn to the rescue. It enables you to use your beloved git in a subversion-based project easily. This is how I've set up my workplace for Speed Dreams development, using git for effective feature branching, mergeing, rebasing and such git candy:
mkdir sd
git svn init https://speed-dreams.svn.sourceforge.net/svnroot/speed-dreams/trunk
git svn fetch -r3096 (of course you can choose another SVN revision)
git svn rebase
and voila you have a nice and shiney git repository that mimics the SVN repo.
Anytime you want to update your repo (like doing 'svn up'), just issue
git svn rebase
The above process is explained in more detail here (thanks, Flavio), along another entry here.

Now onto feature branching:

I quite like the Story branch pattern, so basically what I do is:

1) Find a ticket to work on in the Speed Dreams Trac system, let's say it is ticket #100.
2) git co -b 100_ticket_short_title this creates and switched to a new git branch that I will use for this ticket only
3) hack this & that
4) git add -p
5) git ci -m 'Commit message that really tells something. Re #100' - so I always try to include the ticket number in the commit message, good for Trac coverage.
reiterate 3-4-5 until ticket is finished
6) git diff --cached (review all the work done)
7) git rebase -i HEAD^8 (or so, view last 8 commits and squash them together if needed - this to get rid of the side effects of very frequent git commits)
Now before committing to SVN let's make sure it won't cause any conflicts:
8) git svn fetch && git svn rebase (OK maybe git svn fetch isn't needed)
If still 'green', then commit to SVN:
9) git svn dcommit
Now switch back to the master branch and update it, too:
git co master
git svn rebase
Set the ticket status fixed and delete the branch, if you like. I prefer to keep it around for some weeks in case the ticket is reopened after the initial tests, but you can get rid of it or create a new branch then - really just a question of taste.

The only thing you should really take note is: you cannot do a git svn rebase if you have any uncommitted changes. Fabio's blog says he uses git stash to put away his changes, does the rebase, then does git stash apply to get his changes back. I prefer to commit my changes instead, do the rebase and then work on the usual way. Which one you choose is up to your taste - both approaches work fine.

This is the real git magic - you can choose the way you work!

Friday, October 29, 2010

Ramblings - 2010/43

Remember last time I wrote that I can run Speed Dreams again with decent FPS? Well, that seems to get worse now, the driver fails quite often and SD exits then. Another Linux bug, got to check the reports :(

Yet I've managed to develop the robot some more. Now it can handle skill settings, so you can set it up to be hmmm 'less than perfect'. The setting affects the braking (it starts breaking for a turn earlier), accelerating (it accelerates slower) and the width of the track is uses, so it isn't so brave using the full width of the track and sometimes even more, remains on the 'safe side' of driving. Whether this skilling is consistent or not, ie when skill is lower by 10% the lap times get worse also by 10% is subject to further testing.
Now I am in the process of setting up the LS-GT1 carset for the robot, the first car (the Archer R9s) is kinda ready with two fictional drivers. Check the process details here.
In the meanwhile I am trying to adapt the coding style of the whole robot codebase to match that of Google's advised C++ coding style. While in some moments it seems to be too narrow-minded pedantric there is quite some thought in it and in the end it may help improve code quality. One of the changes was to use full path in includes, #include "src/drivers/kilo2008/pit.h" instead of #include "pit.h". Kristof reported it caused problems when building the code but I think it is rightful to be sure the compiler uses the correct header files in situation like ours when there are several robots in the source tree with a pit header. Later Kristof said it only caused problems when using a separate build directory so not in normal cases. Another suggestion was to use "using ::std::string;" instead of "using namespace std;" so not to pollute the global namespace, something I've never ever thought of but can see the reason behind. cpplint.py is a great tool helping this process (nah in reality is a nasty little !*@#**^%& but we love it, right?)

Track-wise I am fighting a pitlane issue of too wide a pit lane and matching the correct texture for it. Just look at sat pictures of the St. Petersburg GP and you'll see my problem. Oh damn, I've so many track ideas... and Knockhill is next on the door.

The other day I've ticked off a ticket about incorrect number of laps displayed in the board1 area that was caused by such a trivial error I didn't notice it for an hour or so... passing the address of a char array to a function, then checking it's size is snprintf, the size if not the array size but the size of the pointer hahaha (4 vs 255). Trivial but painful :)

Haruna has shot a nice video of the current state of Speed Dreams, it is on Youtube, check it out:

That's all that comes to my mind today, Halloweeeen is right here \o/

Friday, October 15, 2010

Ramblings - 2010/41

Whoa it has been quite some time since the last post... Long story short: I lacked computing power to run Speed Dreams in an enjoyable quality, could only get 4-5 fps max! on my laptop, detailed here. Now I've updated it to the latest Ubuntu version and using the community-driven radeon driver it is able to produce 25-30 fps in a race so I can enjoy SD again. Wohoo!

Speed Dreams is nearing a 2.0 state slowly, and I can tell you the wow! factor will be high once you try it. Many a things has changed since 1.4 and you can enjoy using it very much. There are new tracks, new cars, a lot of sim engine changes, user-friendly menus etc etc.
My code additions are not too many yet but still I've managed to display the pitting driver differently on the leaderboard and resolve some track name and info issues when loading a track.

I've dusted off my kilo2008 robot and started adapting it to SD. You can follow its evolution here, or on a dedicated wiki page in the SD Trac. It is now able to drive along any track quite safely following this logic: it measures how long a track is and how many degrees of turns are on the track. From these data it computes something we can call like 'curviosity', ie: curves vs length. Then it decides which setup to use for the track - slow, default or fast. Of course one can create track-specific setups, if anything like that exists in the appropriate directories then the robot will use that instead of the above procedure.
I've also made it able to drive 20 cars the same time (some code stolen from Andrew...). Now I'm trying to squeeze in some code to handle skilling - so you can set one driver better than the other, or globally the user can select how strong (skilled) robot opponents he/she wants to play against.

Tracks - the same state where I've left them. But that's going to change soon.

Too bad the TRB Champs this year was no-go, cancelled.

Monday, March 8, 2010

Ramblings - 2010/10

Emmm I'm bit late with the "periodical" ramblings but I've been busy busy busy...
So with Speed Dreams we had a quite successful beta out, about 80k downloads from sf.net alone. Most of the tickets are closed or moved to the next version, so what you can download now is the version we call RC but if no serious flaws are found, it will be identical to the Release 1.4.0.
We are already planning the features for 2.0 - it is a huge mess now but it will take shape in the upcoming weeks. We decided to stick to a quite strict release policy so the feature list will be freezed by the end of March, that means the 2.0 will be out when all the features we voted for are complete. Each feature will get a responsible sub-team and a leader, and we push for documentation and testing more than before. If you like SD and feel an urge for a feature, or would like to join us developing it, feel free to post your idea on the Wiki pages *now*. Be quick or be dead :)
I'm slowly moving forward track-wise, fiddling textures quite a bit but I'm sure the tracks will be released sooner or later...
BTW Kennet has put together a nice but very difficult track and sprintea86 has also published one - this one makes me dizzy though turning turning and turning.