Friday 6 September 2013

Jiksearch

Jiksearch

"Some of the people want to query about democracy, but most of them just want to know about their pop stars." --Google [1]
Jiksearch is a distributed peer-to-peer (P2P) web searching platform. At least in theory.
Why? All search engines are subject to government and/or corporate control. The likelihood that this will not be abused on a larger scale than today in the future is low.
The project was directly inspired by Google's decision to kowtow to the Chinese government's demands that they censor politcally unacceptable pages (See also [2]). Other search engines have been effectively helping to interfere with human rights in China for some time, but Google's decision came as a shock because, until very recently, they were perceived to be an exciting company with people who care about things other than money. Inevitably, of course, this had to change.
Its easy to dismiss China as a special case of totalitarianism and take refuge in the fact that one lives in free country X. But recent trends all point towards more government control of the internet, in virtually all countries with functional governments that are large enough to care. The US, UK, Germany and France are of course high on the list. In the not too distant future, government control of the internet may become the norm rather than the exception. Even without this, the control that a company such as Google has over the internet is a cause for concern, as their inital highminded ideals are likely to be more and more superseded by the basic profit motive and conserve-control mentality that seems inevitable.
While competitors may challenge Google in the long run, the basic problem is not with Google but with the need for a vast cetralised database containing in essence the whole internet. Large centralised databases are irresistable to those who wish to control other people's lives.
Hence, the only real solution is a decentralised web search platform. These pages contain some inital ideas towards this ideal.
First, some history of an earlier idea for decentralised web searching. The only existing reference to an actaul implementation for a distributed web searching application that I could find (not that I did a very exhaustive search, help me if i missed something) was to something called InfraSearch in the year 2000. According to c|net, this started out as a group of opensource programmers from gnutella fame, who saw the obvious potential in the technology of the filesharing P2P networks for web searches. Brilliant idea, but what happened? Very little. The project seems to have paid off for the few programmers involved, but nothing actually developed out of it since SUN Microsystems bought the project, stripped the useful technology for their JXTA project and forgot all about the original idea of decentralised web searching by "generalising" the technology. (Is this at all accurate?)
Next, some ideas on how a decentralised web searching platform would work. We are thinking in terms of an application that would be installed on clients computers, possibly in the form of browser extensions. The browser then simultanously exposes web search functionality while contributing resources (CPU, memory, hard disk space and internet bandwidth) to the decentralised search system. As an added bonus, sites that are actually visited by the user of the browser can automatically be included in the system. However, some crawling will be required, especially at first and to ensure that the system is up to date. Dedicated servers should also be available for "serious" contributors, but the idea of supernodes goes against the principle of decentralisation, so they should essentially have the same status as any other node.
Decentralised searching is not a trivial task. Users construct queries concsisting of multiple keywords (keys) that must be found in combination on a given web page (page). Say a user constructs a query consisting of "Microsoft Windows", not as a phrase but as separate search terms. Now ideally, the user wants to see a list of pages containing both words, out of all possible pages on the entire internet, ranked according to relevance. There are too many pages containing "windows" to store a database of them on a single servent (P2P lingo for a node acting as both client and server simultaneously). The same holds for "Microsoft". Even if list of pages could be generated for each of those, how are the two lists of terms to be combined? Sending all of those pages to the client for combination is impossible, as is sending all of the pages from one server to the other for combination.
The Kademlia protocol is designed to overcome the problem of decentralised searching in an imperfect network, e.g. where hosts become unreachable at random times (see also [3] and [4]). It works by assigning each servent a random code, which is then fixed. This is used as a hash for determining the distance between any key and between the host and other hosts (with other keys). In this way, hosts can form connections based on nearness, and hosts can index infromation based on their nearness to it. A client wishing to search simply locates hosts that are near the results (since the client can easily calculate a hash of the search terms) and asks at the most appropriate place. (This description is probably inaccurate and incomplete --MvS).
Kademlia is designed for locating a particular file on a P2P filesharing network, and as such the abovementioned problem of combining multiple terms is much less apparent.
One possible solution to the problem of combination is to have two separate layers of data, with seperation being done differently in each. In the first, the keys are distributed while in the second, pages are distributed. The key-seperation layer is able to direct queries to hosts that are likely to be able to provide matches by searching full pages (i.e. the second layer). The first layer can only search on a single key at a time. Key searches and page searches should probably be done in the same way. Each host therefore keeps some web pages (completely) and also some keys, and a search will generate a combined list of hash values that are near pages that contain the key (layer 1) or it may have actual results (layer 2). In the first case, the query is passed on to another host (based on the returned hash value), while in the second case the results is simply passed to the user. Ultimately the client aggregates results as they come in and presents them to the user in real-time. Part of client's database may be dedicated to searches commonly requested of it (e.g. directly from the user in front of it), but then the problem is how to make use of this information, since it is unlikely to be "near" the servent's randomly generated hash value. One way is to send a notification that this servent may be used as a layer 2 host - notifications are sent to the appropriate layer 1 hosts that this host contains information on each of the keys. The receiving (layer 1) host associates the hash value of the notifier with likely keys in its own database. Only hash values are sent in notifications. But this may be inefficient as it breaks the principle of hash value nearness - if the host goes down or purges the page then hundreds of notifications have been sent in vain. Unless the most important pages are also passed on to hosts that are near (sparingly), so that eventually self-organising clusters form that are strongly mapped (in layer 1 space) to relevant keys. This also ensures that often used searches on the internet are duplicated widely around the world.
Of course, "relevance thresholds" and TTL schemes should be used to prevent terabytes of search results from being sent to the user. Having keys and pages that normally go together on the same host would be a bonus, hence the hash algorithm may need to be adjusted dynamically to optimise according to local conditions. Some type of artificial intelligence, e.g. genetic algorithms, could be useful. In general, bandwidth will need to be very carefully managed.
Alternatively, entire multiple-word queries can simply be assigned a single hash value and then passed to a single host. This means must somehow be able to return results for complex queries based on a small dataset (each host only has access to a small dataset as a rule).
Blah, lots of work obviously.
Where does the project stand currently? Effectively this is an initial feasiblity appraisal. We need to know about the technologies involved (a list should be compiled), theoretic material should be studied (some links below) and similar efforts should be investigated.
Clearly, distributed searching is an old topic, and clearly it is a difficult one.
Links:
A company that makes offline websearch software: [6]. This may be relevant simply because it may contain information on a method to select which information is important enough to include in an index. Obviously any aproach where a single company decides on the contents of the index is an abomination of the highest degree.

Ubuntu DVD Mirror

Got the script from entner.netHere is my modified version that works for any number of DVDs and is configurable for different architectures and distribution versions.
P.S. see this bug if you want to run the script on an Ubuntu Edgy machine, since Edgy’s debmirror is broken. The fix proposed in bug comments works.
APTonCD is another approach that I haven't tried yet.

Ni

Ni

Ni will be a programmer's code editor written from scratch in Python. The idea is to get the core functionality done clean and right. This should then be easily extendable and it should be an excellent platform to base other editors from or to just try out new ideas. On top of this I'll build different editor GUIs. Initially GTK and curses GUIs are planned, later maybe QT, MacOSX, etc.
For now the editor will be unicode and utf-8 only and won't support word-wrap.

WHAT'S WRONG WITH EMACS?[edit]

I never quite got into Emacs. I tried many times, but I just don't get it. The keyboard bindings are confusing to people who aren't long-time Emacs users, the Emacs way takes a long time to get used to, etc. It is just not something you can pick up and start using immediately.
Emacs seems to have a core written in C and it uses it's own version of Lisp. Personally, I don't feel like extending an editor in either of these languages. Emacs is big and bloated. I get the feeling that there's a lot of legacy cruft in there. On some level this makes sense - the codebase is very old and a lot of things predate current technologies, libraries and frameworks. I'm sure a lot of stuff in there is simply not needed. Correct me if I'm wrong on this one, but I don't think the regular expressions are even Perl-compatible. I also prefer the JEdit style way of doing find and replace, for example.
Also, it is difficult for someone like me to try and jump in there and rip things out or clean things up.
I'm not mad about the way it handles multiple documents. Actually.. I'm not mad about the way _most_ editors handle multiple open documents/buffers.
What is good about Emacs is that it runs in command-line mode and also in graphical environments. Also, a lot of modes, scripts, plugins, etc exist for it and it has a huge following. Syntax highlighting is also impressive.

[edit]

WHAT'S WRONG WITH VIM?

VIM seems to be quite tied to the fact that it is a modal editor and that's _so_ last century :) Actually.. I quite like VIM. I use it to edit config files all the time. I think I am relatively fluent in VIM, so I can probably give a better review here than for Emacs.
Again, VIM is written in C. Yes you can extend it with outher languages, but this is not really what I'm after. Again, the regular expressions and find/replace is not up to today's standards. Also don't like the way multiple open buffers/documents get handled.

[edit]

WHAT'S WRONG WITH JEDIT?

I really like JEdit. I feel it is highly underrated. The main reason why the free software / opensource world never really adopted it is probably because it is written in Java. I think even now that Java was made free that's still a handicap, because 1) Java is a relatively big dependency just to run one app and 2) Java doesn't really integrate into GNOME or KDE desktops. (not like GVIM or Emacs really does either, but still.
The fact that JEdit is written in Java always bugged me. Minor things just don't fit well into a GNOME environment, for example and I'm not so sure if this is really solvable. It is relatively resource hungry and it already contains a lot of stuff I don't need. I really would have liked if it was more GTK/GNOME-like and I'm sure Windows, MacOSX and KDE people probably feel the same about their environments.
Every time I install JEdit I find myself removing the toolbar and the buffer switcher, enabling line numbering, changing the tab/indent settings, installing the buffer list and editor scheme plugins, etc. The rest I never touch.
There are a few things I would like to change in JEdit, but I don't really feel like learning Java (again). Also, it feels like there's no real community around JEdit. I don't quite know how to explain it, but maybe it is just because the website doesn't really get updated. There is no name or face to it, I guess and I feel a bit afraid to jump in there and start working on it ;P
I really like the keybindings, the editor scheme plugin and themes and the find/replace and hypersearch dialog. I feel like the "Buffer List" plugin could do with some work, but it is already by far better than a tabbed interface or the way buffer switching works in VIM and Emacs.
Ni will draw a lot of inspiration from JEdit.

[edit]

WHAT'S WRONG WITH ECLIPSE AND OTHER IDES?

I've never been a fan of IDEs. I guess it makes more sense if you're programming in C/C++ or Java where you basically need it, but users of more modern languages like Python or Ruby probably don't need it. I prefer my apps to do one thing and do it extremely well and that's editing code.
Eclipse is also very big and bloated. I want something that's written in such a way that it is very easy to slap another interface onto it. For example - Some people like GTK, others like QT. Some people like popup/modal dialogs, others prefer editors that don't have any of that and can be used without ever taking their hands off the keyboard. I want to be able to easily experiment with these different alternatives while still sharing the same common core and plugins.

[edit]

WHY NOT JUST BASE THINGS OFF GTKSOURCEVIEW?

GtkSourceView _is_ basically an editor and it is tied to GTK forever. It works the wrong way around. I want to abstract things in such a way that the basic logic is mostly contained in pure/normal/reusably Python classes/objects and you bolt a GUI toolkit's interface onto it.
Similar reason why I don't just work on GEdit.

[edit]

WHY PYTHON?

I know and like Python :) Python already runs almost everywhere. There are more and more implementations of Python popping up. Python has a large amount of libraries and bindings and I'm even hearing of bridges that will allow you to hook up other languages with Python. I think it is much better at working with text and abstracting things than C can ever be and it is immediately useful.

[edit]

WHAT FEATURES ARE PLANNED?

For now, just loading/saving documents, multiple documents open at the same time, navigating around using cursor keys, home, end, page-up, page-down and the same keys while holding down control, selecting text, copy-paste, delete, backspace, indent, unindent, undo, redo, find/replace JEdit style. Just the basic, core stuff. Then I'll add syntax highlighting and different language modes. I'll build a curses and GTK interface on top of this and make things like key bindings very configurable.
After that I'll recap and start playing around with things, but I think that's basically the main features everyone needs for now. Will probably start working on a plugin architecture.
I think after I made curses and GTK interfaces, the rest will be easy. By then the differences between events and the way the screen gets updated will probably be abstracted / handled sufficiently so that the next toolkit will be easy to implement. I suspect for the GTK interface I'll have to draw text manually onto some low-level widget, because GtkTextView / GtkSourceView will not do. Probably using Cairo and Pango?
[edit]

WHY THE NAME NI?

From Monty Python and the Holy Grail's Knights that say Ni. Or for "New and Improved". A joke around vi. Something like that.

Git

Git

Git is a Infobot, also known as Estaga's son. Git has been around on the 'private' irc network since about 2000, it's database has been transplanted through various machines throughout the years but luckily it's still alive and kicking and happily serving everybody with their queries.
Over the years several limitations have been noticed with Infobot, but luckily due to the semi-modular fashion it was written, it's quite easy to script simple add-ons to the bot, our attempt at documenting most of the modules are below. If you're more interested in 'normal' usuage of the bot (as a newbie or such) I suggest you read the offical guide here.
If you are here because of the 'AnnounceBot' in the channel, please go here

bus

(by Estaga)
This is a scripty that checks Transport for London's website for updates of any problems on bus routes, perfect for going home/to work (:
Help page:
14:53:52 <Estaga> bus help
14:53:53 <Git> Syntax is: bus <busnr>
So if you have a specific bus route:
14:53:56 <Estaga> bus N50
14:53:58 <Git> This bus route N50 has no worries!
A faulty one would look something like this:
14:54:38 <Estaga> bus N47
14:54:40 <Git> BROOKMILL ROAD :DEPTFORD: DIVERSION: From 2000 Sunday 10
              September until late December, Routes 47 225 and N47 are
              diverted in both directions between LEWISHAM HIGH STREET and
              DEPTFORD BROADWAY/DEPTFORD CHURCH STREET, not serving Loampit
              Vale, Jerrard Street, Thurston Road or Brookmill Road. Diverted
              buses operate via Lewisham Road, Blackheath Road and Deptford
              Bridge Station, serving all existing bus stops. Buses are
              expected to experience long delays in the area.


chuck

(by sexybalrog)
Chuck grabs from the interweb a Chuck Norris fact, this script takes no arugments...
15:03:47 <Estaga> chuck
15:03:48 <Git> Sticks and stones may break your bones but Chuck Norris words
              will kill you.

define

(by Estaga)
Define scrapes Google by using the "define:" keyword, this lets google look for a definition of whatever you are looking for.
Define has two modes, normal definition mode where you just enter the word(s) you want to know about - or - you can look for definitions that's like the one you entered.
Example of a normal definition:
12:25:15 <Estaga> define rate lock
12:25:15 <Git> A commitment issued by a lender to a borrower or other mortgage
              originator guaranteeing a specified interest rate for a
              specified period of time. | The amount of time that a lender
              will guarantee a loan's interest rate. Once you've locked in the
              interest rate on a loan, the lender will guarantee that rate for
              a certain period of time, usually for 30, 45 or 60 days. | A
              guaranteed rate of interest for a specific time frame on a
              mortgage loan.
Example of like:
12:25:10 <Estaga> define like lock
12:25:10 <Git> Also have: lock-in |lock in |air lock |lock  up |rate lock |lock
              box |lever lock |caps lock  |num lock |lock time

dial

(by Trax)
This script should say in which area or network a number belongs to, something like:
15:01:19 <Estaga> dial 2721
15:01:20 <Git> The area code for Cape Town in Western Cape Peninsula is +2721
[edit]

distance

(by Estaga)
A quick hack to find the distance between one UK postcode to another, this uses Google Maps to figure it out. Postcodes should not have its usual spaces when being entered.
14:13:33 <Estaga> distance E122SX WA139WE
14:13:35 <Git> Google says that by car from E122SX to WA139WE should be 197 miles
              (about 4 hours 18 mins)

[edit]

dlr

(by Estaga)
Simple script to check the Transport for London's webpage for any problems on the Docklands Light Rail line, this command takes no arguments, example:
14:57:01 <Estaga> dlr
14:57:03 <Git> Good service in operation.
[edit]

email

(by Estaga)
Sends email to specified address with specified text. There are some antispam measures built in and this is being watched for spammers! Syntax is:
<Estaga> email example@example.com this is a example email sent via Git
<Git> Mail sent successfully to example@example.com
The receiver will get a e-mail saying which nickname at which time said what and how to respond in-case it's SPAM.
[edit]

exchange

(by Estaga)
Exchanges one currency to another, I replaced the infobot built-in script with mine as it had some hassles. Currencies must be their shorened 3-character symbols. It gets this exchange information from Xe.com.
<Estaga> exchange 1 GBP to ZAR
<Git> 1.00 United Kingdom Pounds = 11.5729 South Africa Rand at 2005.09.15 07:19:28 UTC.
<Estaga> exchange 1 GBP to EUR
<Git> 1.00 United Kingdom Pounds = 1.48709 Euro at 2005.09.15 07:19:28 UTC.
<Estaga> exchange 1 USD to ZAR
<Git> 1.00 United States Dollars = 6.38058 South Africa Rand at 2005.09.15 07:20:28 UTC.
[edit]

geoip

(by Estaga)
Uses the 'geoiplookup' program to figure out in which country a DNS name or IP address is.
<Estaga> geoip www.cnn.com
<Git> GeoIP Country Edition: US, United States
<Estaga> geoip 196.25.1.1
<Git> GeoIP Country Edition: ZA, South Africa
[edit]

googlecalc

(by Estaga)
Does Google Calculations (really does a google.com search but will only reply if the google calculator was used), this is the preffered way to do some calculations as the built-in infobot one is rather limited.
<Estaga> googlecalc 1 cubic lightyear in imperial tablespoons
<Git> Google says: 1 (cubic lightyear) = 4.76812836 × 10^52 Imperial
<Estaga> googlecalc 1 byte per second in megabits per year
<Git> Google says: 1 (byte per second) = 240.760238 megabits per year
[edit]

googlewhack

(by Estaga)
Performs a Googlewhack search on google.com.
<Estaga> googlewhack binary entropy
<Git> Googlewhack for: binary entropy = 1,400,000 results
[edit]

gspell

(by sexybalrog)
Uses google.com to see if a word is spelt correctly, eg.
15:03:06 <Estaga> gspell zimbabwa
15:03:09 <Git> Google decrees that you're looking for zimbabwe
[edit]

ipcalc

(by Estaga)
IpCalc is to calculate the minimum/maximum hosts in a subnet, some other functionality will propably be added once more is needed *grin*. Syntax:
14:34:10 <Estaga> ipcalc help
14:34:25 <Git> git: ipcalc 192.168.1.0/24
So, min and max usuable ip's on the above subnet would be:
14:43:01 <Estaga> ipcalc 192.168.1.0/24
14:43:02 <Git> HostMinMax: 192.168.1.1 192.168.1.254
[edit]

jokes

(by Trax)
Grabs a joke from some online resource, this script takes no arguments:
15:09:43 <Estaga> jokes
15:09:44 <Git> What do you call two banana peelings? A PAIR OF SLIPPERS
It also has a adult-themed dirty version, called like this:
14:38:24 <Estaga> jokes dirty
14:38:24 <Git> "The length of a film should be directly related to the
              endurance of the human bladder."  Alfred Hitchcock.

[edit]

jse

(by Estaga)
Queries the Johannesburg Stock Exchange for current USD,GBP & EUR rates.
<Estaga> jse common
<Git> JSE Reports at: Thu Sep 15 2005 09:12:44 | the Dollar at 6.3926 UP 0.54% Pound 11.6050 UP 0.24% Euro 7.8030 UP 0.34%
This script is rather dated but still works, the 'exchange' script gets used usually in its place.
[edit]

mac

(by Estaga)
MAC checks online what vendor the given MAC address belongs to, example:
14:59:06 <Estaga> mac 00:16:3E:04:4B:E1
14:59:08 <Git> ID: 00163E VENDOR: Xensource, Inc.
MAC address can be given with : (Unix) or - (Windows) notation.
[edit]

mr-t

(by Estaga stolen from sexybalrog's script)
Mr-T grabs from the interweb a Mr-T fact, this script takes no arugments...
14:27:57 <Estaga> mr-t
14:27:58 <Git> There are 5 births a second. There are 1.8 deaths a second. Mr.
              T pities 3 fools a second.
[edit]

news

(by Estaga)
This script goes to news.google.com and searches whatever term you give it,
14:44:36 <Estaga> news nuclear korea
14:44:37 <Git> Cape Cod Times, MA - 2 hours ago  ... We need to prevent a
              nuclear North Korea, Abe said.
[edit]

nslookup

(by Estaga)
This replaces the built-in infobot one due to some historical errors in the script - syntax as you can guess is just a hostname:
14:58:32 <Estaga> nslookup www.bbc.co.uk
14:58:34 <Git> www.bbc.co.uk is an alias for www.bbc.net.uk.
[edit]

ping

(by Estaga)
I ripped out the internal infobot ping so I can do better pings (that work) so here is the syntax:
14:32:01 <Estaga> ping help
14:32:02 <Git> git: ping <hostname|ip>
So,
14:32:49 <Estaga> git: ping www.bbc.co.uk
14:33:36 <Git> www.bbc.co.uk: 2 packets transmitted, 2 received, 0% packet
              loss, time 25002ms rtt min/avg/max/mdev =
              0.860/1.150/1.441/0.292 ms
[edit]

scuttle

(by sexybalrog)
Scuttle let's you access the boeregeeks scuttle website. You can check recent scuttles, search all scuttles, scuttle new links and also describe them. To access multiple results a smart and amazing and superdooped natkak stateful hyper-protocol has been implemented. You need to be registerd onboeregeeks scuttle if you want to edit or create entries.
General Help:
 <Estaga> git: scuttle help
 <Git> examples: scuttle random|scuttle last|scuttle recent|scuttle recent 5|scuttle keyword  
 food|scuttle food|scuttle recent food|scuttle user trax|scuttle recent user chewy|scuttle tag   
 python|scuttle age 0-3|scuttle age 5-8|scuttle 24h|scuttle url .co.za|scuttle more|scuttle user 
 brick python age 50-100|scuttle userstats|scuttle stats|scuttle nicktest|scuttle identify 
 realnick|scuttle http://www.cnn.com tag1 tag2 tag3|scuttle describe Put description here

[edit]

Searching

 <Estaga> git: scuttle linux
 <Git> The iPod killer could be a Penguin - Neoseeker News Article -   
 <http://www.neoseeker.com/news/story/6313/> - linux \"iPod killer\" - tags: linux, gadgets -- 
 scuttled by lerouxb at 2006-11-27 07:07:21 (54 more left)
 <Estaga> git: scuttle more
 <Git> Knab is not a bot - <http://knab.sourceforge.net/> - tags: irc, linux, software -- scuttled  
 by brick at 2006-05-17 16:50:19 (53 more left)
[edit]

Authentication

My scuttle username is 'fbotha' so to make Estaga = fbotha,
 <Estaga> git: scuttle identify fbotha
 <Git> Okay, i'll try to remember that you're fbotha
[edit]

Adding a new scuttle

Skryf iets hie, jou lui balrog
[edit]

skireport

(by shadow)
I want to get the latest cheap ski deals by month so
skireport dec 
will give you the cheapest deal for that month
More to be added and refined later
[edit]

tcalc

(by sexybalrog)
Time-Calculator is for working out the difference in time, syntax help is:
14:30:11 <Estaga> tcalc help
14:30:13 <Git> Usage: tcalc <time1>-<time2> | <time1>+<timedelta>

For example, the difference between two times:
14:30:26 <Estaga> tcalc 14:00-13:00
14:30:28 <Git> 0 days, 1 hours, 0 minutes and 0.000000 seconds
Or, if you need to get to a place at 14:00 and it takes you 2h30mins to get there what time to leave?
14:30:38 <Estaga> tcalc 14:00 + -2:30
14:30:40 <Git> 2006-10-09 11:30:00.00
[edit]

time

(by Estaga)
Shows the local time in a city, if multiple cities match we show all of them..
 <Estaga> git: time singapore
 <Git> Time in Singapore Thu 4:51 PM
 <Estaga> git: time london
 <Git> Time in London (Canada) Thu 3:51 AM |London (U.K.) Thu 8:51 AM 
[edit]

tv

(by Estaga)
Searches Tvrage.com for the next/last episode of a show, the show must be registered in tv's internal database, if you want to have a show added ask Estaga to add it for you.
Example:
 <Estaga> git: tv bsg
 <Git> Next Episode: 47: 3x14 | The Woman King (Feb/11/2007)
[edit]

uncyclopedia

(by Estaga)
Uncylcopedia looks up the argument(s) on the Uncyclopedia site, much like the Wikipedia plugin.
Example:
15:05:19 <Estaga> uncyclopedia george bush
15:05:20 <Git> I do not care about a man who cannot perform his duties nor
              restrain his retardisms.

[edit]

uni

(by sexybalrog)
Shows and searches Unicode characters
Help:
 <Estaga> git: uni help
 <Git> I demand proper arguments. To search by word (not substrings!): uni euro | To find  
 combinations: uni comb x | To get info for a char: uni info x | To draw from hex: uni hex 20ac |
 To draw from decimal: uni dec 8364
Example:
 <sexybalrog> git: uni pound
 <Git> Searched for pound: £ £ 
 <sexybalrog> git: uni info #
 <Git> That # is a NUMBER SIGN. It's code is 35 (hex: 0x23). UTF8 is #.
[edit]

urban

(by Estaga)
Uses urbandictionary.com to look up words, it has two methods of being invoked, you can call it directly worth a word, or use the word 'like <keyword>' to let it search for words on urbandictionary.com like the one you gave, examples,
Help:
14:28:03 <Estaga> urban help
14:28:21 <Git> git: urban <key words|like>. I will then search
              urbandictionary.com
Like:
14:26:18 <Estaga> urban like bush
14:26:20 <Git> busch league,busch light,Busch
              Stadium,busche,buschmann,Buschtulant,Buschwhampted,Buscuit
              buscuits,busdown,busdriver,buse,Buseified,Busemas,busenbark
              Buser,Busey,Buseyed,busfucked,Busgo,bush
              administration,bush anchor,Bush Babies,bush baby,bush
              banger,bush bash,bush basher,bush bashing,bush bitch,bush
              blinded,bush breath,Bush Bulge,bush bumper,bush burial,bush
              burn,bush burner,bush butt fuck,bush club,bush confidence,bush
              cookie,Bush Cutter,Bush Democrats,Bush Derangemen
And a query:
14:26:46 <Estaga> urban bush democrats
14:26:47 <Git> Democrats who voted for Bush,not once,but twice!  In other
              words,me. ^___^  ~  He's not Bill Clinton,he gets my vote!  He's
              not Al Gore,He gets my vote!  He's not John Kery,he gets my
              vote!   Now I fully understand and appreciate the Reagan
              Democrats who I used  to hate back when I was a young radical
              lefty.  I'm proud to be a Bush Democrat!  Bush Democrats ROCK!
[edit]

weather

(by Estaga updated by Shadow)
I ripped out the weather.com module that comes with infobot and replaced it with my own one, the database of city names it uses gets inserted by hand, but on the plus side, you can have friendly names.
<Estaga> weather london
<Git> Updated Sep 30 04:20, at London, United Kingdom it's Mostly Cloudy
     and is 18.8 C, it feels like 18.8 with wind From SW at 11.2 km/h
     and visibility of 9.9 km
It also supports a prediction for tomorrow's weather with the keyword "tomorrow", although I need to figure out metric conversion for this middleofsentence ones still :P
<Estaga> weather london tomorrow
<Git> London, United Kingdom tomorrow: Partly cloudy. High near 60F.
     Winds W at 10 to 15 mph.

[edit]

webserver

(by Estaga)
Simple script that connects to destination machine on port 80 and gives a invalid HTTP command, this usually results in the server identifying itself, help syntax says:
14:49:44 <Estaga> webserver help
14:49:45 <Git> Syntax is: webserver <hostname>  - I will then connect to that
              webserver and try and find out what it is running for you
Example:
14:49:46 <Estaga> webserver www.cnn.com
14:49:53 <Git> www.cnn.com says: Apache
[edit]

weeknumber

(by Estaga)
After toomany timesheet issues I wrote this quick one to convert a current date to whichever week of the year it is, help syntax:
14:51:24 <Estaga> weeknumber help
14:51:25 <Git> I convert US given <YYYY-MM-DD> dates to week numbers for you,
              ie.: git weeknumber 2006-09-10 will return 37
Ie:
14:52:26 <Estaga> weeknumber 2006-10-09
14:52:27 <Git> 2006-10-09 gives a week number of 41
[edit]

wikiaf

(by Estaga)
Looks up the word(s) on the english wikipedia site, example:
15:11:00 <Estaga> wikiaf warmbad
15:11:00 <Git> Die verkiesing van die raad van trustees is verby.
[edit]

wikipedia

(by sexybalrog)
Looks up the word(s) on the english wikipedia site, example:
15:07:39 <Estaga> wikipedia francois botha
15:07:42 <Git> Francois Botha, also known as Frans Botha is a South African
              boxer, nicknamed the "White Buffalo," Francois Botha has had a
              relatively distinguished career as a heavyweight boxer.
[edit]

wtf

(by Trax)
WTF or 'Where the Fsck' helps us locate information we 'lose' about each other all the time, it's help gets called like this:
14:20:53 <Estaga> wtf help
14:20:55 <Git> What the fuck! Ask me 'wtf <nick> [phone, alias, birthday,
              address, jabber, email, gps]', 'wtf query <nick>', update info
              with 'wtf store <nick> <field> <value>' or get aliases for field
              with 'wtf aliases <field>'.
To get a full query just do this:
14:20:58 <Estaga> wtf query brick
14:20:59 <Git> brick.phone is +xyz, office +xyp, brick.alias is
              bricksan, neilen, neilen marais, marais, poesneus, brick.address
              is 12 Wherever, Whatever, Stellenbosch, 7600,
              brick.email is blah@blah.com

VPNForDummies

Why join?

Why join FBBVPN?
The VPN is mostly used for:
  • Making your NATTED machine reachable from zaphod since you have your own IP address(es)
  • Connecting one LAN to another (you can have 192.168.X.0/24 and have it routable from zaphod if you want)
  • A non-isp-run SMTP server which will allow mails through
  • More secure IRC/POP/IMAP/etc access
  • Proxy server access if you are browsing from unknown networks (icafe's, etc) it will all go via VPN if you want
  • GPRS/3G users find that OpenVPN is useful with it's zlib compression in minimising traffic
  • All VPN connections are natted meaning you can make outside-world connections via it to work around ISP firewalls
  • Encrypted non firewall access to voip.lagged if you have firewall issues with SIP
  • A 1024bit RSA encrypted PEM pre-shared keys and private CA signed darknet with CRL support :P
  • If you dont have enough Zaphod diskspace you can mod_proxy your stuff to home.
  • You will be part of the leet club

New and recommended method

Changes using the new method:
  • Uses CA signed certificates, no pre-shared keys anymore, compromised machines can have certificates revoked
  • Minimal config on client side (no .up files, etc. for routing, VPN will push this to you
  • Slightly harder to set-up (the various certficiates and keys can be confusing but is pretty much one-time only)
  • Better routing management - out of the box you can route to any other VPN user or the LAN behind him (if he allows this)
How to:
  • Install OpenVPN & Openssl (if you're already running it 'mkdir /etc/openvpn/old ; mv /etc/openvpn/* /etc/openvpn/old/')
  • Decide on a name, <whatever>.wan.zaphod.lagged.za.net this will be a 192.168.100.X ip assigned by Zaphod, <whatever> is ofcourse a valid dns name, no brackets :P
  • Run:
mkdir /etc/openvpn/keys
mkdir /var/log/openvpn
cd /etc/openvpn/keys
openssl req -newkey rsa:1024 -out <whatever>.wan.zaphod.lagged.za.net.pem -nodes -keyout <whatever>.wan.zaphod.lagged.za.net-key.pem -days 5475
  • Under "Common Name" enter: <whatever>.wan.zaphod.lagged.za.net DO NOT ENTER YOUR OWN NAME AND SURNAME DAMNIT
  • Do not enter a challange password
  • Send <whatever>.wan.zaphod.lagged.za.net.pem to FBBCA (FB) to get signed by his CA in a secure fashion (scp + perms!) . This means you should do
chmod og-r <whatever>.wan.zaphod.lagged.za.net*
scp <whatever>.wan.zaphod.lagged.za.net.pem mylogin@zaphod.lagged.za.net:
and on zaphod check that the perms look like this:
mylogin@zaphod:~$ ls -l <whatever>.wan.zaphod.lagged.za.net.pem 
-rw------- 1 mylogin mylogin 729 2007-08-23 15:14 <whatever>.wan.zaphod.lagged.za.net.pem
  • While waiting for FBBCA scp /etc/openvpn/certs/* to your machine (ignore permissions errors those are secret files), like:
cd /etc/openvpn/keys
scp mylogin@zaphod.lagged.za.net:/etc/openvpn/certs/* .
  • Receive <whatever>.wan.zaphod.lagged.za.net-crt.pem from FBBCA, and shove in /etc/openvpn/keys/
Make a /etc/openvpn/client.conf (client.conf is a example, you can have multiple configs but not to zaphod same time please!)
In this example we use UDP port 1194 which is the standard UDP OpenVPN Listener now:
dev tun0
tls-client
# 1 below means "client"
tls-auth keys/ta.key 1
ca      keys/openvpn-ca.pem
cert    keys/<whatever>.wan.zaphod.lagged.za.net-crt.pem
key     keys/<whatever>.wan.zaphod.lagged.za.net-key.pem
# Our OpenVPN peer
remote vpn.lagged.za.net
tls-remote vpn.lagged.za.net
pull
nobind
port 1194
user nobody
group nogroup
comp-lzo
persist-tun
persist-key
verb 3
log-append      /var/log/openvpn/openvpn.log
status          /var/log/openvpn/status.log
Please _NOTE_ if you are not _really_ connecting to zaphod.lagged.za.net and using another hostname (or proxy-via) you _MUST_ change "tls-remote" to be "zaphod.lagged.za.net" and "remote" to point to the IP/name the VPN must connect to. The reasoning for the true-value of tls-remote is that X509Name gets checked by Openvpn if it DOES NOT MATCH the hostname you are connecting to the TLS will fail.


vpn.lagged Connections

vpn.lagged is a new dedicated VPN box
  • vpn.lagged.za.net tcp 23
This is a static-keys method for broodblik.wan.zaphod.lagged.za.net alone
  • vpn.lagged.za.net udp 1080
Standard OpenVPN UDP method uses 'socat' portforwarding towards port 1194
  • vpn.lagged.za.net udp 1194
Standard OpenVPN UDP method accepted. Current users: maanskyn.wan
  • vpn.lagged.za.net udp 1202
Standard OpenVPN UDP method uses 'socat' portforwarding towards port 1194

OpenSSL Certs

To check the validity of your certificate(s), do:
fbotha@zaphod:~$ openssl x509 -in <name>.wan.zaphod.lagged.za.net-crt.pem -startdate -enddate
notBefore=Jul  2 21:50:23 2007 GMT
notAfter=Aug  1 21:50:23 2007 GMT
-----BEGIN CERTIFICATE-----
MI<SNIP>
-----END CERTIFICATE-----
fbotha@zaphod:~$
Some of the first certificates only lived for a month :P
[edit]

vpn.lagged Routing

VPN.lagged is the new dedicated VPN box, I will slowly be moving people over to this box, the biggest change is that 192.168.100.x IP's will now become 192.168.99.x, there is routing between these networks so nothing should break when migrating between these networks.
  • 192.168.3.0/24 = .london.wan.zaphod.lagged.za.net Use: FB London Home network
  • 192.168.3.1 = router.london.wan.zapod.lagged.za.net Use: FB ADSL router
  • 192.168.3.2 = wrt54g.london.wan.zaphod.lagged.za.net Use: DD-WRT GW
  • 192.168.3.10 = aki.london.wan.zaphod.lagged.za.net Use: FB Laptop
  • 192.168.3.12 = xbox360.london.wan.zaphod.lagged.za.net Use: Xbox360
  • 192.168.3.16 = media.london.wan.zaphod.lagged.za.net Use: Media-PC box
  • 192.168.3.13 = sharon-dell-laptop.london.wan.zaphod.lagged.za.net Use: Sharon Laptop
  • 192.168.3.18 = server.london.wan.zaphod.lagged.za.net Use: Home server box
  • 192.168.3.19 = dualphoneBS.london.wan.zaphod.lagged.za.net Use: Skype H/W phone
  • 192.168.3.21 = wii.london.wan.zaphod.lagged.za.net Use: Wii
  • 192.168.3.14 = nokia-e70.london.wan.zaphod.lagged.za.net Use: FB's Nokia
  • 192.168.3.33 = blah.london.wan.zaphod.lagged.za.net Use: FB desktop
  • 192.168.3.240-254 = OpenWifi Users
  • 192.168.4.0/24 = .stellies.wan.zaphod.lagged.za.net Use: FB Parents Home in Stellenbosch
  • 192.168.4.5 = fb-laptop.stellies.wan.zaphod.lagged.za.net Use: FB DHCP Laptop space
  • 192.168.4.6 = moms-pc.stellies.wan.zaphod.lagged.za.net Use: FB Mom PC
  • 192.168.4.8 = nokia-e70.stellies.wan.zaphod.lagged.za.net Use: FB's Nokia
  • 192.168.4.9 = dads-laptop.stellies.wan.zaphod.lagged.za.net Use: FB Dad Laptop
  • 192.168.4.75 = dualphoneBS.stellies.wan.zaphod.lagged.za.net Use: Skype H/W phone
  • 192.168.5.0/24 = .gavin.wan.zaphod.lagged.za.net Use: Sharon Brother VPN JHB
  • 192.168.5.5 = fb-laptop.gavin.wan.zaphod.lagged.za.net Use: FB Laptop
  • 192.168.5.6 = gavin-pc.gavin.wan.zaphod.lagged.za.net Use: Gavin's PC
  • 192.168.5.9 = xbox-gavin.gavin.wan.zaphod.lagged.za.net Use: Gavin's XBOX
  • 192.168.5.11 = michael.gavin.wan.zaphod.lagged.za.net Use: Michael's PC
  • 192.168.5.13 = discbox.gavin.wan.zaphod.lagged.za.net Use: Local storage box
  • 192.168.5.14 = dualphoneBS.gavin.wan.zaphod.lagged.za.net Use: Skype H/W phone
  • 192.168.5.15 = brandon.gavin.wan.zaphod.lagged.za.net Use: Brandon's PC
  • 192.168.6.0/24 = .maanskyn.wan.zaphod.lagged.za.net Use: Maanskyn CapeTown flat
  • 192.168.7.0/24 = .mentat.wan.zaphod.lagged.za.net Use: Trax VPN Paarl
  • 192.168.99.1 = darknet-router.wan.zaphod.lagged.za.net Use: vpn.lagged router & gateway
  • 192.168.99.10 = ns1.wan.zaphod.lagged.za.net Use: London Nameserver, used for talking to VPN routers, etc.
  • 192.168.99.11 = stellies-router.wan.zaphod.lagged.za.net VPNPointIP, LAN behind this is 192.168.4.0/24
  • 192.168.99.12 = leroux-work.wan.zaphod.lagged.za.net Use: Leroux's Work, using udp1080 as 1194/1202 is firewalled by ISP
  • 192.168.99.13 = genugtig.wan.zaphod.lagged.za.net Use: Neilen's SUN box (DISCONTINUED, see 10.30.10.13 instead)
  • 192.168.99.14 = leroux-home.wan.zaphod.lagged.za.net Use: Leroux's Home
  • 192.168.99.15 = maanskyn.wan.zaphod.lagged.za.net Use: Maanskyn CapeTown flat, LAN behind this is 192.168.6.0/24
  • 192.168.99.16 = wanbalans.wan.zaphod.lagged.za.net Use: Brick House
  • 192.168.99.17 = chewy.wan.zaphod.lagged.za.net Use: Chewy Work Box
  • 192.168.100.1 = zaphod.wan.zaphod.lagged.za.net Use: Zaphod itself over VPN
  • 192.168.100.50 = vpn-gateway.wan.zaphod.lagged.za.net Use: Gateway to bridge to the legacy VPN clients
  • 192.168.103.1 = static-keys.wan.zaphod.lagged.za.net Use: All VPN's not able to do cert based auth in this subnet
  • 192.168.103.2 = Ex kbase - FREE NOW
  • 192.168.103.3 = broodblik.wan.zaphod.lagged.za.net Use: Maanskyn UCT box, toward us on tcp port 23
  • 10.30.0.0/16 = cournot VPN run by Sexybalrog
  • 10.30.10.1 = cournot.sun.ac.za, cournot.cournot.wan.zaphod.lagged.za.net
  • 10.30.10.6 = mvsoffice.cournot.wan.zaphod.lagged.za.net Use: mvs office @ sun.ac.za
  • 10.30.10.7 = vpn.lagged.za.net gateway from cournot network
  • 10.30.10.10 = mvslaptop.cournot.wan.zaphod.lagged.za Use: mvs laptop
  • 10.30.10.12 = k517.cournot.wan.zaphod.lagged.za.net Use: Restricted knowledge
  • 10.30.10.13 = genugtig.cournot.wan.zaphod.lagged.za Use: brick office @ sun.ac.za


Old not-recommended Method

NEWSFLASH This method is probably unsupported and may result in your computering becoming part of the next-gen evil russian bot-net that will help to start world war III.
  • Install openvpn
  • Put the following in /etc/openvpn/zaphod.conf
dev tun
ifconfig 192.168.100.<REPLACE_WITH_YOUR_ASSIGNED_IP> 192.168.100.1
remote zaphod.lagged.za.net

# script to run to establish routes
up ./zaphod.up

# Our pre-shared static key
secret ./zaphod.key
# proto udp
# OR proto tcp-client
port <1196 for UDP, 1195 for tcp-client>
user nobody
group nogroup

ping 15
verb 3
# lzo compression
comp-lzo
log-append  /var/log/openvpn/openvpn.log
status /var/log/openvpn/zaphod.log
persist-tun
persist-key
  • Change the config file to reflect your assigned IP address.
  • Setup your routes in /etc/openvpn/zaphod.up, e.g.
#!/bin/sh
route add -net 192.168.100.0 netmask 255.255.255.0 gw $5

# Optional
route add somehost.net dev tun0
and make sure it is executable.
  • Ask Estaga to generate a key file, and place in /etc/openvpn/zaphod.key
  • If you run Debian/Ubuntu/some related system, there's a bug in the package -- the log file isn't created. Fix by doing
$ sudo mkdir /var/log/openvpn
$ sudo touch /var/log/openvpn/openvpn.log
$ sudo touch /var/log/openvpn/zaphod.log
$ sudo chgrp -R adm /var/log/openvpn
  • Run openvpn, e.g.
$ sudo /etc/init.d/openvpn start
Starting virtual private network daemon: zaphod(OK).
If everything went well, you should now be able to ping 192.168.100.1!