• Home
  • Blogger
  • Github
  • Travel
  • The Tank Project
skip to main | skip to sidebar

Steven Occhipinti

A braindump.

Search and replace in multiple files with Vim

There are plenty of ways of doing a search and replace in multiple files in linux, but this is how I do it with vim.
$> vim firstfile secondfile theothers*
:all
:windo %s/this/that/g

The :all will split the window to show you all the files at once.
This would not be the best option for lots of files, but for a small number you get to see the changes that are made.
The :windo will execute the given command for all the files in the current window.
Note this wont affect windows in other tabs.

If you want to undo that change in all buffers, you can use the same method:
:windo undo
When your finished, you can save and quit with:
:wqall
There are plenty of variations, for more infomation checkout the help pages for these:
:tabdo
:bufdo
:argdo
Posted by Steve at 19:11 0 comments
Labels: linux , regex , vim Email This BlogThis! Share to X Share to Facebook

Cleaning up indicator-applet in Ubuntu

By default, the indicator applet in the Unity panel has an item in the list for evolution and another for empathy - two programs I don't use!

But, its quite easy to get rid of them! All you have to do is remove the appropriate file in /usr/share/indicators/messages/applications

Instead of removing them, I just removed all read permissions (root can still do anything with it of course)
$ cd /usr/share/indicators/messages/applications
$ sudo chmod 000 empathy evolution
Posted by Steve at 20:33 0 comments
Labels: linux , ubuntu Email This BlogThis! Share to X Share to Facebook

Multi monitor keyboard shortcuts in Ubuntu

I'm now using Ubuntu 11.04 with Unity as my primary OS for my desktop at work.
I'm still coming to grips with Unity - somethings I like, others I don't.

One of the things I do like is the compiz plugin called "Grid".
At first I thought it was just a clone of Windows 7 where you can drag a window to the left and it will fill the left half of the screen, drag it to the top and it will maximize, but after taking a look at the key bindings it does a bit more!

Using alt + ctrl + the number pad, you get more options!
Alt+ctrl+4 will make the window fill the left half (like dragging), 6 will do right, 8 will do the top half, 2 will do the bottom half and 7, 9, 1 and 3 will put the window in the appropriate corner, 5 will put it in the middle and 0 will maximize it.
On top of this, if you press the key repeatedly it will adjust from 1/2 screen, to a 1/3, to 1/4, to 3/4 and to 2/3. This is surprisingly easy to use and really helpful!

The only thing I couldn't work out how to do was move a window from one monitor to the other as these actions occur per monitor (i.e. 1/2 of one screen).

The answer was quite easy though, I just needed to enable one more plugin: "Put".
The "Put" plugin looks like it does similar actions to "Grid", so before I enabled it, I disabled all the key bindings (there was only about 2 enabled anyway).
Then I set the keyboard binding for "Put To Next Output" to "<Control><Alt>KPEnter".

When I enabled it, the Unity panel got a little screwed up (which is evidently not hard to break), so I restarted X and everything worked how I expected it to.
Now atl+ctrl+keypad-enter will move the window between my left monitor and my right monitor!
Posted by Steve at 15:55 0 comments
Labels: compiz , linux , ubuntu Email This BlogThis! Share to X Share to Facebook

The Tank Project!

So my brother Rob and I have wanted to work on a project together for a while now, and after our awesome Minecraft Server, we came to the realization that I love doing the functional side of things (setting up the software, etc.) and Rob loves doing the creative, hands-on side of things (putting the hardware together and making it look pro) and so together, this things compliment each other!

After scoring a Netduino (like an Arduino, but I write in C#.net instead of C) for use in a future project, this was the perfect opportunity for our skills to come together as Rob isn't keen on programming, and I'm probably not as good as him at making things, whereas he is quite passionate about that!

I've always wanted to have a play with an Arduino (or Netduino in this case). To actually allow my interest in programming to bridge across to the hardware world always seemed like a mystical unknown to me, but these little programmable micro-controllers allow just that - my software to use hardware!

Enter The Tank Project!

The idea was to build a physical tank that we can use the Netduino to control, but not just limited to controlling the movement of the tank, but then a variety of other features.
Things that came to mind were a working (not-so-dangerous, legal) canon, webcam feeds for remote control, mobile application to drive it, 360 degree spinning turret and just about anything else we could think of!
Our imagination started going wild with vague memories back to Robot Wars and so we set aside a day to brainstorm ideas and develop a plan of attack (pardon the pun). That day was yesterday, and it went well! :)

We're going to try to keep a project blog going if you want to keep track of the progress:
http://tank.stevenocchipinti.com

("keep track of the progress" is also a pun... theres going to be a few of these, lol!)
Posted by Steve at 15:31 2 comments
Labels: netduino , tank Email This BlogThis! Share to X Share to Facebook

DHCP fixedhosts to /etc/hosts file

This was a completely random (and not that useful) thought!

I have memorized which IPs are assigned to which machines in our home LAN as simply pinging a hostname doesnt really work in linux (by default) as it did with windows (unless I setup WINS... I think... correct me if I'm wrong).
So short of setting up an in-house DNS server, hosts files come in handy for stuff like this.
(I really didn't need to setup a hosts file, but assuming I did want the convenience)

I thought I've already defined which hosts get which IPs in the fixed hosts table of the DHCP server in my router, surely I could just use that!
I remembered the router has telnet open internally, so I wrote a one-liner to do it:

echo "admin^M$PASSWORD^Mdhcpserver list fixedhosts^M^]^D" | nc 192.168.1.1 23 | \grep "[ ]*[0-9]" | sed "s/[ 0-9]*| \([^ ]*\)[ ]*| \([^ ]*\).*/\2\t\1/g"
I echo the username, password, the command to give me the table and logout then grep for the (numbered) entries of the printed table, which gives me entries that look like this:

...
   4 | stevepc    | 192.168.1.3      |  00:11:22:33:44:55  | 0         |
   5 | NAS        | 192.168.1.10     |  00:22:33:44:55:66  | 0         |
   9 | Minecraft_SVR | 192.168.1.62     |  00:33:44:55:66:77  | 0         |

...

Then I use sed to put it into the same format as /etc/hosts:
...
192.168.1.3     stevepc
192.168.1.10    NAS
192.168.1.62    Minecraft_SVR
...
This isn't really that useful, but it took a couple of minutes, just to "see if I could do it"... and it worked :)

... I don't think I'll actually use it, lol, but it was fun anyway :P
Posted by Steve at 22:28 0 comments
Labels: bash , linux , regex , sed Email This BlogThis! Share to X Share to Facebook

Multiple Google accounts at once!

So I started my new job and they use Google Apps!
Initially I thought this was fantastic, until I realized that because I also use Google Apps for my personal email, I couldn't have 2 simultaneous gmail logins (by default).

I found some out-of-date firefox plugins to work around this, but they weren't very nice, so I just pinned my work gmail as an app tab and left it at that.

Then I noticed a co-worker had about 3 gmail app tabs, and too my surprise it wasnt some dodgy plugin that allowed this, but an official Google solution!

The answer:
http://www.google.com/support/accounts/bin/answer.py?answer=181599

This allows you to have multiple Google accounts signed in at once, with a few caveats.
Once enabled, the first account you sign into is your "primary" and behaves normal, the subsequent logins will only work on particular products (gmail is the obvious one) but will work in isolation to your other logins.

I chose my personal account as my primary because things like blogger do not work as a secondary account.. and I don't have a work-blogger account :P

This is was only really an issue if you want to use a single browser on a computer, as my phones gmail app handles multiple logins fine.
Posted by Steve at 09:36 2 comments
Labels: Google Email This BlogThis! Share to X Share to Facebook
Newer Posts Older Posts Home

Blog Archive

  • ►  2013 (4)
    • ►  June (1)
    • ►  May (1)
    • ►  March (1)
    • ►  January (1)
  • ►  2012 (17)
    • ►  December (1)
    • ►  October (1)
    • ►  September (2)
    • ►  August (2)
    • ►  July (1)
    • ►  May (2)
    • ►  April (2)
    • ►  March (3)
    • ►  February (3)
  • ▼  2011 (33)
    • ►  December (1)
    • ►  November (3)
    • ►  October (3)
    • ►  September (4)
    • ►  August (3)
    • ►  July (4)
    • ►  June (6)
    • ▼  May (6)
      • Search and replace in multiple files with Vim
      • Cleaning up indicator-applet in Ubuntu
      • Multi monitor keyboard shortcuts in Ubuntu
      • The Tank Project!
      • DHCP fixedhosts to /etc/hosts file
      • Multiple Google accounts at once!
    • ►  April (3)

Labels

android (5) apache (1) arch linux (1) arduino (1) bash (11) calendar (1) compiz (1) design (1) diff (1) email (1) gimp (1) git (3) github (2) gnome3 (1) Google (2) hacking (1) hardware (4) howto (1) htpc (1) java (1) lamp (1) linux (28) Mac (2) minecraft (2) mysql (1) netduino (1) nfs (1) parallel port (1) patch (1) photography (4) php (1) pidgin (2) printer (1) programming (6) python (1) rails (1) regex (5) review (3) ruby (3) Samsung Galaxy S3 (2) Samsung Series 9 (1) security (1) sed (3) ssh (1) sudo (1) tank (2) Toshiba Portege (1) troubleshooting (1) ubuntu (16) ui (2) unity (2) vim (5) webcam (1) websites (3) xbmc (1) xclip (1) xul (1)

Total Pageviews

Sparkline
 
Copyright (c) 2010 Steven Occhipinti. Designed by Conveyancing
High Deductible Health Insurance, Purchase Beats