Chat Transcript, Sunday June 22
=> [wachsmut] joins at Sun Jun 29 19:57:49 1997 from 143.229.3.60
=> [David] joins at Sun Jun 29 19:58:04 1997 from 151.198.127.2
![]() | David=> Hello |
=> [wachsmut] leaves at Sun Jun 29 19:58:19 1997
=> [wachsmut] joins at Sun Jun 29 19:58:22 1997 from 143.229.3.60
![]() | wachsmut=> Hello David |
![]() | wachsmut=> is it 8:00 now, on your watch ? |
=> [Rob] joins at Sun Jun 29 19:58:51 1997 from 128.122.237.116
![]() | wachsmut=> hi rob ... |
![]() | Rob=> hi |
![]() | David=> |
![]() | wachsmut=> Alright, our LAST chat session - hope you're disappointed ! |
![]() | Rob=> last but not least! |
![]() | wachsmut=> Right - and I hope everyone shows up |
![]() | wachsmut=> well ... I can live with one person missing ... -:) |
![]() | wachsmut=> It's 8:02 here, let's wait a little and hope for the best ! |
=> [Don] joins at Sun Jun 29 20:01:11 1997 from 206.173.45.51
![]() | wachsmut=> hi don ! |
![]() | Don=> what's up guys |
![]() | wachsmut=> well, so far 3 out of 6 ... that's a start ! |
![]() | wachsmut=> let's wait for two more minutes before starting the "final chapter" .... |
![]() | wachsmut=> but, of coures, you're welcome to "converse" ..... |
![]() | Rob=> Can I ask for a clarification of something you said in the last class? |
![]() | wachsmut=> yes ! Please .... |
![]() | Rob=> It has to do with doing the slide show with a canvas... |
![]() | Rob=> did you say the hard part was getting the URL in the canvas? |
![]() | wachsmut=> yes .... tricky business, with an easy solution |
![]() | wachsmut=> sorry |
![]() | Rob=> I tried this this afternoon... |
![]() | wachsmut=> not the URL, but the "getImage" .... |
![]() | wachsmut=> yes, and did it work ? |
![]() | Rob=> getDocumentBase? |
![]() | wachsmut=> yes, that, too .... |
![]() | Rob=> No.. I didn't spend t |
![]() | Rob=> THAT much time on it, but I started trying to PASS the url into the canvas |
![]() | Rob=> from the applet. Not probably the right idea. |
![]() | wachsmut=> great ! that's the idea indeed ! |
![]() | Rob=> Great! |
![]() | wachsmut=> Actually, you could do one of two things: |
![]() | wachsmut=> 1. load the image in the applet, and PASS the "image" to the canvas |
![]() | wachsmut=> 2. pass the entire "applet" into the canvas, then you can |
![]() | wachsmut=> load the image from the canvas |
![]() | wachsmut=> So, in other words, the canvas constructor looks like: |
![]() | wachsmut=> public SlideCanvas(SlideShow master) |
![]() | wachsmut=> and in your applet's "init" method, you instantiate it like this: |
![]() | wachsmut=> SlideCanvas drawing = new SlideCanvas(this) |
![]() | wachsmut=> then your canvas can use 'getDocumentBase' likie this: |
![]() | wachsmut=> master.getDocumentBase(); |
![]() | wachsmut=> if you know what I mean ..... |
![]() | Rob=> the master. refers to the calling applet? |
![]() | wachsmut=> Anyway, let's do what we have to today .... |
![]() | wachsmut=> yes, rob. |
![]() | wachsmut=> public SlideCanvas(SlideShow master) |
![]() | wachsmut=> so "master" is of type SlideShow extending Applet, therefore |
![]() | wachsmut=> possesing those methods such as 'getDocuentBase' and |
![]() | wachsmut=> 'getImage'. |
![]() | Rob=> hmm, ok, thanks... (I know what i"m doing tonight.) |
![]() | wachsmut=> Alright ! Any other questions for now ? |
![]() | wachsmut=> David, Don ? |
![]() | Don=> sure |
![]() | David=> |
![]() | David=> |
![]() | David=> no |
![]() | wachsmut=> Don, you have a question ? |
![]() | Don=> no i though you asked if wee were ready, sorry |
![]() | wachsmut=> Alright, here's the gameplan for today: |
![]() | wachsmut=> I have several lectures available, and |
![]() | wachsmut=> we will not really go into reading/writing. |
![]() | David=> will chat from 6/21 be available soon? |
![]() | wachsmut=> but you can read the lecture notes .... |
![]() | wachsmut=> yes ... I am sorry, I forgot to post the chat transcript |
![]() | wachsmut=> I'll post both tonight, sorry about that ! |
![]() | David=> no problem |
![]() | wachsmut=> Anyway, we'll take a look at client/server examples, |
![]() | wachsmut=> play a game of "guess that server", then introduce |
![]() | wachsmut=> SQL servers, and a simple client for that. |
![]() | wachsmut=> Then we enjoy the rest of this sunday ..... |
![]() | wachsmut=> Alright, here's a very brief description of client/server solutions: |
![]() | wachsmut=> SERVER: a program with no user interface that sits on a - usually - |
![]() | wachsmut=> large and fast machine |
![]() | wachsmut=> CLIENT: a program with a user interface that usually runs on a PC |
![]() | wachsmut=> or MAC and connects to a server |
![]() | wachsmut=> PROTOCOL: the language that the client and the server speak |
![]() | wachsmut=> so that they understand eachother. |
![]() | wachsmut=> Very abstract...... so, here's an example: |
![]() | wachsmut=> please all start Telnet and connect to Sciris, and login as usual. |
![]() | wachsmut=> Come back and say "done" when done..... |
![]() | wachsmut=> go ahead, please. |
![]() | David=> |
![]() | David=> done |
![]() | wachsmut=> great .... let's wait for the others .... |
![]() | Rob=> back |
![]() | wachsmut=> alright, let's see how Don is doing .... |
![]() | Don=> hold on still trying |
![]() | wachsmut=> no problem ... |
![]() | Don=> alright, looks good |
![]() | wachsmut=> Great. |
![]() | wachsmut=> Now, go to your teln |
![]() | wachsmut=> That's your first example of a client/server solution already. |
![]() | wachsmut=> telnet: the client |
![]() | wachsmut=> the server is a program called "telnetd' running on sciris |
![]() | wachsmut=> the protocol is: pass all characters from telnet to telnetd, and |
![]() | wachsmut=> all characters from telnetd to telnet .... |
![]() | wachsmut=> telnet is actually very general, here's a simpler example. |
![]() | wachsmut=> Go to your telnet session, and type: |
![]() | wachsmut=> telnet sciris 13 |
![]() | wachsmut=> wait |
![]() | wachsmut=> then tell me what kind of server is answering, and what the protocol |
![]() | wachsmut=> might be ..... and give that server a name..... |
![]() | wachsmut=> go ahead |
![]() | wachsmut=> telnet sciris 13 |
![]() | wachsmut=> did you see anything ? If so, what / |
![]() | Don=> the protocol looks loke TCP/IP but i don't know the type of server |
![]() | wachsmut=> what did you see ? |
![]() | David=> |
![]() | Don=> an address |
![]() | David=> ftp address |
![]() | Don=> connected to |
![]() | Don=> escape char is |
![]() | Don=> then the time |
![]() | David=> |
![]() | wachsmut=> YES ! |
![]() | David=> date & time |
![]() | wachsmut=> EXACLTY ! |
![]() | David=> close session |
![]() | wachsmut=> The first couple of lines are always present when |
![]() | wachsmut=> using telnet. |
![]() | wachsmut=> but the day & time was the thing that the server returned. |
![]() | wachsmut=> It's called the "daytime" server, and is used for synchornizing |
![]() | wachsmut=> Unix machines. |
![]() | wachsmut=> One machine can accomodate many server. |
![]() | wachsmut=> Each server - also called a "daemon" - guards what's called a port. |
![]() | wachsmut=> When you "knock" at that port, the server answers, and |
![]() | wachsmut=> if you know the right protocol, you can communicate with the server. |
![]() | wachsmut=> The "daytime" server runs on port 13 (hence telnet sciris 13), |
![]() | wachsmut=> and the protocol is simple: if somebody "knocks", always send |
![]() | wachsmut=> the time and date, then disconnect again. |
![]() | wachsmut=> Alright, here's another server..... find me a name for that server. |
![]() | wachsmut=> type: |
![]() | wachsmut=> telnet sciris 7 |
![]() | wachsmut=> then |
![]() | wachsmut=> type some lines and hit return ..... then come back here |
![]() | wachsmut=> and tell me the name for the server that guards port 7. |
![]() | wachsmut=> go ahead, please. |
![]() | Don=> it is some type of repeat server |
![]() | wachsmut=> right ! |
![]() | Don=> it displays what you just type in |
![]() | Rob=> echo? |
![]() | wachsmut=> It's called the "echo" server, great, Rob. |
![]() | wachsmut=> That's another Unix standard, used mainly for testing client. |
![]() | wachsmut=> sorry, clients. The protocol is simple: |
![]() | wachsmut=> just return everything that the client says. |
![]() | wachsmut=> Now, the problem is you can not easily quit that echo server ! |
![]() | wachsmut=> so, note that "Telnet" always says "Escape character is ^]" |
![]() | wachsmut=> So, press "CONTROL-]", then type 'quit', then come back for another server. |
![]() | wachsmut=> All back ? |
![]() | Rob=> yes |
![]() | Don=> yep |
![]() | David=> |
![]() | David=> yes |
![]() | wachsmut=> great .... |
![]() | wachsmut=> |
![]() | wachsmut=> now try "telnet pirate.shu.edu 80" - look at what you see, but don't |
![]() | wachsmut=> type anything, please ..... and, name that server ! |
![]() | wachsmut=> go ahead. |
![]() | wachsmut=> Oopps, sorry, you don't see anything...... |
![]() | wachsmut=> are you back ? |
![]() | Rob=> back |
![]() | Don=> |
![]() | Don=> yes |
![]() | wachsmut=> alright, here's what I meant to say: |
![]() | David=> |
![]() | wachsmut=> type |
![]() | David=> yes |
![]() | wachsmut=> telnet pirate.shu.edu 80 |
![]() | wachsmut=> then type |
![]() | wachsmut=> get index.html |
![]() | wachsmut=> then name that server ! |
![]() | Don=> i got a bad coomand error |
![]() | wachsmut=> Alright, go ahead, of course (sorry) .... |
![]() | wachsmut=> yes ... actually, didn't it say "bad request" ? |
![]() | Don=> yes |
![]() | wachsmut=> And, it returned a bunch of stuff that gives away the |
![]() | wachsmut=> identiy of the server ..... -:) |
![]() | David=> |
![]() | David=> 400? |
![]() | wachsmut=> Hint: who talks things like "<BODY>" ... and "<H1>" .... |
![]() | Don=> html |
![]() | Rob=> internet server? |
![]() | wachsmut=> not internet, but web server ! |
![]() | wachsmut=> Port 80 is the standard port for any web server ! |
![]() | wachsmut=> but, we don't know the protocol. |
![]() | wachsmut=> Our request "get index.html" was not understood by the server, so |
![]() | wachsmut=> it returned an error message, then disconnected us. |
![]() | wachsmut=> What's a better program to use (rather than telnet) to connect |
![]() | wachsmut=> to port 80 of pirate ? |
![]() | David=> |
![]() | David=> ftp? |
![]() | Don=> netscape? |
![]() | wachsmut=> Yes: Netscpae |
![]() | wachsmut=> it knows the right protocol, so it sends the 'right' request, |
![]() | wachsmut=> and it also knows how to interprt the answer. |
![]() | wachsmut=> two more tries: |
![]() | wachsmut=> type: |
![]() | wachsmut=> telnet www.uni-erlangen.de 13 |
![]() | wachsmut=> and tell me what time it is in Germany ! |
![]() | Rob=> (No relation to the Erlang distribution?) |
![]() | wachsmut=> don't konw .... |
![]() | wachsmut=> alright, what time ? |
![]() | Don=> i get unknown host |
![]() | David=> |
![]() | David=> 2:35 |
![]() | Rob=> a.m. |
![]() | wachsmut=> check your spelling ... yes, 2:35am ... |
![]() | wachsmut=> So, we also know that the machine known as |
![]() | wachsmut=> www.uni-erlangen.de has another name, and is a Unix machine, |
![]() | wachsmut=> and is pretty "open", since it seems to allow connection on "standard" |
![]() | wachsmut=> ports. It would be a good target for a "break-in" ... but we're not |
![]() | wachsmut=> inclined towards that, of course. |
![]() | wachsmut=> Any Unix machine has thoursands of ports, |
![]() | wachsmut=> each port could be "guarded" by a seperate server. |
![]() | wachsmut=> You can even write your own servers to wait behind some |
![]() | wachsmut=> port for a connection, and then try to talk to the client. |
![]() | wachsmut=> In one of the lectures, I have an example of |
![]() | wachsmut=> an "echo client/server" package. |
![]() | wachsmut=> Not too exciting, but it shows the principle. |
![]() | wachsmut=> Now ..... |
![]() | wachsmut=> one very popular client server package is "SQL Client Server Databases" |
![]() | wachsmut=> SQL = "Standardized Query Language" |
![]() | wachsmut=> The SQL Server is a large, fast system with a fast and large |
![]() | wachsmut=> hard disk that houses the company data. It understands |
![]() | wachsmut=> "sql" commands, which are pretty user-unfriendly. |
![]() | wachsmut=> So, you use an SQL Client program to connect to that server. |
![]() | wachsmut=> The client says: hey, SQL server, give me all records for NAME=WACHSMUTH |
![]() | wachsmut=> the Server then searches its vast database, finds the data records |
![]() | wachsmut=> and retuns those. |
![]() | wachsmut=> The client formats those records nicely, and displays them "pretty" on |
![]() | wachsmut=> the screen. |
![]() | wachsmut=> Alright, so, let's connect to our own SQL server. |
![]() | wachsmut=> Go to your Telnet session, and type: |
![]() | wachsmut=> msql csas4083 |
![]() | wachsmut=> then - if you don't get an error - please return and say so. |
![]() | David=> |
![]() | David=> now |
![]() | wachsmut=> sure, go ahead. |
![]() | Don=> get a welcome screen |
![]() | David=> ok back |
![]() | Rob=> back |
![]() | wachsmut=> Great. |
![]() | wachsmut=> That's very bad example of an SQL Client ! |
![]() | wachsmut=> It's does not look pretty, but at least it understands the SQL protocol, |
![]() | wachsmut=> and it did connect to an "msql" server. |
![]() | wachsmut=> MSQL stands for "Mini SQL" and is a free system with limited, but |
![]() | wachsmut=> pretty useful SQL support. |
![]() | wachsmut=> Let's look at the commands that msql understands. |
![]() | wachsmut=> I'll show you a summary on your web screen, are you ready ? |
![]() | David=> |
![]() | David=> yes |
![]() | Don=> |
![]() | Rob=> ok |
![]() | wachsmut=> Alright, here we go: take a brief look, then come back, please. |
![]() | Don=> |
![]() | David=> |
![]() | David=> back |
![]() | wachsmut=> great. |
![]() | wachsmut=> Don, Rob, all back ? |
![]() | Rob=> \ back |
![]() | Don=> back |
![]() | wachsmut=> Alright, you have there a summary of the commands you can use. |
![]() | David=> |
![]() | wachsmut=> The command "msq" is the client program |
![]() | wachsmut=> the "csas4083" is a database I created for you, and you have full |
![]() | wachsmut=> access to that database. |
![]() | wachsmut=> In that database you can have many "tables" with data. |
![]() | wachsmut=> For example, go back to "telnet" and type: |
![]() | wachsmut=> select * from wachsmut_address \g |
![]() | wachsmut=> including the "\g" at the end ! |
![]() | wachsmut=> go ahead, let me know what you see. |
![]() | Don=> 2 rows of data |
![]() | wachsmut=> exactly. All back ? |
![]() | David=> yes |
![]() | wachsmut=> Great ... please enter now your own information (first name, last name, |
![]() | wachsmut=> telephon is optional). Here's the command to do it : |
![]() | wachsmut=> (hand on, I need to try it first -:) |
![]() | wachsmut=> alright, here we go. Type: |
![]() | wachsmut=> insert into wachsmut_address (fname, lname, phone) values |
![]() | David=> |
![]() | wachsmut=> ('first name', 'last name', 'phone') \g |
![]() | wachsmut=> where 'first name' etc is of course your own info. |
![]() | wachsmut=> Go ahead, please try now, let me know when done. |
![]() | David=> |
![]() | David=> seem to be stuck in ->? |
![]() | wachsmut=> type: |
![]() | wachsmut=> \g |
![]() | wachsmut=> for "go" |
![]() | wachsmut=> here's to command again, with some fake name: |
![]() | wachsmut=> insert into wachsmut_address (fname, lname, phone) values |
![]() | wachsmut=> ('Joe', 'Doe','1112') \g |
![]() | Don=> i got an arrow -> |
![]() | wachsmut=> type: |
![]() | wachsmut=> \g |
![]() | Don=> then an^R |
![]() | wachsmut=> if you get an arry (for "go"). |
![]() | Don=> thewn on another line an A |
![]() | wachsmut=> Well ... did you all try, at least ? |
![]() | Rob=> yes |
![]() | David=> its working on it |
![]() | David=> nothing came back yet? |
![]() | Don=> looks like he got booted, lets go home???!!! |
![]() | wachsmut=> I am back ... and listening ! |
![]() | Don=> whoops :-) |
![]() | wachsmut=> Alright ... so again, this client is terrible ! |
![]() | David=> |
![]() | wachsmut=> it's not userfriendly at all. |
![]() | David=> nothing came back after entering command? |
![]() | wachsmut=> (hit \g when done with a command) |
![]() | David=> when you hit enter ..advances blank line |
![]() | David=> still nothing |
![]() | wachsmut=> Okay ... hang on ..... |
![]() | David=> anybody else? |
![]() | wachsmut=> NOW, type: |
![]() | wachsmut=> \q |
![]() | wachsmut=> in the "msql" client to quit. |
![]() | wachsmut=> Then, let me know when you're back for the "wrap-up" ..... |
![]() | David=> no response..exit telnet? |
![]() | David=> i'm back |
![]() | Rob=> back |
![]() | wachsmut=> try an "end quote", then "\q" |
![]() | wachsmut=> anyway, everybody back ... here's the end of the story: |
![]() | wachsmut=> Since "msql" is a terrible sql client, your job is to write a better |
![]() | wachsmut=> one, at least for a specific table. |
![]() | wachsmut=> You can find - not now, anytime you like - two examples under |
![]() | wachsmut=> http://sciris.shu.edu/~wachsmut/ShowCase |
![]() | wachsmut=> and click on SQL handler, or the "PhoneBook". |
![]() | wachsmut=> I'll put up lecture notes for how to do that on Monday, and you will |
![]() | wachsmut=> find that - thanks to objects - it will be pretty easy ! |
![]() | wachsmut=> Also, try the following: |
![]() | wachsmut=> read the "msql commands" |
![]() | wachsmut=> type "msql csas4083" to connect to the database |
![]() | wachsmut=> create your own tabl |
![]() | wachsmut=> and add some info (look at the examples in the msql commands) |
![]() | wachsmut=> also, try really hard to enter your name to my database ! |
![]() | wachsmut=> Again, I'll post how to do that again as part of the lecture. |
![]() | David=> |
![]() | wachsmut=> Other than that, that's it ! |
![]() | David=> ota |
![]() | wachsmut=> So, see you Wed, one more time, and have a nice evening. |
![]() | wachsmut=> I'll be around for a little for questions, if any. |
![]() | David=> good evening |
![]() | Rob=> ok.... good night all. |
![]() | wachsmut=> night. |
![]() | Don=> see ya wednesday |
![]() | wachsmut=> see ya ! |
![]() | David=> ya sure Don |
=> [Don] leaves at Sun Jun 29 21:02:28 1997
=> [David] leaves at Sun Jun 29 21:02:40 1997
![]() | wachsmut=> Rob, still there ? Any questions ? |
![]() | Rob=> oh, sorry, I left and forgot to "leave"... |
![]() | Rob=> nope, no questions... I'll keep working on the canvas problem.. |
![]() | wachsmut=> okay, post it if you have a questions |
![]() | wachsmut=> it would be interesting to everyone, and it's a general |
![]() | wachsmut=> problem in many applets ! |
![]() | wachsmut=> anyhow, talk to you Wed, then ..... |
![]() | Rob=> ok.. thanks....I actually think (maybe) I have an easier way to do it. |
![]() | wachsmut=> then let *me* know !!!! |
![]() | Rob=> (somehow I doubt it.. but if it works I'll certainly tell you. |
![]() | Rob=> ok... great, see you |
![]() | wachsmut=> Can't wait .... -:) bye ! |
=> [Rob] leaves at Sun Jun 29 21:05:17 1997
=> [wachsmut] leaves at Sun Jun 29 21:05:19 1997