Questions for my MajorBBS clone
Moderator: Mod Squad
Questions for my MajorBBS clone
I have been during these last weeks doing a MajorBBS clone in RealBasic and is getting better and better. Its designed to be modular, as Gcomm did and basically I cloned the architecture with a modern OOP language such as RealBasic that compiles on linux, macosx and windows. Replaced Btrieve with MySQL, and use threads and TCPSockets for connection (I don't think serial port support is needed now).
My work is over 80% for the baseline, I mean the MainModule that handles signup, menuman, global commands, and the teleconference is at 20% of work.
I have a problem that keeps me advancing and surely one of you will know how to solve it. I am using macosx telnet to access MBBS clone and it buffers each keystroke and send it to the socket once RETURN key has been pressed. I have seen in MajorBBS that when login, it send some series of codes in order to verify what kind of terminal we are using. But it also magically solved this problem and send each keypress to the socket and it's not kept in the buffer. Does anyboy knows how this works?
I will post a demo the sooner as possible, as I am dedicating a few hours per week. Once I can solve this problem, the baseline will be more or less done, altough it will need a long period of alpha and betatesting.
The good point is that it will make very easy to adapt existing modules to RealBasic, and will be far easier to develop new ones than in C code.
Amando
My work is over 80% for the baseline, I mean the MainModule that handles signup, menuman, global commands, and the teleconference is at 20% of work.
I have a problem that keeps me advancing and surely one of you will know how to solve it. I am using macosx telnet to access MBBS clone and it buffers each keystroke and send it to the socket once RETURN key has been pressed. I have seen in MajorBBS that when login, it send some series of codes in order to verify what kind of terminal we are using. But it also magically solved this problem and send each keypress to the socket and it's not kept in the buffer. Does anyboy knows how this works?
I will post a demo the sooner as possible, as I am dedicating a few hours per week. Once I can solve this problem, the baseline will be more or less done, altough it will need a long period of alpha and betatesting.
The good point is that it will make very easy to adapt existing modules to RealBasic, and will be far easier to develop new ones than in C code.
Amando
-
- Posts: 43
- Joined: Mon Aug 07, 2006 12:56 am
- Location: Inverness, Florida
Re: Questions for my MajorBBS clone
Wow. sweet!The good point is that it will make very easy to adapt existing modules to RealBasic, and will be far easier to develop new ones than in C code.
Amando
I'd be interested in trying your project out myself, what kind of web server do you plan to be able to use with it? ( Apache)? Also what language could someone use with the web server? I would hope there would be hooks for a PHP frontend and also ASP.
Sounds interesting!
Greg
If it's not broke, why fix it!
It works as a single EXE, no need to plugin any webserver. It's written in RealBasic (www.realbasic.com) and it's much faster than PHP and ASP as they are not interpreted languages, compile to native machine code.
Basically it solves many problems of the current MajorBBS, it uses MySQL, Threads, XML, and works in Linux, MacOSX and Windows/Vista. I have the same idea as Questman had, to restore the BBS scene, but making it available to a wider scene.
MajorBBS has been the best and most sucesful BBS and it's sad to see it restricted to copyright and owners disputes. So I decided it is not that complicated to rewrite the baseline and open it to any developer that want's to create his own modules without problems.
It is, of couse, a hobby, not a business. I see no business around BBS as I see not bussiness on selling typewriters.
Also I wouldn't mind to Open Source the source code if there are people willing to contribute and recreate most of the modules.
I now Questman has done a great effort collecting and buying the rights of many modules. This can be a great oportinity to end disputes, create a better BBS platform and expand this hobby to many others.
For your information, I am using RealBasic Professional edition that is not cheap at all, but I think there is a free Linux versions, although I don't know if the source code can be compiled with that free version. In any case, there is a Trial version available.
My idea is to have a 100% ready baseline, with most of the options ready to allow developers create or port their own modules.
Amando
Basically it solves many problems of the current MajorBBS, it uses MySQL, Threads, XML, and works in Linux, MacOSX and Windows/Vista. I have the same idea as Questman had, to restore the BBS scene, but making it available to a wider scene.
MajorBBS has been the best and most sucesful BBS and it's sad to see it restricted to copyright and owners disputes. So I decided it is not that complicated to rewrite the baseline and open it to any developer that want's to create his own modules without problems.
It is, of couse, a hobby, not a business. I see no business around BBS as I see not bussiness on selling typewriters.
Also I wouldn't mind to Open Source the source code if there are people willing to contribute and recreate most of the modules.
I now Questman has done a great effort collecting and buying the rights of many modules. This can be a great oportinity to end disputes, create a better BBS platform and expand this hobby to many others.
For your information, I am using RealBasic Professional edition that is not cheap at all, but I think there is a free Linux versions, although I don't know if the source code can be compiled with that free version. In any case, there is a Trial version available.
My idea is to have a 100% ready baseline, with most of the options ready to allow developers create or port their own modules.
Amando
-
- Posts: 43
- Joined: Mon Aug 07, 2006 12:56 am
- Location: Inverness, Florida
Confused here, then it as a telent port and a web server port or just telenet?amando wrote:It works as a single EXE, no need to plugin any webserver. It's written in RealBasic (www.realbasic.com) and it's much faster than PHP and ASP as they are not interpreted languages, compile to native machine code.
I'd like to try it no matter what way it ends up, but would like to see some type of web server or lets say some type of pages being served on the internet with a web server port of say 80.
Laughing, I know question, questions!
No matter what I look forward to seeing the beta version to try it out.
Thanks
Greg
If it's not broke, why fix it!
Basicallly because it's slow and users must comply with having Java installed on their OS. Not every computer has Java installed.
Also the nature of GUI apps is horrible compared to RealBasic that is more powerful and C code can be easily used via plugins.
I can wait to fix my Telnet code and release a preview.
Amando
Also the nature of GUI apps is horrible compared to RealBasic that is more powerful and C code can be easily used via plugins.
I can wait to fix my Telnet code and release a preview.
Amando
I hope you know that Java is not only for Web Applets... it is certainly possible to build an application server in Java that responds to incoming socket connections on TCP port 23 (no GUI front-end needed, no Java on the client side).
And the "performance issue" has become much less of a problem with modern JIT compilers, for all but the most CPU-intensive tasks (read: hard-core mathematical computations). I have Java applications running every day that process hundreds of messages per second -- I'd expect that this kind of performance would be acceptable for a small-to-mid sized BBS, and with careful planning, the load could be distributed among multiple app servers for even higher volumes.
It does sound like you have a very promising project, but it's a shame that it's locked into a proprietary language/compiler, even though it does offer cross-platform capabilities. Something like this is just begging to be built in Java (or Perl, PHP, Python, or Ruby, for that matter), all of which are cross-platform and open-source (or will soon be open-source). Still, beggars can't be choosers, eh? Keep us in the loop!
And the "performance issue" has become much less of a problem with modern JIT compilers, for all but the most CPU-intensive tasks (read: hard-core mathematical computations). I have Java applications running every day that process hundreds of messages per second -- I'd expect that this kind of performance would be acceptable for a small-to-mid sized BBS, and with careful planning, the load could be distributed among multiple app servers for even higher volumes.
It does sound like you have a very promising project, but it's a shame that it's locked into a proprietary language/compiler, even though it does offer cross-platform capabilities. Something like this is just begging to be built in Java (or Perl, PHP, Python, or Ruby, for that matter), all of which are cross-platform and open-source (or will soon be open-source). Still, beggars can't be choosers, eh? Keep us in the loop!
-
- Posts: 43
- Joined: Mon Aug 07, 2006 12:56 am
- Location: Inverness, Florida
Hello RickQuestman wrote:This is a nice idea.
Why RealBASIC instead of Java? Java's great, it's powerful, portable, and has lots of code behind it already.
I, laughing know I don't want to get into a debate with you on Java being you most likely know more about it. But to me it is slow and a good example of that is one of the BBS software packages of today that uses Java for it's web server.
Slooooooow.............
But that like I said is my thoughts only.
If it's not broke, why fix it!
Sorry for my lack of updates about my MBBS clone. I have had same familiar issues that kept me away from this project. I am working some hours per week on it, and apart from the Telnet issues that does not affect Windows Telnet client, it is getting better.
Still it is not nearly an Alpha release, but I am satisfied with the core module that handles registering new modules, allows developers to create classes and subclasses, global commands, databases, etc.
The teleconference module is now at 35% (original, not Action Teleconference) and the signup routine of main module is mostly done. Logoff routines for main and registered modules 100%, disconnected routines for core and modules 100%, input routine is 50%, logon core is 100%. So basically the framework is done and working quite fast.
Locks & Keys support is 25% done, on per server locks & keys and users locks & keys.
I was thinking in a XML format for .MSG config files, rather than parsing Stryker's MSG format that is quite complex compared to XML. So, all prfmsg routines are hardcored in Spanish.
I have added a new core routine named Timed_Routine that works like a timer for each user (async) and will add a SysModTimed_Routine for Sincronous routines per module.
Regarding per user and per moder defined variables, are more easy than in Gcomm code. Just define a variables and each user/module gets their vars without the nightmare of Gcomm code for that.
I have respected Gcomm uses of states (switch (usrptr->modstate)) and will like to adapt as many core routines from the original source code. I think this will make mods easier than just rewriting from scratch.
Well, I wanted to let you know that is not vaporware and I plan to release it under some of the licenses available such as GPL, BSD, etc. I have to think about it, as I want to make every change made to the original source code, part of the project.
Here is an example of the teleconference module. It's an ASCII export of the module, so there are some parts not included in the original source code.
Protected Class Teleconference
Inherits kModule
Function Login_Routine() As boolean
Register_Global_Var("NOTMODULE","El modulo no existe")
SendUser chrb(13)+chrb(10)+"Ahora disponible la nueva teleconferencia online!"+chrb(13)+chrb(10)
Return(True)
End Function
Function Init_Routine() As boolean
Register_Global_Var("NOTMODULE","El modulo no existe")
Register_Global_Var("NTERMS",2+2)
shocst ("Teleconference: serial number is not correct!")
Return(true)
End Function
Function Input_Routine() As boolean
Select case user.ModState
case 0
SendUser chrb(13)+chrb(10)+"Teleconference online"+chrb(13)+chrb(10)
SendUser "---------------------"+chrb(13)+chrb(10)
user.ModState = 1
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de entrar en el canal!"+chrb(13)+chrb(10)+": ")
ShowWho()
case 1
if margc = 0 then
SendUser chrb(13)+chrb(10)+": "
elseif margc = 1 then
if margv(0) = "x" or margv(0)="exit" then
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de salir del canal!"+chrb(13)+chrb(10)+": ")
SendUser "Exiting to the main menu..."+chrb(13)+chrb(10)
Return(true)
elseif margv(0) = "?" or margv(0) = "HELP" then
SendUser chrb(13)+chrb(10)+"Teleconference online"+chrb(13)+chrb(10)
SendUser "---------------------"+chrb(13)+chrb(10)
user.ModState = 1
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de entrar en el canal!"+chrb(13)+chrb(10)+": ")
ShowWho()
Return(False)
elseif margv(0) = "WHO" or margv(0) = "#" or margv(0) = "/#" then
ShowWho()
Return(false)
else
SendToChanel()
Return(false)
end if
else
SendToChanel()
end if
end Select
Return(false)
End Function
Function Logoff_Routine() As boolean
Return(true)
End Function
Sub Hangup_Routine()
SendToAllUsers("***"+chrb(13)+chrb(10)+User.usrname+" se ha desconectado del sistema!")
End Sub
Protected Sub SendToChanel()
dim chanusr() as User = me.GetModuleUsers()
if UBound(chanusr) = 0 then
SendUser "***"+chrb(13)+chrb(10)+"Estas solo en este canal!"+chrb(13)+chrb(10)+": "
else
dim a as Integer
for a = 0 to UBound(chanusr)
if chanusr(a).usrname <> User.usrname then
chanusr(a).CurrentModule.SendUser(chrb(13)+chrb(10)+"From "+user.usrname+": "+user.InpBuff+chrb(13)+chrb(10)+": ")
else
SendUser("*** Mensaje enviado ***"+chrb(13)+chrb(10)+": ")
end if
next
end if
End Sub
Protected Sub ShowWho()
Dim UsersConnected() as User = GetModuleUsers(), b as Integer
if UBound(UsersConnected) =-1 then Return
for b = 0 to UBound(UsersConnected)
if UsersConnected(b).usrname = User.usrname then
UsersConnected.Remove b
exit for
end if
next
Select case ubound(UsersConnected)
case -1
SendUser "Estas solo en este canal!"+chrb(13)+chrb(10)+": "
case 0
SendUser UsersConnected(0).usrname+" esta contigo en este canal"+chrb(13)+chrb(10)+": "
case 1
SendUser UsersConnected(0).usrname+" y "+UsersConnected(1).usrname+" estan contigo en este canal"+chrb(13)+chrb(10)+": "
else
dim a as Integer
dim tmpbuff as string
tmpbuff = UsersConnected(0).usrname
for a = 1 to UBound(UsersConnected) - 1
tmpbuff = tmpbuff + ", " + UsersConnected(a).usrname
next
tmpbuff = tmpbuff + " y "+UsersConnected(a).usrname+" estan contigo en este canal"+chrb(13)+chrb(10)+": "
SendUser(tmpbuff)
end Select
End Sub
As you can see, there is a lot of work to be done, but more or less it will follow Gcomm structure.
If there are interest, I will release this project under one of the licenses I said above, to keep the project alive.
I have no Gcomm source code now, and the routines are from what I remember when I was learning C and my first steps at MajorBBS arch. I have to say that I am just an amateur programmer and there are many many things to polish and other that my skills are not good.
Hm.. I haven't written English for a loong time, and I hope you can understand my message without major problems...
Please, let me know what do you think about it.
Regards,
Amando Blasco
Still it is not nearly an Alpha release, but I am satisfied with the core module that handles registering new modules, allows developers to create classes and subclasses, global commands, databases, etc.
The teleconference module is now at 35% (original, not Action Teleconference) and the signup routine of main module is mostly done. Logoff routines for main and registered modules 100%, disconnected routines for core and modules 100%, input routine is 50%, logon core is 100%. So basically the framework is done and working quite fast.
Locks & Keys support is 25% done, on per server locks & keys and users locks & keys.
I was thinking in a XML format for .MSG config files, rather than parsing Stryker's MSG format that is quite complex compared to XML. So, all prfmsg routines are hardcored in Spanish.
I have added a new core routine named Timed_Routine that works like a timer for each user (async) and will add a SysModTimed_Routine for Sincronous routines per module.
Regarding per user and per moder defined variables, are more easy than in Gcomm code. Just define a variables and each user/module gets their vars without the nightmare of Gcomm code for that.
I have respected Gcomm uses of states (switch (usrptr->modstate)) and will like to adapt as many core routines from the original source code. I think this will make mods easier than just rewriting from scratch.
Well, I wanted to let you know that is not vaporware and I plan to release it under some of the licenses available such as GPL, BSD, etc. I have to think about it, as I want to make every change made to the original source code, part of the project.
Here is an example of the teleconference module. It's an ASCII export of the module, so there are some parts not included in the original source code.
Protected Class Teleconference
Inherits kModule
Function Login_Routine() As boolean
Register_Global_Var("NOTMODULE","El modulo no existe")
SendUser chrb(13)+chrb(10)+"Ahora disponible la nueva teleconferencia online!"+chrb(13)+chrb(10)
Return(True)
End Function
Function Init_Routine() As boolean
Register_Global_Var("NOTMODULE","El modulo no existe")
Register_Global_Var("NTERMS",2+2)
shocst ("Teleconference: serial number is not correct!")
Return(true)
End Function
Function Input_Routine() As boolean
Select case user.ModState
case 0
SendUser chrb(13)+chrb(10)+"Teleconference online"+chrb(13)+chrb(10)
SendUser "---------------------"+chrb(13)+chrb(10)
user.ModState = 1
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de entrar en el canal!"+chrb(13)+chrb(10)+": ")
ShowWho()
case 1
if margc = 0 then
SendUser chrb(13)+chrb(10)+": "
elseif margc = 1 then
if margv(0) = "x" or margv(0)="exit" then
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de salir del canal!"+chrb(13)+chrb(10)+": ")
SendUser "Exiting to the main menu..."+chrb(13)+chrb(10)
Return(true)
elseif margv(0) = "?" or margv(0) = "HELP" then
SendUser chrb(13)+chrb(10)+"Teleconference online"+chrb(13)+chrb(10)
SendUser "---------------------"+chrb(13)+chrb(10)
user.ModState = 1
SendToAllUsers("***"+chrb(13)+chrb(10)+user.usrname+" acaba de entrar en el canal!"+chrb(13)+chrb(10)+": ")
ShowWho()
Return(False)
elseif margv(0) = "WHO" or margv(0) = "#" or margv(0) = "/#" then
ShowWho()
Return(false)
else
SendToChanel()
Return(false)
end if
else
SendToChanel()
end if
end Select
Return(false)
End Function
Function Logoff_Routine() As boolean
Return(true)
End Function
Sub Hangup_Routine()
SendToAllUsers("***"+chrb(13)+chrb(10)+User.usrname+" se ha desconectado del sistema!")
End Sub
Protected Sub SendToChanel()
dim chanusr() as User = me.GetModuleUsers()
if UBound(chanusr) = 0 then
SendUser "***"+chrb(13)+chrb(10)+"Estas solo en este canal!"+chrb(13)+chrb(10)+": "
else
dim a as Integer
for a = 0 to UBound(chanusr)
if chanusr(a).usrname <> User.usrname then
chanusr(a).CurrentModule.SendUser(chrb(13)+chrb(10)+"From "+user.usrname+": "+user.InpBuff+chrb(13)+chrb(10)+": ")
else
SendUser("*** Mensaje enviado ***"+chrb(13)+chrb(10)+": ")
end if
next
end if
End Sub
Protected Sub ShowWho()
Dim UsersConnected() as User = GetModuleUsers(), b as Integer
if UBound(UsersConnected) =-1 then Return
for b = 0 to UBound(UsersConnected)
if UsersConnected(b).usrname = User.usrname then
UsersConnected.Remove b
exit for
end if
next
Select case ubound(UsersConnected)
case -1
SendUser "Estas solo en este canal!"+chrb(13)+chrb(10)+": "
case 0
SendUser UsersConnected(0).usrname+" esta contigo en este canal"+chrb(13)+chrb(10)+": "
case 1
SendUser UsersConnected(0).usrname+" y "+UsersConnected(1).usrname+" estan contigo en este canal"+chrb(13)+chrb(10)+": "
else
dim a as Integer
dim tmpbuff as string
tmpbuff = UsersConnected(0).usrname
for a = 1 to UBound(UsersConnected) - 1
tmpbuff = tmpbuff + ", " + UsersConnected(a).usrname
next
tmpbuff = tmpbuff + " y "+UsersConnected(a).usrname+" estan contigo en este canal"+chrb(13)+chrb(10)+": "
SendUser(tmpbuff)
end Select
End Sub
As you can see, there is a lot of work to be done, but more or less it will follow Gcomm structure.
If there are interest, I will release this project under one of the licenses I said above, to keep the project alive.
I have no Gcomm source code now, and the routines are from what I remember when I was learning C and my first steps at MajorBBS arch. I have to say that I am just an amateur programmer and there are many many things to polish and other that my skills are not good.
Hm.. I haven't written English for a loong time, and I hope you can understand my message without major problems...
Please, let me know what do you think about it.
Regards,
Amando Blasco
Ops... forgot to say.
Regarding Java comments or other Open Source languages.. yes, you are right but I chose RB since I am keen on it. I like the idea of having updates every 90 days, and these people are quite open to suggestions and bug fixing. Anyway, I believe rewritting the core module in Java, Python or any other language will be very easy for anyone with enough skills.
I have no stocks in Realbasic, but these guys are doing a terrific job and working constantly.
Amando
Regarding Java comments or other Open Source languages.. yes, you are right but I chose RB since I am keen on it. I like the idea of having updates every 90 days, and these people are quite open to suggestions and bug fixing. Anyway, I believe rewritting the core module in Java, Python or any other language will be very easy for anyone with enough skills.
I have no stocks in Realbasic, but these guys are doing a terrific job and working constantly.
Amando
I hate to say this, and please don't take it as a personal attack or flame in any way, but this sounds like a horrible idea. Now, I am a C++ person myself...but that's beside the point.
Let's take a look at the reasons why, while this is perfect for a small hobby system or personal use, it won't be accepted on a larger scale (mainstreaming the BBS hobby addiction):
1) RealBasic, which is based on the BASIC language syntax, isn't considered a "real" programming language. Most people view anything written in a BASIC based language as a toy, trojan, or time waster.
2) RealBasic binaries, like all BASIC binaries, are slow. (http://www.openaddict.com/realbasic_review.html) While a single user-interface design can afford milliseconds of delay per message queue transaction, user interface update, or context switch, a multi-user environment plagued with this problem can quickly become a catastrophe. Trust me, I know...I wrote an MMO server in VB6 all so long ago that died a horrible death once I realized that the runtime just couldn't keep up.
3) RealBasic has nowhere near the support that most other established languages have. Granted, I'm fairly certain there are 10 or 100 times the number of people that can program in BASIC. Quantity, however, does not dictate quality. This is a primary reason for #1 being so prevalent.
4) Standards are good. Who decides what the RealBasic API is? Who determines what is "acceptable" speed and usability wise? C, C++, and Java all have large proponents of their technology pushing it to it's limits to make it what it is. C++98 and C99 standards are defined, and can be followed to make your application easier to port, update, and share with colleagues and the inquisitive. This leads to...
5) RealBasic is developed as a closed source development platform, designed by a single company. This almost ALWAYS leads to a languages/compilers downfall. C/C++ and Java can be "owned" by anyone willing to take the time to pick up development. I doubt Real Software is willing to open source their proprietary IDE and compiler.
Now, I'm not saying to stop your work. Far from it. I'd love to see what you can do. It is, however, good to remember to use our tools for what they are designed. While I think PHP, Ruby, and Python are fantastic languages, their scope for this type of project would be limited. While they are quite good at what they do, I don't feel they posess the processing power to handle a well designed clone of MBBS/WG. On a small scale, yes, it would be manageable. Once you reach a fair number of modules or users though, it would likely become a mess. Java shows to be making strides in improving processing speed and accessability, but generally still pales in comparison to most compiled languages. I wouldn't suggest something like this in .NET (any flavor) for various reasons, but the most prevalent would be that it is simply not able to work cross-platform well enough. Why lock ourselves into a proprietary framework, when that's one of the very things we're attempting to get away from? I won't state my personal opinions here of what I think should be done, as that's a comment for another time and thread.
I hope to see what you've got going soon, so don't be shy about sharing some binaries and code with us! I'm sure everyone would be interested to see what can be done!
Let's take a look at the reasons why, while this is perfect for a small hobby system or personal use, it won't be accepted on a larger scale (mainstreaming the BBS hobby addiction):
1) RealBasic, which is based on the BASIC language syntax, isn't considered a "real" programming language. Most people view anything written in a BASIC based language as a toy, trojan, or time waster.
2) RealBasic binaries, like all BASIC binaries, are slow. (http://www.openaddict.com/realbasic_review.html) While a single user-interface design can afford milliseconds of delay per message queue transaction, user interface update, or context switch, a multi-user environment plagued with this problem can quickly become a catastrophe. Trust me, I know...I wrote an MMO server in VB6 all so long ago that died a horrible death once I realized that the runtime just couldn't keep up.
3) RealBasic has nowhere near the support that most other established languages have. Granted, I'm fairly certain there are 10 or 100 times the number of people that can program in BASIC. Quantity, however, does not dictate quality. This is a primary reason for #1 being so prevalent.
4) Standards are good. Who decides what the RealBasic API is? Who determines what is "acceptable" speed and usability wise? C, C++, and Java all have large proponents of their technology pushing it to it's limits to make it what it is. C++98 and C99 standards are defined, and can be followed to make your application easier to port, update, and share with colleagues and the inquisitive. This leads to...
5) RealBasic is developed as a closed source development platform, designed by a single company. This almost ALWAYS leads to a languages/compilers downfall. C/C++ and Java can be "owned" by anyone willing to take the time to pick up development. I doubt Real Software is willing to open source their proprietary IDE and compiler.
Now, I'm not saying to stop your work. Far from it. I'd love to see what you can do. It is, however, good to remember to use our tools for what they are designed. While I think PHP, Ruby, and Python are fantastic languages, their scope for this type of project would be limited. While they are quite good at what they do, I don't feel they posess the processing power to handle a well designed clone of MBBS/WG. On a small scale, yes, it would be manageable. Once you reach a fair number of modules or users though, it would likely become a mess. Java shows to be making strides in improving processing speed and accessability, but generally still pales in comparison to most compiled languages. I wouldn't suggest something like this in .NET (any flavor) for various reasons, but the most prevalent would be that it is simply not able to work cross-platform well enough. Why lock ourselves into a proprietary framework, when that's one of the very things we're attempting to get away from? I won't state my personal opinions here of what I think should be done, as that's a comment for another time and thread.
I hope to see what you've got going soon, so don't be shy about sharing some binaries and code with us! I'm sure everyone would be interested to see what can be done!
Thanks for your comments. I really appreciate them, and don't take them as a personal attack.
I have to say that the first mistake of RealSoftware was to name this product as RealBasic. It would be better to name it as RealSoft as it has little in common with Basic. The review that you mention was for RealBasic 2005, and we are now in RealBasic 2007 relese 3. I agree that 2005 was slow and quite buggy, but in these two years, they polished and make it much faster and less buggy. Every release it gets more Java and less Basic, and I feel the name is going to be changed as the word BASIC makes any developers... scared!
In Release 2007 they introduced threads that, altough aren't preemptive yet, they can be managed with priorities, mutex, semaphores and critical sections. All was rewritten from scratch, and run quite well. If you want to test a binary made in Realbasic, just download the demo version and run it. The IDE or Realbasic itself it's written in Realbasic. Just the compiler is written in C++. I think it's quite fast and powerful to demostrate that good software could be written with it. I would not expect it in BV6, even less in non compiled languages.
While most of the Java, Ruby, Perl, Python, etc.. libraries are written in their own languages, Realbasic uses C++ for them, so you get much better performance. It has an open plugin architecture that is grown every day with people adapting open source projects for realbasic. So, apart of the company itself developing new features, there are third parties that adds more options. A good example is a collection of plugins in www.monkeybreadsoftware.de . These plugins are written to be compiled cross platform in MacOSX, Windows and Linux, in C++. If I have written a class that runs slowly, I can write it in C++ and still have the easy of use of this basic alike language. I still remember the nightmare of debugging a multithread application in C++, and deadlocks. I wouldn't like to have to debug pointers, freeing and allocating memory, and debugging.
Sadly I have little time to work with it, as I have a lot of work, but it gets some hours per week. I will release soon some binary tests and will release code to allow make some serious tests of porting existing modules.
Regards,
Amando
I have to say that the first mistake of RealSoftware was to name this product as RealBasic. It would be better to name it as RealSoft as it has little in common with Basic. The review that you mention was for RealBasic 2005, and we are now in RealBasic 2007 relese 3. I agree that 2005 was slow and quite buggy, but in these two years, they polished and make it much faster and less buggy. Every release it gets more Java and less Basic, and I feel the name is going to be changed as the word BASIC makes any developers... scared!
In Release 2007 they introduced threads that, altough aren't preemptive yet, they can be managed with priorities, mutex, semaphores and critical sections. All was rewritten from scratch, and run quite well. If you want to test a binary made in Realbasic, just download the demo version and run it. The IDE or Realbasic itself it's written in Realbasic. Just the compiler is written in C++. I think it's quite fast and powerful to demostrate that good software could be written with it. I would not expect it in BV6, even less in non compiled languages.
While most of the Java, Ruby, Perl, Python, etc.. libraries are written in their own languages, Realbasic uses C++ for them, so you get much better performance. It has an open plugin architecture that is grown every day with people adapting open source projects for realbasic. So, apart of the company itself developing new features, there are third parties that adds more options. A good example is a collection of plugins in www.monkeybreadsoftware.de . These plugins are written to be compiled cross platform in MacOSX, Windows and Linux, in C++. If I have written a class that runs slowly, I can write it in C++ and still have the easy of use of this basic alike language. I still remember the nightmare of debugging a multithread application in C++, and deadlocks. I wouldn't like to have to debug pointers, freeing and allocating memory, and debugging.
Sadly I have little time to work with it, as I have a lot of work, but it gets some hours per week. I will release soon some binary tests and will release code to allow make some serious tests of porting existing modules.
Regards,
Amando
C++ and C are different animals when it comes to performance. Well written C is quite fast - but well written C++ still lags. C++ is kind of a P.O.S. really.. its fake object oriented (more object appended) ... I'd much rather use Java for OO style development, especially on the server side or embedded side where its performance is as good as C++ while including many of the advances inherent in SmallTalk.
SmallTalk itself was probably better architecturally but it never kept up and encouraged/offered a wide swath of support for things.. one of the things Sun got right when pushing Java... there's an API for everything.
Basic .. or a proprietary language... is never a good idea. Hours of time invested becomes a waste when the company owning it goes belly up.. Basic in general has spawned so many bastard stepchildren that using it, too, is a dangerous enterprise.
SmallTalk itself was probably better architecturally but it never kept up and encouraged/offered a wide swath of support for things.. one of the things Sun got right when pushing Java... there's an API for everything.
Basic .. or a proprietary language... is never a good idea. Hours of time invested becomes a waste when the company owning it goes belly up.. Basic in general has spawned so many bastard stepchildren that using it, too, is a dangerous enterprise.
While I agree with most of what you say Quest, I think your bias is showing quite a bit. Java does indeed have excellent OO methods, but so does properly used c++. As far as speed goes, c is still king (aside from ASM...but...that's not even a fair comparison to any language really), followed by c++. Don't believe me? http://shootout.alioth.debian.org/
Java (server) is fast. No doubt about it. In real world tests, c, c++, Pascal, etc still beat it...if even by a hair. With that said, it still FAR outperforms almost all of the other JIT languages. As far as RealBasic goes...it didn't even make the list. I can't tell you why. I doubt it was speed related, but moreso that someone just didn't know about it. (Remember what I said about proprietary compilers?) All that aside you: You can play around with the different settings on the site I linked, but the stock tests (the most common ones) show by default. Funny enough, you need javascript enabled in your browser to see it all properly..
EDIT: I did a head to head test of c++ (g++) and Java (Java 6 server), you can see it at http://shootout.alioth.debian.org/gp4/b ... lang2=java
I don't mean to sound like I'm belittling Java...quite the opposite. Java is an excellent language. I just find that it's use, in this case, wouldn't be a major benefit over what's in place (RealBasic). I would suggest D, but the community and commercial support isn't quite there for it like it is for c/c++. As you can see from the second link, the memory use is almost 16x better in c++ than in J6S. That's pretty profound, considering the amount of data passed around in a server situation such as WG.
Java (server) is fast. No doubt about it. In real world tests, c, c++, Pascal, etc still beat it...if even by a hair. With that said, it still FAR outperforms almost all of the other JIT languages. As far as RealBasic goes...it didn't even make the list. I can't tell you why. I doubt it was speed related, but moreso that someone just didn't know about it. (Remember what I said about proprietary compilers?) All that aside you: You can play around with the different settings on the site I linked, but the stock tests (the most common ones) show by default. Funny enough, you need javascript enabled in your browser to see it all properly..
EDIT: I did a head to head test of c++ (g++) and Java (Java 6 server), you can see it at http://shootout.alioth.debian.org/gp4/b ... lang2=java
I don't mean to sound like I'm belittling Java...quite the opposite. Java is an excellent language. I just find that it's use, in this case, wouldn't be a major benefit over what's in place (RealBasic). I would suggest D, but the community and commercial support isn't quite there for it like it is for c/c++. As you can see from the second link, the memory use is almost 16x better in c++ than in J6S. That's pretty profound, considering the amount of data passed around in a server situation such as WG.
The problem with benchmarking Java vs C++ is that C++ is compiled into machine code and Java is always compiled into bytecode; the performance tuning of the VM is paramount in Java performance.
That said, I've seen imaging systems built in Java that can process the creation and processing of 900 pdf/image documents in 30 seconds.. something that AIX and C++ programs couldn't come close to doing.
Java and C++ are no longer disparate in performance. It is now down to the developer's ability to develop efficient code.
C is by far and away king.. its as close as you get to ASM
I don't have bias. I actually prefer C.. so for me to toss C++ off is significant.. but it simply is not true OO -- Java isn't, either, really - but it's close.
That said, I've seen imaging systems built in Java that can process the creation and processing of 900 pdf/image documents in 30 seconds.. something that AIX and C++ programs couldn't come close to doing.
Java and C++ are no longer disparate in performance. It is now down to the developer's ability to develop efficient code.
C is by far and away king.. its as close as you get to ASM
I don't have bias. I actually prefer C.. so for me to toss C++ off is significant.. but it simply is not true OO -- Java isn't, either, really - but it's close.
I agree with both regarding compiler speed. C and C++ are the fatests, but with today CPU speeds, the use of C or C++ for this kind of applications in my opinion are not needed. Same happeneded with ASM, and no one writes applications in ASM, perhaps some very CPU intensive routines for videogames. For a MUD or a BBS, every language can be used. Even there are BBS writen in Shell scripts that works.
RealBasic works very well in Linux with its GUI and doing this in C, C++ or other languages will require more time and efforts. I don't like java GUI nor the need the user to install, update java, etc. Just an exe, no dlls no nothing.
Regarding Realbasic as the language, once I release the source code under some of the GPL license, developers could rewrite the core in their own language (releasing the source code to the project) and modules can be written in LUA, Python or the preferred language.
Now core module handles global commands, time out, a new Timed_Event routine added to the core (instead of the status rou), Signup Process, etc.
Will keep you informed as soon as progresses go well...
Amando
RealBasic works very well in Linux with its GUI and doing this in C, C++ or other languages will require more time and efforts. I don't like java GUI nor the need the user to install, update java, etc. Just an exe, no dlls no nothing.
Regarding Realbasic as the language, once I release the source code under some of the GPL license, developers could rewrite the core in their own language (releasing the source code to the project) and modules can be written in LUA, Python or the preferred language.
Now core module handles global commands, time out, a new Timed_Event routine added to the core (instead of the status rou), Signup Process, etc.
Will keep you informed as soon as progresses go well...
Amando
-
- Posts: 2
- Joined: Mon Dec 04, 2006 9:23 pm
amando, any new progress on your project? I just looked into realbasic since you mentioned it here, and I'd like to learn it. I've always been aching to find a truly customizable BBS with a similar interface/features to MBBS/WG, so I'm curious what your product will be like. Keep it going...you definately have interest.
former Sysop of Unknown Paradox
Thanks for your interest. The core is getting updated to use the new features of the incoming release of RealBasic that handles namespaces and delegates as Java. So I expect RealSoftware will allow the creation of DLLs and Shared Libs really soon.
This will make thing easier, as you don't need the source code as before version 6 of MBBS. In the meantime, I am developing a tiny mud that will help me to include a library of useful functions to developers.
In my TODO list still remains some problems with the Telnet protocol, and possibly the use of LUA as a scripting language inside RealBasic (even we have RealScript that is another scripting engine that can be used).
August has been a holiday season that I owed to my girlfriend So not many improvements in the code, but in the design of the core.
Amando
This will make thing easier, as you don't need the source code as before version 6 of MBBS. In the meantime, I am developing a tiny mud that will help me to include a library of useful functions to developers.
In my TODO list still remains some problems with the Telnet protocol, and possibly the use of LUA as a scripting language inside RealBasic (even we have RealScript that is another scripting engine that can be used).
August has been a holiday season that I owed to my girlfriend So not many improvements in the code, but in the design of the core.
Amando