What do you think this should focus on? |
Conversation-Mostly talking |
|
13% |
[ 3 ] |
Function-Like a terminal |
|
39% |
[ 9 ] |
Balance-Both of the above |
|
47% |
[ 11 ] |
Something else (explain below) |
|
0% |
[ 0 ] |
|
Total Votes : 23 |
|
I have been working on a Siri-like program for the 83+ series. This has been done before, but I am combining ideas from different conversation programs and terminal-type programs with a few of my own to create something that can talk and do functions. Here is what I have done:
-Basic conversation. You type something in, and the calculator has various responses programmed in.
-Intuitive, "normal words" commands that make sense
-Math solving: type "EQ:" followed by an expression and it will work just like the home screen. I used a combination of sub(, expr(, and length( to get this done. I use a similar technique for most of the special functionality.
-"ROLL A DIE": displays a graphical die
-"COUNT TO [X]":Very quickly counts to whatever number
-"FLIP A COIN":Heads or tails
-Knock knock jokes
-Displays many digits of pi upon request
-Help and exit functions
Here is what else I want to do with it so far:
-Some assembly functions: Power off, adjust contrast, run program, etc.
-Advanced conversation: lots of phrases and perhaps a "memory" feature that remembers what was said last to improve continuity
Whoa, I think this is pretty cool. What programming language are you doing this in? I know you mentioned assembly functions, but is everything you've already done in assembly or in something else? Anyways this really cool and I hope you get around to doing some of the stuff you plan to do with it.
So far it's pure basic. The assembly will either be done with ASM subprograms (whichI don't realy like because it's messy) or require a lIbrary, probably DCS. I might also make versions in pure basic without assembly and the full version, depending on user preference.
so this is kind of like a computer terminal... I just have a few questions:
1) How did you get the digits of pi, do you compute them with a fancy arbitrary precision engine or do you just have a bunch stored
2) The issue with this kind of program is that they require lots of memory (to store replies, to parse the input, and to create syntaxically correct sentences which requires it having words to choose from). Obviously, this is something calculators such as those in the ti-83+ series lack. How do you intend to make this work?
3) What is the purpose of this? At first glance, it looks like it is just making things more complicated, since it is already possible to simulate things like a coin toss and rolling a dice from the homescreen (randInt(1,6) and randInt(0,1) will do the trick) Is this meant to be a novelty rather than a useful terminal.
To make this more usable, I would recommend adding a help page (maybe entering "?") where you mention all the commands that can be typed in.
1)The digits of pi are stored.
2)If memory becomes a problem, I can weed out some frivolous commands and conversation.
3)It is meant to be simultaneously useful and entertaining. The functions like flipping a coin are just for a more complete program that does things like a person. If you told me to flip a coin, I would do so, and I want to simulate that.
Currently, you can type in "HELP" and it gives a general overview and tells how to exit and how to use "EQ:". I will add all of the commands to the help screen (which also pops up upon opening the program) later.
More work:
-You can now input your name ind it will remember and use it without storing it into a string. I encode and decode it using a list with values from 1 to 26 for each letter.
Current goals:
-Say "GRAPH "plus whatever equation and have it graph it.
-Be able to do assembly functions
-Play simple word games?
I don't like natural language processors; even the "latest and greatest" ones are still terrible and resort too quickly to "Would you like to search for that?"
Just make it a really robust terminal that can correct your sloppy syntax.
I have made many terminal programs like this one in the past. (the most recent one was called COWCUL8R, which told bad cow jokes upon request, and provided other basic functionality).
Some things I usually implement are:
- A quadratic formula solver which takes arguments in the form of
Code:
>>QUAD(A,B,C) [Enter]
or something similar.
- Date and Time functions, which on request will spit out the date, time, day of the week, or time until some event, such as a stored birthday or something similar.
- A timer feature, which counts down from a given set of seconds.
- Other Utility Features, like calling GarbageCollect and ClearEntries.
- Easy switching between Degree and Radians.
Code:
>>CLR [or] CLEAR
to call ClrHome and clear the screen.
- Programming Utilities, like a simple Getkey script so a user and type in a key and have it spit out the getkey code.
Hope these help. I would love to help you program this (I have nothing better to do in TI-BASIC).
Good Luck!
I have never really delved into conversation, except for extracting syntax for functions from sentences.
Thanks, Those are really good!
CHill wrote:
A quadratic formula solver which takes arguments in the form of
Code:
>>QUAD(A,B,C) [Enter]
or something similar.
I'm still trying to get a program solely dedicated to this working! Good idea though.
CHill wrote:
Date and Time functions, which on request will spit out the date, time, day of the week, or time until some event, such as a stored birthday or something similar.
This would be handy but lose compatibility with the 83+. I might make different versions for portability. CHill wrote:
- A timer feature, which counts down from a given set of seconds.
- Other Utility Features, like calling GarbageCollect and ClearEntries.
- Easy switching between Degree and Radians.
All good and easy ideas. I will definitely use these!
CHill wrote:
Code: >>CLR [or] CLEAR
to call ClrHome and clear the screen.
[quote=CHill]Programming Utilities, like a simple Getkey script so a user and type in a key and have it spit out the getkey code. [/quote]
Good idea. A little trickier but not too bad.
Also, I added in the graph feature. I am considering simplifying the "EQ:" math feature to just ":" to make it more convenient. I will begin adding little assembly things in as well.
Nice idea, Kydapoot. I tried to do a chatbot in pure BASIC myself, and it entertained me for as long as I could test it. Good luck with it!
I'm sure the code will get really unwieldy, though, because I remember seeing this one person doing something similar, and his code didn't even fit in 3 browser screenshots. This was AFTER optimization.
. So, I wish you the best of luck trying to make it reasonable!
I might make my own version on the TI-84+, actually. See how much I can make in however little code I can make it in. Might make a fully graphical interface, too, even for typing. Bah, I'm getting ahead of myself.
As a feature request, however, I'd like to see arbitrary digits of tau.
I would love to beta test this program. I have a recommendation, i don't know if you have already done this or not but I think that you should have a very crisp and easy user interface, based from personal experience don't rush on this program. I doesn't matter if it takes you a year, spend as much as time you can. This type of a program could be revolutionary, if you really really focus on this it could adjusted into an OS, that would be suppa nice. So overall, nice idea, the more time you spend on it the better this is going to be. Don't worry about how long or complicated this will get, take it step by step.
JWinslow23 wrote:
As a feature request, however, I'd like to see arbitrary digits of tau.
Sounds like a good idea to me. I might add pi, tau, e, etc into their own subprogram (see below)
JWinslow23 wrote:
I'm sure the code will get really unwieldy, though, because I remember seeing this one person doing something similar, and his code didn't even fit in 3 browser screenshots. This was AFTER optimization.
So, I wish you the best of luck trying to make it reasonable!
It's already pretty bulky, but I have a way to work around it: all of the similar functions are bundled in their own subprograms. This means that the main code only has the besic utilities and conversation. Even those might get moved out eventually.
Calc wrote:
I would love to beta test this program. I have a recommendation, i don't know if you have already done this or not but I think that you should have a very crisp and easy user interface, based from personal experience don't rush on this program. I doesn't matter if it takes you a year, spend as much as time you can. This type of a program could be revolutionary, if you really really focus on this it could adjusted into an OS, that would be suppa nice. So overall, nice idea, the more time you spend on it the better this is going to be. Don't worry about how long or complicated this will get, take it step by step.
Thanks for the encouragement and ideas! I'n not sure about the fancy GUI because of size (text and graph-screen input take a lit more space than stuff on the home screen) but its a neat idea. I like the idea of turning it into an OS/shell sort of thing, but I would need an assembly hexcode to sun a program, and I don't know if that exists. If anybody does, that would be super helpful.
[quote="JWinslow23]I might make my own version on the TI-84+, actually. See how much I can make in however little code I can make it in.[/quote]This is for both the TI-83+ and the TI-84+ already, but sounds cool anyway.
Also, an update: Archiving works and UnArchiving will work as well soon. You can now view the date and time (which is graphical). I added degreen radians, garbagecollect, and clear entries. No timer/stopwatch yet, but I'll get there. Also, I noticed that pressing clear while using the input command already clears the screen, so I won't have to worry about implementing that!
About executing a program...
-20 Jan 2011
Sven.Thomas0 wrote:
Code: ;Deletes prgmU, then copies Ans to prgmU
;For example:
; :Input "Code:"Str1
; :Str1
; :Asm(prgmEXECCODE
;This will automatically execute prgmU, whether the code is BASIC or assembly
EFD74A
FE04C0
215500 ;55 is the token for "U"
22EC86227984
21F086
EB4E234623
ED43EE86
EDB0
3E05327884
EFF142
3803EFC64F
3E0521EC86
EF3C4C
C9
I don't know if this is good or bad code, but there was this hex code that I've seen being thrown around called CopyProg, which if I recall correctly, was written by Xeda way back when, but I'm not quite sure. I guess try it and see for yourself... Maybe backup your calc before though
Hmm. Could you explain how I would use this? I don't quite understand how to tell the code which program to run. What would have to be in Str1?
Okay, I went back and took the time to try it out, it works flawlessly. Basically, you put the code that you want to execute in Ans, Is the hex code to store the amount of free ram minus the program that is running in Ans. So in a basic program, you would use this like so:
Code: "AsmPrgmEFE542EF9247EF5641EFBF4AC9"
PrgmEXECCODE
Where PrgmEXECCODE is:Code: AsmPrgmEFD74AFE04C021550022EC8622798421F086EB4E234623ED43EE86EDB03E05327884EFF1423803EFC64F3E0521EC86EF3C4CC9
Explanation:
AsmPrgmEFE542EF9247EF5641EFBF4AC9
This is the hex code to store the amount of free RAM to Ans (minus the RAM used to run this program), it is completely arbitrary and it's just the piece of code I picked to test this out with.
Then EXECCODE will create PrgmU, store the contents of Ans to it and then run it. If PrgmU already exists, it will be overwritten. This will also run ti-basic code in just the same way, so this is valid input:
Code: "For(A,1,5):Disp A:End"
PrgmEXECCODE
As you can see from the code I provided the first time, 55 is the token for U. You can change this to fit your needs. You can make it any name you want by using the list of tokens on tibasicdev
So is the name of the program or the code the program contains in ans?
Kydapoot wrote:
So is the name of the program or the code the program contains in ans?
The code is in Ans. The name is automatically "U" unless you change the hex.
Darn. That means I would have to use something else if I wanted to make this into a shell-type thing that could run any program on the calc (without it being written in). What I am looking for is this:
The user types in something like "RUN prgmWHATEVER," I manipulate the input to fit whatever code runs that program, and then run it. For example:
Code: "RUN prgmA" (input)
#Change the user input to whatever the next line needs to run (I can do that easily)
#Check if prgmA exists and can be run and skip if not (assembly needed)
#If so run it and then return to the main program (assembly needed)
It's been a while since the last update, but progress has been made. Unarchiving is now written (the hexcode won't cooperate but I'll figure it out) and I added some more conversation. It even can tell you why fire trucks are red! I haven't found anything for running programs yet, but I'm still looking.
There is now some more communication/conversation and it is still not too large. Speed has not yet become an issue.