Jump to content



Photo

Suggestions


  • Please log in to reply
86 replies to this topic

#1 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 17 November 2005 - 10:35 PM

Altough the "to-do list" for CPLua is pretty long already, I think that it would be better to post all suggestions here in a separate topic.
This is because it seems that there are more and more Lua users, and I'd like to give the possibility to everyone to easily make some new suggestions about things that they would like to see in a future version. :) If we see that many people are interested in a certain feature I will certainly adjust the priorities in the list.

Several things have already been suggested and I don't forget them, but perhaps there is something other that we didn't think about and that would be quite useful in CPLua :rolleyes:
But please consider that I'm currently alone to develop every aspects of CPLua (except the Lua interpreter itselfs and the SDK features like the CAS etc), so it could take a little time before the actual implementation of each suggestion ;) Many thanks to the CPLua users that help we testing it btw, this way I can concentrate on the develoment rather than on tracking the eventual bugs :)

Also, if you are familiar with C/C++ and if you think that you can write a C package/library for CPLua, please let me know! Don't be too afraid by the Lua API described in the manual - there are tools to make C functions or classes available in the Lua language automatically, so you don't have to worry too much about Lua's stack system etc :D

Another point, especially for the members who are familiar with CPBasic: if you think about some useful CPBasic commands that are missing in CPLua and that you'd like to see implemented, you may post it here ;)

#2 PAP

PAP

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 681 posts
  • Gender:Male
  • Location:Somewhere in Europe.
  • Interests:Computer Algebra, Numerical Analysis.

  • Calculators:
    ClassPad 300 (plus an old Casio model, with only a few Kb ram).

Posted 17 November 2005 - 11:16 PM

Wow, I can fill this topic with suggestions an wishes (I know, I know, I have done this already, without this topic) ;). I have a bad feeling that we will see plenty of posts requesting tools for game developing here.

Now, about C/C++ packages: I have a numerous collection of C routines concerning numerical methods. Most of them are actually Fortran routines, translated to C. They are lengthy, and not very structured. Nevertheless, they are based on well-tested Fortran routines, and their functionality is almost equal to the original; the end-user doesn't see any difference. Is there an automated way to make a C package of such routines available in CPLua? Note that most of these routines include only very common C header files (such stdio.h etc). However, I don't know how a CPLua program can call a C executable, namely how the interface in implemented (how, for example, a Lua table is passed to a C function as an argument).

#3 Guest_-Tom-_*

Guest_-Tom-_*
  • Guests

Posted 18 November 2005 - 09:15 AM

I/O Needed!!!!

#4 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 19 November 2005 - 08:42 AM

I often write very long programs in CPLua. And when there is an error (like "main:325" :banghead: ), it is very difficult to find the line where the error occured. (and I can't count all the lines!!!!)
So it would be great to make the program go to the line where the error occured. And for the function draw.text, it would be better if you use the default font (for multibyte characters). And I know this will be hardly implemented, but can you make a text window with an "infinite" horizontal scrollbar, like Dev-C++ (without this, a single line can become multiple lines in the editor). And a keyboard with a catalog (because I can't remember ALL the functions... particularly in the 'string' and 'table' packages). And I noticed some bugs:

-When you open more than 4 files in the same time and tap <span class=MENU' />, a fatal error occurs
-When you turn the keypad on when a program is running, and turn the keypad off, a line stands in the middle of the screen
-In the "Tiny keypad" when you use the Shift button, the "<", ">", "$" buttons don't work properly

...and a 'picture' package... but PAP will say it is for game developping... and he will be right... :roflol:

I think that's all. ;) and good luck!

#5 PAP

PAP

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 681 posts
  • Gender:Male
  • Location:Somewhere in Europe.
  • Interests:Computer Algebra, Numerical Analysis.

  • Calculators:
    ClassPad 300 (plus an old Casio model, with only a few Kb ram).

Posted 19 November 2005 - 09:16 AM

I often write very long programs in CPLua. And when there is an error (like "main:325" :banghead: ), it is very difficult to find the line where the error occured. (and I can't count all the lines!!!!)
So it would be great to make the program go to the line where the error occured.

Extremely useful, indeed. Such a feature will save a lot of time for a CPLua programmer. I also want this to be implemented, but I'm afraid it won't be easy...

...and a 'picture' package... but PAP will say it is for game developping... and he will be right... :roflol:

Indeed, that's what I want to say. A "picture" package will be useful, but don't you think that it should have a very low priority, given that things such as the "io" package are missing?

#6 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 19 November 2005 - 11:22 AM

I often write very long programs in CPLua. And when there is an error (like "main:325" :banghead: ), it is very difficult to find the line where the error occured. (and I can't count all the lines!!!!)
So it would be great to make the program go to the line where the error occured.

Extremely useful, indeed. Such a feature will save a lot of time for a CPLua programmer. I also want this to be implemented, but I'm afraid it won't be easy...

I totally agree... that's why it is already implemented in CPLua 0.8B B) This new version should be released today btw ;)

And for the function draw.text, it would be better if you use the default font (for multibyte characters).

It wouldn't be better, because with the Vector font we can specify the style (italic, bold) and the size of the text, and you cannot do that with the default font (except for the 'bold' property). Perhaps I will make a new function 'draw.cptext()' (something like that) with less arguments than 'draw.text()' that use the default font :unsure:

And I know this will be hardly implemented, but can you make a text window with an "infinite" horizontal scrollbar, like Dev-C++ (without this, a single line can become multiple lines in the editor).

I will try to let is as an option. I don't want too change it completely, because I'm sure that several users find the line wrapping useful (and I'm one of them :P)


-When you open more than 4 files in the same time and tap , a fatal error occurs
-When you turn the keypad on when a program is running, and turn the keypad off, a line stands in the middle of the screen
-In the "Tiny keypad" when you use the Shift button, the "<", ">", "$" buttons don't work properly

Hmm you should have said it in CPLua's main topic :o
The bugs 2 and 3 have been fixed. But I can't reproduce the first bug :huh:

Indeed, that's what I want to say. A "picture" package will be useful, but don't you think that it should have a very low priority, given that things such as the "io" package are missing?

Perhaps not very low priority, but lower than the 'io' package priority, that's certain :rolleyes:

#7 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 19 November 2005 - 05:38 PM

The bugs 2 and 3 have been fixed. But I can't reproduce the first bug :huh:


Perhaps more than 5, not 4... I will try...

#8 -Tom-

-Tom-

    Casio Freak

  • Members
  • PipPipPipPip
  • 104 posts
  • Location:Poland
  • Interests:Tides, Celestial Navigation, Deadreckoning

  • Calculators:
    Cla$$pad 300

Posted 19 November 2005 - 06:46 PM

Perhaps more than 5, not 4... I will try...


I tried with 15 at once, and I cannot confirm that bug. CPLua 0.72

#9 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 27 November 2005 - 03:48 PM

It would be great if you make a "statusbar" package to change the text in the status bar. (The "Running..." string is often useless...)

#10 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 27 November 2005 - 04:51 PM

It would be great if you make a "statusbar" package to change the text in the status bar. (The "Running..." string is often useless...)

Why not :)
But a single function statusbar() will be enough I guess ;)

#11 adrahil

adrahil

    Newbie

  • Members
  • Pip
  • 3 posts

Posted 28 November 2005 - 07:28 PM

How about some "timed" instructions ?
Something like int wait(int milliseconds) would be nice for games. It would also be practical to give a limited time to waitpen or waitkey functions (especially waitpen...)
Oh, and File/Communication I/O please !!! Life isn't worth living when you can not link two CPs together !! :P

#12 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 30 November 2005 - 08:00 PM

*font=loadfont(file)
//Loads a picture file as a font

//So we could have:
*draw.textf(x,y,text,font=default_font)

But you will have to make a function to convert a picture into a font (as your program FontMaker). :unsure:

#13 TacoFred

TacoFred

    Casio Freak

  • Members
  • PipPipPipPip
  • 145 posts
  • Location:NJ
  • Interests:I LOVE STARCRAFT BROODWAR<br />MUHAHAHAHAHAHAHAHAHAHAHA

  • Calculators:
    cfx 9850gb+, fx 115MS, ClassPad 300, TI-89 Titanium

Posted 30 November 2005 - 10:47 PM

Oh, and File/Communication I/O please !!! Life isn't worth living when you can not link two CPs together !! tongue.gif

At least you have another person/CP to connect to. No one within 203984290384908239004 miles of me has another CP :(

#14 -Tom-

-Tom-

    Casio Freak

  • Members
  • PipPipPipPip
  • 104 posts
  • Location:Poland
  • Interests:Tides, Celestial Navigation, Deadreckoning

  • Calculators:
    Cla$$pad 300

Posted 01 December 2005 - 04:29 PM

For me, and my friends who have CP think that very useful could be some kind of quick start tool. It could be build-in into LUA editor, e.g. list with 5 last opened files and then option: run/edit. "My programs" but for Lua would best!
Thanks!

#15 2072

2072

    Casio over god

  • Admin
  • PipPipPipPipPipPipPipPip
  • 1565 posts
  • Gender:Male
  • Location:Somewherebourg
  • Interests:Alternative states of consciousness, programming, making things work the best they possibly can.

  • Calculators:
    AFX2 ROM 1.02, CFX-9940GT+, FX-180P-Plus

Posted 01 December 2005 - 05:55 PM

No one within 203984290384908239004 miles of me has another CP :(


Wahh :o it means that you are about 34,676,261.6 light-years from us!

In what galaxy do you live? :huh:

(I hope I will be able to see your answer in less than 69,352,523 years...)

#16 -Tom-

-Tom-

    Casio Freak

  • Members
  • PipPipPipPip
  • 104 posts
  • Location:Poland
  • Interests:Tides, Celestial Navigation, Deadreckoning

  • Calculators:
    Cla$$pad 300

Posted 01 December 2005 - 09:37 PM

:roflol:

#17 TacoFred

TacoFred

    Casio Freak

  • Members
  • PipPipPipPip
  • 145 posts
  • Location:NJ
  • Interests:I LOVE STARCRAFT BROODWAR<br />MUHAHAHAHAHAHAHAHAHAHAHA

  • Calculators:
    cfx 9850gb+, fx 115MS, ClassPad 300, TI-89 Titanium

Posted 01 December 2005 - 11:32 PM

I have advanced communication technology :rolleyes:
I believe I live in the Andromeda galaxy.... <_<
My entire school board consists of anti-anti-American company dum@sses that would fail to hammer a nail if they all worked together, so me, and some other CASIO freak(s) (only 2 people, including me) are the only ones with casio calculators...and I'm the only one with a CP

#18 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 09 December 2005 - 07:06 PM

It would be great if keypad() and fullscreen() returned the state of the screen and keypad

At least you have another person/CP to connect to. No one within 203984290384908239004 miles of me has another CP :(


The matter is that nobody wants to spend 199? (yes I am French) in a calculator! They should have "better" things to buy. :profanity: :rant: :banghead: :cry: I think I live in TacoFred's galaxy. :greengrin:

#19 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 11 December 2005 - 08:33 AM

...And why not a draw.text() function which uses the Graph 35 small font... I'm trying to reproduce some Graph 35 games... but these are games so... low priority :)

#20 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 11 December 2005 - 10:45 AM

I'm trying to reproduce some Graph 35 games

I thought you were planning to make a new add-in for that, not a program in Lua... I don't think that it's a good idea to do that in Lua though :unsure:

#21 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 11 December 2005 - 08:43 PM

but a text function with Lua font would be useful.

#22 -Tom-

-Tom-

    Casio Freak

  • Members
  • PipPipPipPip
  • 104 posts
  • Location:Poland
  • Interests:Tides, Celestial Navigation, Deadreckoning

  • Calculators:
    Cla$$pad 300

Posted 06 January 2006 - 12:08 PM

I know that it can be not easy, and I will say it again.. but 'My programs' for Lua would be very useful, I think for many users.

#23 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 11 January 2006 - 02:32 PM

I know that it can be not easy, and I will say it again.. but 'My programs' for Lua would be very useful, I think for many users.


It would be great that the PegAppInitialize functions has two parameters, like:
void PegAppInitialize(PegPresentationManager* pPresentation, void* args=NULL);
And you could use a function like:
bool CallAddIn(char* name, void* args=NULL);
which returns when a message like PM_EXIT is sent... :) What do you think about this, Brian Maguire? It would be great for the next CPSDK... :lol:

#24 -Tom-

-Tom-

    Casio Freak

  • Members
  • PipPipPipPip
  • 104 posts
  • Location:Poland
  • Interests:Tides, Celestial Navigation, Deadreckoning

  • Calculators:
    Cla$$pad 300

Posted 12 January 2006 - 07:08 PM

Maybe it couldbe done in easier way... I think, that it would need only few upgrades in existing add-in made by Orwell. Am I wrong?

#25 Gaumerie

Gaumerie

    Newbie

  • Members
  • Pip
  • 28 posts

Posted 12 January 2006 - 07:08 PM

It would be great for the next CPSDK... :lol: laugh.gif


:huh: "next CPSDK..." I don't think that will come...

#26 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 13 January 2006 - 07:04 PM

:huh: "next CPSDK..." I don't think that will come...


Yes I am dreaming... :unsure: But hope you are wrong... :greengrin:

#27 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 15 January 2006 - 02:05 PM

I don't think this would be very hard to implement: What about a "dialog" package for dialog window management? I just mean popup some types of dialog windows, like:
* id=dialog.message(message, title="", buttons={"OK"})
* string=dialog.input(prompt, title="", cancel=0)
* file,folder=dialog.storage(datatype=0)

And so on... :D

#28 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 15 January 2006 - 06:28 PM

I think that a complete "ui" package would be more convenient :)
Indeed, the dialog windows could be a part of it ;)

#29 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 18 January 2006 - 03:01 PM

I think that a complete "ui" package would be more convenient :)
Indeed, the dialog windows could be a part of it ;)


Great!!!!!! :greengrin: And please... the "picture" package would be useful for me...

#30 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 20 January 2006 - 11:26 AM

Lua's UI must support ClassPad's menu and ClassPad's toolbar. So the programs created with Lua look just like programs created with the SDK. Isn't it nice?

#31 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 20 January 2006 - 07:13 PM

Sure! :lol2:

#32 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 21 January 2006 - 08:20 AM

The support of menus and toolbars won't be easy at all... Anyway, I can give it a try.
Note that CPLua was not designed for it, thus I will have to perform some major changes again; but it's ok since the project is still in development (I don't know when this - and the official release will be ready though)

#33 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 21 January 2006 - 09:18 AM

Would be the "picture" package difficult to implement? :unsure:

#34 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 21 January 2006 - 03:43 PM

Would be the "picture" package difficult to implement? :unsure:

The problem does not come from the display, but from the format needed for the sprites and the way to create, edit, save, restore and delete them. Using simple Lua tables to store sprites is a really bad idea, because it would use a lot of memory and would be hard to handle. To make things correctly, I should use a new special type for it (i.e. another "userdata" customisation, like for the CAS expressions), and I should create some utilities to create and edit sprites easily. Then those sprites would need to be saved in a file with a new specific format, and Lua programs must be able to load them...
As you can see, it isn't really a problem a difficulty, it's just that it requires a lot of work, especially if I want to make a system that won't need to be changed too much in the future (for compatibility reasons).

I need more suggestions and ideas about that kind of problems. For now I just received some suggestions like "we want sprites support" etc, but how would you like it? It would be nice if you could be more specific, because otherwhise I will have to take all decisions by myself, and there are chances that you won't like it that much (and afterall, you are using CPLua a lot more than I do :lol2: ). Tell me more exactly what you would like to see (and how it will be used etc), and I will tell you if that's possible or not :) (The same remark goes for the UI package; which functions do you want to find in it? what features must be available in it? You're the customers, and I'm the developper: if you want something that will fit your need you have to give me details about what you want to see implemented ;))

#35 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 21 January 2006 - 08:04 PM

If it is possible you could make a function which returns a handler to a picture located at a PICT file (so we could edit them with BitEdit and make animations by creating handle arrays). If it is not possible, just make a function draw.picture with the path as argument. :)
For the UI package, you should implement a message function for message handling, but I fear it would be VERY hard! I'll try to think a bit about that to see if I can find a simpler solution. ;)

#36 Orwell

Orwell

    Casio Overlord

  • Members
  • PipPipPipPipPipPipPip
  • 777 posts
  • Gender:Male
  • Location:Paris - France

  • Calculators:
    Casio AFX 1.02 / Casio ClassPad 300

Posted 22 January 2006 - 12:40 PM

Everyone, do not think about difficulty - just give me the functions you want, what parameters are needed and what they should return. I will then tell you then if it's possible or not ;)

#37 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 22 January 2006 - 03:07 PM

Everyone, do not think about difficulty - just give me the functions you want, what parameters are needed and what they should return. I will then tell you then if it's possible or not ;)


OK Go!

// Picture functions
h=picture.create(width,height) // Creates a new picture (buffer, like Screen::CreateBitmap())
draw.onpict(pict) // Set the draw mode on a specidied buffer (so you should use BeginDraw(PegBitmap))
draw.picture(pict) // Draws a picture on the screen
h=picture.load(path) // Returns a copy of the PICT file located at path


#38 MicroPro

MicroPro

    Casio Overlord

  • Deputy
  • PipPipPipPipPipPipPip
  • 640 posts
  • Gender:Male
  • Location:Iran

  • Calculators:
    Casio ClassPad 300

Posted 24 January 2006 - 12:04 PM

Lua must have the ability to build compressed programs...

#39 Tchernoben

Tchernoben

    Casio Fan

  • Members
  • PipPip
  • 42 posts
  • Location:Nice
  • Interests:Calculators, Pc, mangas, warhammer.

  • Calculators:
    Classpad 300
    Ti 89 Titanium

Posted 25 January 2006 - 06:16 PM

Well Orwell, you told me to post my requesting function here

I think that a good way to create RPGs or Tetris with Lua is to use sprites, so a sprite-function set would be usefull :)

sprite.draw ( x, y, table, color, w, h)
-- x,y as coords, table is the table/matrix (auto-detec dimentions or use table.getn() )
and as color 1 for black on white (1>black 0>white in the table) , 0 for white on black, -1 (or anything else) for transparency (only the 1 in the table will be draw).
w, h for the width/heigh of each 'pix' in the table, for example if you want to draw a Tetris bloc, this could be done with a 2*2 array only ^^
the syntax would be : sprite.draw ( x, y, piece, 1, 5,5) for a 5*5 bloc

sprite.width/heigh ( table, dim)
-- this function for modify the dim of an array (but it keep the proportions!)
may be usefull for effects on menu...

we can also do a single function of both...

#40 Kilburn

Kilburn

    Casio Technician

  • Members
  • PipPipPipPipPipPip
  • 491 posts
  • Gender:Male
  • Location:France
  • Interests:Blah

  • Calculators:
    FX-7500 G
    ClassPad 300

Posted 25 January 2006 - 07:50 PM

table is the table/matrix (auto-detec dimentions or use table.getn() )...


:unsure: Hmmm, he said using sprites with tables would be not a great idea.... slow slow......


1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users