So I want to create my own IRC client...

I've wanted to make my own IRC client for a long time now. As soon as I switched from winfailure a few months ago (I think nearly a year now! ), actually.
As time went by I've slowly, begrudgingly gotten used to irssi, but with gritted teeth all the same. On winfailure, I used HydraIRC, and while this application was quite good, its supposedly open source license wasn't free as in free speech, only as in free beer. So while the code was open, it was only opened such that the code couldn't be used in other projects. Stab.
Anyway, I used this client for the better part of a year, and while it lacked quite a few things that would have probably turned others away like the complete lack of a scripting engine, it did what I wanted pretty well, and set an operational standard, if you will, that I got used to and have not found anywhere else. Yet.
So I want to recreate the standard I picked up on but for POSIX platforms (except for cygwin), and introduce some features of my own too. I simply don't know where to start, however.
Note that the subject says "create", not "write" - after asking around a bit in IRC ##linux recommended I try taking two IRC clients that have the features I want and merging their codebases. I've never done something like this before but I think it'd probably be fairly interesting, if not trying.
So, I'll list the features I'm looking for, and perhaps you can give me some suggestions on 1) how I'd either implement this myself or 2) a client with X feature already coded in. Thanks.
The features I'm looking for:
- Code Simplicity: This is the most important, to me, in the case of using others' code. Complex code (just look at rxvt if you want complex code) will just confuse and down-hearten me and make me run away.
- A network-oriented model: I want a client with a daemon, or server, that connects to my networks and performs most "heavyweight" takes, and a client, which just handles display. Quassel does this to an extent but is horribly underdeveloped and I don't have a system powerful enough to handle running Qt on a long-term basis (since I already tend to use GTK apps). I also don't know C++.
- Multiple clients: This is the second most important. I really need this one. I want to be able to have a "main" client that can connect to the server and manage general tasks, and a "light" text-based, console-driven client that connects and can be run over ssh, for example. Quassel completely falls apart here because it uses KDE's network-IPC libraries to transfer data from the server to the client, which a quick check with Wireshark showed to be binary. And I wouldn't want my "lite" client to require KDE, or at least KDE's libraries - that'd just be majorly weird.
- Speed: I want the client to be fast and responsive at all times, even on slower systems, and even when I'm connected to a lot of channels.
- Scriptability: It doesn't need to be complex, like Perl's library that applications can bind in. That's overmuch IMHO and, most importantly, slow.
I don't think one particular client meets those needs, but a few of you will probably shout "xchat!" Well, X-Chat is... not my thing. If irssi could be considered very far away from HydraIRC in terms of operation, X-Chat is the same distance away twice over. It doesn't operate the same way at all.
So, now that I've loosely explained the features I want, let me now explain another thing I want to be able to do.
Despite having hardware in dire need of upgrading right now (these systems aren't nearly that bad, but Firefox tends to eat my 512MB of RAM up pretty quickly, and I recently found all the PCs this house has in it 99% likely can't use DDR2 RAM, which isn't too good), I hope and believe that one day I'll upgrade to considerably better equipment with extensive graphics support. With this newer hardware I hope to create a new kind of UI model with animation integrated into the look-and-feel model of the UI the same way images are used for the same purpose today, GPLv3 license it so corporations can't steal it and use it in their products, and then bind it into my IRC client.
However, I want to start now, before I upgrade. With this in mind, I don't know whether I should make my own GUI toolkit, or use an existing toolkit now and rewrite half the codebase later to support my own graphics and animations. I'm not very good at making things that are programmatically extensible and flexible, so I don't really know what to do here. Simple hand-rolled toolkits such as dialogs with some text and a button can be managed in under ~250 lines of code, but anything bigger, and, well... you get stuff like GTK and KDE, whose toolkit libraries in total are both on the order of over a couple of MBs each, and have been in development for years, and continue to evolve rapidly today. If you're careful, you end up with FLTK, which I don't like the look of at all.
In addition to that, I want my client to be fast, even on slower computers. Right now, I have a 3-screen setup, with each screen being driven by a separate PC. The one on the right - the one I'd be putting my IRC client on - is a 450MHz P3 with 320MB of RAM. It runs X on a 4MB VGA card at 800x600. This is where I currently run an irssi session over ssh and screen. To give you an idea of the graphical power of this machine, antialiased Xft fonts with urxvt take 0.15 seconds to "scroll" when I say something in IRC. However, it's a capable PC if I harness its capability right, and is where I'd target my IRC client. And I dislike seeing my fonts redraw - I dislike seeing anything redraw, for that matter.
You might think I'm crazy, writing an IRC client for one of the slowest PCs in the house that works, that I in future want to extend to use a graphics layer that I hope to develop on a server-class Nehalem workstation with an insane amount of RAM and a pair of SLI'd GTX 280s in it.
I don't think I'm crazy. I'm using what I have to give back to the open source community, and using what I consider to be an cunning operational model to do it: back when the 450MHz P3 I spoke of was the only "main" working PC I had, I designed, in none other than Visual Basic 1.0, a media center UI. On Windows 98. In 2006. And, you know what, despite the fact that the animations it used were pretty basic, it actually looked really, really good. And why was this? Because I used software designed for 486DX2s running at 33MHz with 4 or 6MB of RAM, on a P3, with 128MB of RAM (yes, I've upgraded it since), clocked at 450MHz. The result? Blinding, optimized, speed. You really should try the older versions of VB sometime - I managed to score a copy of VB 2.0 which is legal to distribute because its "Make EXE" (ie compile) function is crippled. Email me and I'll mail you a copy - it's completely legal.
In the same manner, if I design this IRC client and carefully construct it so its client/server model works capably on my two PCs, my server (a machine not unlike the P3 I've been discussing - my server just has more hard disks in it, a 50MHz faster processor, runs my left-hand display and my IRC network) and my old desktop (the 450MHz box I've mentioned so much), when I finally bring it over to my new computer it'll be so fast that it'll be as if the computer is registering keypresses before I even type them. And that's the kind of performance I want to couple with shinyyy graphics.
Sorry this sounded halfway between a motivational speech, a request for help, and a coder's dilemma. lol
-dav7

Bit of an update: Varreon emailed me regarding VB 2.0 and we had a bit of a discussion regarding the language I planned to use.
He said it would be fine to post our conversation, so here's how it panned out:
Varreon wrote:...What language were you planning on writing your client in? I've written an irc bot in c++, and I'll upload my source code if you're interested in looking through it.
dav7 wrote:
Well, I'm not all that sure what language I want to use just yet.
I know I want it to be extensible, so I could either use a high-level, extensible but slow scripting language to power the client as a whole, or I could go down a path already travelled, proved extremely successful and in my opinion cleaner, and embed a scripting language, which would negate the requirement for a high-level language but still facilitate customization.
All the same, I'm not really all that sure what language to use.
C++ isn't really my thing - on my current computers, g++ takes maybe 3 seconds to compile the smallest of source files, and while that isn't *really * all that long, I'm not all that patient. As it stands I consider /gcc/ too slow for my preferences and use tcc instead - you might like to try it if you're on a 32-bit system.
I'll probably move to C++ when I get a new PC, but for now, all I really find fast enough for my liking is C, and I'm a little concerned that C might be a little too low-level for what I want to design here - beyond scriptability, I want the client itself to be easily extended in various directions. Of course the client will only appeal to a specific market (in an open source sense), but I do want it to feel organic and something that can be extended in as many directions as possible. So C probably won't be the language I use, and since C++ is slow to compile, it's probably going to be off the list as well.
All the same, I'm not concerned about speed in the irrational way I have been in the past, but at the same time I do need to be careful in my thinking regardless of the language I use since don't want a client that lags to death. A good example of a slow program is SciTE - the text editor I'm typing this in, Geany, uses the same edit control it uses (Scintilla, which is written in C++, AFAIK), and while this component has a good degree of editorial control, scrolling with the scroll wheel can be slow. Also, when I recently tried to run SciTE on an old laptop I found on the side of the road (AMD K-6, 350MHz, 32MB RAM), I discovered that just *typing* would lag the system horribly - typing about 15 keystrokes quickly resulted in a lag of about 6 seconds after which what I typed would appear all at once. Typing single keys - slowly - resulted in a delay of around 0.20-0.39ms (guessed).
Regarding scripting, I had my eyes on one embeddable language in particular but I forgot what it was called, so I headed to Wikipedia for a quick hunt-down session for it and managed to discover Falcon, which appears to use a VM but is at the same time the same insanely fast because it uses a C/C++-only policy for its modules. It also advertises itself as a scripting engine "ready to empower mission-critical multithreaded applications" so I'm considering Falcon to be a possible engine to integrate, and on a slightly long shot, even the language I might end up using. I also think hunting the first language I considered down and embedding that might be a nice idea, and I also might embed Perl. I'd love to be able to embed Ruby.
Overall however, I do need to contain my enthusiasm - the desire to throw in multiple scripting engines, awe-inspiring compositing graphics layers, and support for multiple protocols isn't such a bad idea, but if not controlled will result in serious featuritis, which when combined with a verbose, low-level language will only result in me throwing myself at the project too hard "to get it done", with proven disastrous results.
-dav7
[ Note, there's an update in a follow-up post below this one that affects the information you see here - just so you know ]
I've done some consideration since that email and it's possible that C++ might be able to be brought onto the table. This was mostly inspired by the good outcome I had with writing a couple of modules for InspIRCd, which uses C++, compared to my previous attempt when I knew no C.
The main thing I'm a little indecisive about at the moment is the toolkit; I want something that's fast but doesn't look all that bad; FLTK is, as I've said previously, not something I like the look of - it does appear to be somewhat themable but it's impossible to escape the fact that it values speed over shininess, and while this is excellent for my current target, I don't want to develop something that relies on it so heavily that it's next to impossible to port to whatever I end up using when it's time to get the graphics in, such as a UI model on top of an OpenGL canvas.
The second thing I'm unsure of is what scripting language I should use. I've done quite a bit of looking around - mostly to try and find that language I mentioned that I lost - and found quite a lot of possibilities, and even discovered that with some work (well, a lot of work, admittedly) it's even possible to embed Ruby into C++, and have Ruby call user-defined C++ functions and so on. It's not an official part of the project, but someone managed it nonetheless.
It seems to be possible to embed popular languages such as Perl, Python, Tcl, Lua, etc, but then there are lesser-known languages designed for embedding, such as Nesla, AngelScript and the like (such as that language I can't find, heh). And of course I could also embed a JavaScript engine, which would probably be very odd but all the same quite an experience.
Then there's Falcon, which appears to be a pretty good language in general but doesn't appear to have all that many modules available for it just yet, so doesn't seem to suit my purposes.
So, summing up:
- I don't know how I should develop this in terms of graphics - should I wait for a new PC and just use SDL or whatever I'm going to use, use a toolkit and either rewrite half of everything at some other point or juggle two display methods, or what?
- The number of scripting languages out there is mind-boggling. To me, it's not what syntax the language uses, or whether it's statically or dynamically typed, or how readable it is, it's #1 how fast it is, and #2 how suitable it would be in the context of an IRC client - string manipulation (even on every incoming and/or outgoing message), user interface control, and so on.
-dav7
Last edited by dav7 (2009-02-16 09:25:49)

Similar Messages

  • When one or more family members who have been sharing one iTunes account wants to create their own iTunes account can they each upload the music/apps from the shared iTunes on their devices to the new iTunes account?

    When one or more family members who have been sharing one iTunes account wants to create their own iTunes account can they each upload the music/apps from the shared iTunes on their devices to the new iTunes account? 

    Yes. I would clarify your statement about the "shared" iTunes Library though. If you want each iOS device to have its own music library, you should create separate user accounts for them. Read:
    iTunes: How to share music between different accounts on a single computer
    How to use multiple iPods, iPads, or iPhones with one computer

  • How do I create a new account for an iPod that is on an existing account?  My brother and I have shared an account for five years, and now that I'm moving out, I want to create my own account but still want to be able to play the music I've purchased.

    My brother and I have shared an account for five years, and now that I'm moving out, I want to create my own separate account but still want to be able to play the music I've purchased over five years. 

    In order to continue to play and sync the music you purchased with your old account, you'll need to authorize your new computer/iTunes library to do so.  You can do this by choosing Store -> Authorize This Computer and then entering in your old account credentials.
    That's all you should need to.  Then just create your own account and start purchasing and using it the same you have with the old one.
    B-rock

  • I share an itunes account with my sister on two different computors. I want to create my own seperate account. Will I be able to sync my ipod with my new account without losing anything?

    I share an iTunes account with my sister, though on two seperare computors. I want to create my own account. Will I be able to sync my iPod with my newly created account without losing anything?

    as long as you make sure your iTunes is authorized for both Apple ID's, yes.

  • My wife and I have shared one iTunes account for 6  years.  We want to create our own Apple IDs, so when we sync to our new iMac we won't see each others contacts, photos, calendar, music, etc.  Is there a way to move music/apps from one ID to a new ID?

    My wife and I have shared one iTunes account for 6  years.  We want to create our own Apple IDs, so when we sync to our new iMac we won't see each others contacts, photos, calendar, music, etc.  Is there a way to move music/apps from one ID to a new ID?

    JoeyV325 wrote:
    Is there a way to move music/apps from one ID to a new ID?
    No.
    One of you create a new AppleID and one use the existing AppleID.
    But you can still use the items in each iTunes library.
    Create separate computer logins for each of you.
    This will give you each your own data. Contacts, calendars, photos, etc. (and your own iTunes library).

  • I designer I want to create forms for web client, does each client have to purchase form central to access the data?

    I designer I want to create forms for web client, does each client have to purchase form central to access the data?

    Hi,
    In this scenario, you can share the document with the clients to and provide co-author privileges.
    Co-authors can edit the form design, options, responses, and summary report (everything that you can do).
    Note:- They do not require a paid subscription to view the responses, free subscription users can become co-authors.
    Please refer to the following thread to know how to share a form with others:-How do I share a form I created with others?
    Regards,
    Nakul

  • My wife just purchased an iPhone. She has an Apple ID but it is linked to her gmail address. She wants to create her own iCloud email address but the setup tools don't let us do that.

    I have aniCloud account  apple id, linked to a MobileMe address (which I converted to an iCloud account)
    My wife just purchased an iPhone. She has her own Apple Id -- but it is linked to a gmail address.
    I wanted to create a new iCloud email address and account for her, but the Mail Setup won't let us use .icloud and keeps referring her back to log into the gmail server.
    How can we convert her gmail address to an icloud address if Mail Setup refuses to let her use icloud.com?
    One other issue: Her iTunes are linked to my account, and my wife would like her own separate account.

    Actually, I want her to have a separate iTunes account. Our marriage is fine, but our musical tastes are vastly different  That's another issue; right now want to focus on getting my wife in .icloud email address.

  • I want to create my own playbar in flash. How to install?

    Hi,
    I'm running cp7. I want to write my own playbar in flash and have it show up in the skin editor so I can choose it. I created one with a .swf extension and put it in the playbar folder, but I still can't see it in the skin editor. Suggestions?
    Thanks!
      Lori

    Which 'playbar' folder did you put it in?  There are two.
    C:\Program Files\Adobe\Adobe Captivate 6 x64\en_US\Gallery\Playbars\AS3
    C:\Program Files\Adobe\Adobe Captivate 6 x64\Gallery\PlayBars

  • HT204053 I just got my new Iphone, and wanted to create my own apple ID, but when I created my own Apple ID, i recvd a confirmation that said My husbands name and that his apple ID was changed.can this be fixed?

    I was trying to create my own Apple ID, when I recvd the verify email it said "Dear (my husbands name) you have entered (my email address)
    as your contact email address for your apple ID." But i did not want change anything on his. Did I delete his apple ID?

    Funds cannot be transferred from one Apple ID account to another.
    Try here > Rescue email address and how to reset Apple ID security questions
    If that doesn't help, contact Apple for assistance with your security questions > Contacting Apple for support and service

  • I currently share an itunes account and apple ID with my mom and I want to create my own one now. How do I do this? Will I lose everything on my iphone?

    I want to use my own email and credit card and manage my own account but I don't know how to do this and I'm hoping that I don't lose everything on my iphone right now.

    Hi Rileycarline,
    You can easily have an iCloud account that is separate from the Apple ID that is used for iTunes purchases. Take a look at the article below to walk you through that specific setup process of have an account for iCloud and one for Store purchases. 
    Set up your Apple ID for iCloud and iTunes
    https://support.apple.com/en-us/HT204053
    Take it easy,
    -Norm G. 

  • My kids are getting older and they want to create their own accounts.  How do we share all the music we bought on my computer for their computers?

    We have bought music for many years on my account.  My kids are all getting older, have their own devices, but still want to access the music we bought as a family when they were younger.  How do I get their devices/accounts to all pair up within the cloud?  Is it even possible?

    You can't currently transfer content from one account to another account. As long as the tracks are on the computer's iTunes that they use/sync to, and your account is authorised on that iTunes, then they should be able to continue to use them.

  • Problem with creating my own class...

    Hi all,
    Purpose with this program:
    I want to create my own class StringThing which take a string parameter and transform the content toUpperCase().
    I have created a simple class StringThing which look like this:
    class StringThing {
    public String upperize (String u) {
    u.toUpperCase();
    return u;
    }And my class where I use the StringThing looks like this:
    import java.io.*;
    class UseStringThing{
    public static void main (String arg[]) throws Exception {
    BufferedReader keyboard = new BufferedReader(
    new InputStreamReader(System.in));
    String s,p;
    System.out.prinln("write a sentence!");
    s=keyboard.readLine();
    StringThing thing = new StringThing();
    p=thing.upperize(s);
    System.out.println(p);
    }Am I not supposed to transform my string parameter in my class by using for instance toUpperCase()? Or is there some fundamental rule or piece of code which I forgot?
    Thanks in advance,
    /Beginner-T-who-ripps-his-hear-over-this-small-problem

    Strings cannot be modified. What this line does:
    u.toUpperCase();
    is to create a new String object. toUpperCase() returns the newly created string and you are ignoring the returned value. What you want to do is:
    return u.toUpperCase();
    or
    u = u.toUpperCase();

  • UWL Help - How can i create my own task within the Enterprise Portal

    Dear all,
    I am currently working with UWL .
    I have tried the customization and those stuffs associated with UWL , and it is working properly.
    My current issue is , how can create my own task within the Portal ( not using Ad Hoc  Workflow , which is present in Portal) ?.
    If i can create my own task within portal by API or using another method , then How can i add that task link within the drop down box that is present in the Collaboration launch pad and Mytask Workset.?
    Is there any API regarding  UWL (which is useful for creation of custom tasks in Portal using Developer Studio by means of Portal Application Creation) ?
    How can i add that custom task in the drop down ?.
    I have tried the customization of existing UWL.
    I shall be grateful to those who can help me to solve this issue with links regarding the  solution of my problem's.
    with regards
    Kishor Gopinathan

    Hi Kishore,
    I am trying to do the same thing. When i am creating Collaboration Task, it has standard templates in the dropdown like "Single Step" and "Multi-Step" etc., If i want to create my own Custom Task Template and display in that dropdown, how can i do that? Your help is really appreciated.
    Thanks
    Vijay

  • I've been sharing my husbands account for years and I now want to open my own account. How can I open my own account and keep all my contacts?

    I've been sharing my husbands Apple ID for years and I now want to create my own Apple ID but how can I get all my information saved on my husbands Apple ID to my new Apple ID.

    http://support.apple.com/kb/ht2109

  • How can i create my own component

    hello all,
    how can i create my own componet,
    say for example i want to create my own JTextField.
    give me links, or give me a examples
    thanks
    daya

    http://www.onjava.com/pub/a/onjava/2004/08/11/desktop.html

Maybe you are looking for

  • Macbook OSX 10.7.4 Finder Freezing/Crashing Unusable

    My Macbook has been slowing down progressively over the last week and is now virtually impossible to use. Takes a long time to boot and when it does the finder freezes for long periods before refeshing itself and freezing again. I have booted in reco

  • Issue in maintaining the freight condition in SRM pricing conditions

    Hi All, We have maintained the freight condition in SRM pricing conditions But when a buyer try to add the freight condition it does not give any field to add the value.We want the freight condition at the header level. Let me know if there is any se

  • Custom Cursor point style on XY graph

    Is there is a way you can change the point style of a cursor on an xy graph to somthing custom, possibly an image or somthing else. Basicly Id like to have very many point styles, but more then just whats in LV, Id want some that actually look differ

  • Collection not happening for "missed cycles"

    I'd seen a post back in Jan 5, 2008 by "WoofaJB" regarind the collection cycle. To quote: "When the Client connects to its assigned Collection Server (set in a reg entry) it checks in. The server then works out if the machine has completed a scan dur

  • How to install a pci-6030e in a pxie-8102 chassis

    I removed a PXI-6030E multifunction IO card from a PXI-1010 chassis, which is installed in a SCXI backplane.  I can now see the device in Devices and Interfaces under the PCIe-8102 chassis, but it only lets me use a visa test panel.  I have no idea h