2016-08-26

Envelopes in algorithms

In mathematics / computer science algorithms, it is sometimes useful to solve a problem in terms of an "envelope" over source data such as a time series or other data sets.

You could look at a time series as an array of values, and the position in the array is the time (array[0] is the value for time=0) and the contents in that position is the value at that time.

Another way to look at a time series is a function, func(time)=value.

Given a time series function, the upper-left envelope takes a value at time=t that is the maximum of all points of the original function between 0 and t inclusive. If you take the minimum, that's the lower-left envelope. If you start from the right instead of the left (max/min of all points from t onward), it's an upper-right or lower-right envelope. You can draw the envelope on top of the graphed original data to visualize it.

Upper-left envelope (red) over original data / time series (blue)

2014-06-19

dvorak international on windows 8 / 8.1 and custom windows 8.1 keyboard layouts

just so y'all know, international dvorak keyboard layouts can still be installed on windows 8.1.

the famous international dvorak page has the setup files:

however, after the installation, it appeared nothing had changed, and i couldn't select the new keyboard layout in control panel.

after trying to install the keyboard layout dll file manually myself, and after realizing the Microsoft Keyboard Layout Creator was never going to work on windows 8, i finally realized the solution:

simply log off and back on for installation of layouts generated from Microsoft Keyboard Layout Creator to take effect.

since arjen's downloads seem to have been generated using Microsoft Keyboard Layout Creator, it follows that to create a custom layout for windows 8, you can use the Microsoft Keyboard Layout Creator on a windows vista computer to create the setup files, and then do the installation on windows 8.

2014-06-12

"Please wait (for the Local Session Manager)" Windows 8.1 remote desktop

After installing several virus scanning applications (including Sophos, which seems to be known to cause this) on a recently infected computer, remote desktop connections took forever and sometimes never connected at all.   Uninstalling the virus scanners didn't help, nor did disabling all services with msconfig.  The system restore point I needed was already deleted.

The symptom was simply "Please Wait" showing for several seconds when starting the computer, switching users, or connecting via Remote Desktop.  Restarting would make it work temporarily.  Apparently if you disconnect while this message is shown, remote desktop will stop working until restart if you are affeted by a particular bug.

After going to Group Policy (start, run, gpedit.msc) and enabling Computer Configuration -> Administrative Templates -> System -> "Display highly detailed status messages", the error read "Please Wait for the Local Session Manager" instead of just "Please wait".

The solution for me was to disable Remote Assistance in Advanced System Properties / Settings -> Remote tab.  No restart required.

After this, Remote Desktop worked normally.

Would be a shame if I ever wanted to enable remote assistance I guess.  I guess that's what TeamViewer is for.

Kudos to this post for helping me fix this:
http://ntsblog.homedev.com.au/index.php/2013/11/08/slow-login-hyperv-wait-local-session-manager/#comment-44074

Hope this helps!

2014-05-19

how to change alarm ringtone without playing it on android nexus 5

it makes me sad when people who design alarm clocks don't ever think you'll want to set an alarm without waking up your wife/husband/baby/roommates.  setting an alarm should be a silent process unless the user wants it not to be.

on nexus 5, setting alarm volume makes a noise when set from the Settings app, but you can also change alarm volume using the buttons on the side of the phone when on the screen to change the alarm ringtone.

so you can set the alarm ringtone to max volume without making a noise, but as soon as you choose a ringtone, it plays it at that volume.

one workaround is to set the volume to 0, then choose a ringtone, and then put the volume back up.  just dont forget.

however, if you had the volume at just the right setting and you don't want to forget what it was, or if you are woeries that, being sleepy, you will forget to put the volume back up after scrolling through and thinking of an alarm to choose, you can try this:

tap down on the alarm and the ok button at the same time, but dont let go.  neither the alarm plays and gets selected nor does the ok button exit out until you lift up your fingers.  so, lift up both fingers at the same time, and hope that the alarm gets selected first and then the ok button gets pressed.  if your  change wasn't saved, simply try again.  the ok button cuts off the alarm, so technically the alarm will still play, but for 0.01 seconds, and you won't hear a thing.

and for some reason, blogger decided to make this paragraph really big when i started typing it.
[edit:  just a bug in the editor.  font not big when published.  thought i'd let y'all know.]

2014-03-25

how to convert state to timezone using excel formula

Here is an Excel function to get a timezone based on the state.  Some states have multiple timezones, so I just chose the timezone that looked like it took up most of the state on the timezone map.

This takes a two-letter state and converts it to "Pacific", "Mountain", "Central", "Alaska" or "Hawaii".

=if(ISNUMBER(SEARCH(A1,"WA,OR,CA,NV")),"Pacific",if(ISNUMBER(SEARCH(A1,"MT,ID,WY,UT,CO,AZ,NM")),"Mountain",if(ISNUMBER(SEARCH(A1,"ND,SD,NE,KS,OK,TX,MN,IA,MO,AR,LA,WI,IL,TN,MS,AL")),"Central",if(ISNUMBER(SEARCH(A1,"MI,IN,OH,PA,NY,VT,ME,NH,MA,RI,CT,KY,NJ,DE,MD,WV,VA,NC,SC,GA,FL,DC")),"Eastern",if(ISNUMBER(SEARCH(A1,"AK")),"Alaska",if(ISNUMBER(SEARCH(A1,"HI")),"Hawaii",""))))))

This takes a two-letter state and converts it to "PDT", "MDT", "CDT", "AKDT" or "HST".

=if(ISNUMBER(SEARCH(A1,"WA,OR,CA,NV")),"PDT",if(ISNUMBER(SEARCH(A1,"MT,ID,WY,UT,CO,AZ,NM")),"MDT",if(ISNUMBER(SEARCH(A1,"ND,SD,NE,KS,OK,TX,MN,IA,MO,AR,LA,WI,IL,TN,MS,AL")),"CDT",if(ISNUMBER(SEARCH(A1,"MI,IN,OH,PA,NY,VT,ME,NH,MA,RI,CT,KY,NJ,DE,MD,WV,VA,NC,SC,GA,FL,DC")),"EDT",if(ISNUMBER(SEARCH(A1,"AK")),"AKDT",if(ISNUMBER(SEARCH(A1,"HI")),"HST",""))))))

Copy and paste the formula into a text editor such as Microsoft Word, and then do find-replace to change A1 to whichever cell has the state you want to replace, such as D2.  Then plop the formula into excel.

Currently, the formula gives a blank value if the state isn't the 2-letter abbreviation of any of the 50 states in the U.S.  To make it say something, like "ERROR", add some text in between the last set of quotes in the formula, after "Hawaii".  E.g.  ... "HI")),"Hawaii","ERROR!")))))...

If those formulas don't work, you can try something like this thanks to the person in the comments who suggested it. This seems to work on Google Sheets and Excel Online.
=if(OR(A1="CT", A1="DC", A1="DE", A1="FL", A1="GA", A1="IN", A1="KY", A1="MA", A1="MD", A1="ME", A1="MI", A1="NC", A1="NH", A1="NJ", A1="NY", A1="OH", A1="PA", A1="RI", A1="SC", A1="VA", A1="VT", A1="WV"),"Eastern",
if(OR(A1="AL", A1="AR", A1="IA", A1="IL", A1="KS", A1="LA", A1="MN", A1="MO", A1="MS", A1="ND", A1="NE", A1="OK", A1="SD", A1="TN", A1="TX", A1="WI"),"Central",
if(OR(A1="AZ", A1="CO", A1="ID", A1="MT", A1="NM", A1="UT", A1="WY"),"Mountain",
if(OR(A1="CA", A1="NV", A1="OR", A1="WA"),"Pacific",
if(OR(A1="AK"),"Alaska",
if(OR(A1="HI"),"Hawaii","Unknown"))))))

2014-02-16

usona dvorak international keyboard in ubuntu / linux: esperanto "u" with breve/hoketo/luneto

se vi uzas linukson / ubuntu, kaj vi tajpas uzante internacian dvorak-an klavaron, vi eble ekkonsciis ke por fari ĝ, oni premas ^ kaj g, ktp por tajpi aliajn cxapelitajn literojn (kun la cirkumflekso).  sed por tajpi ŭ, ne tiom simplas.  ^ kaj u faras û, sed kiel tajpi ŭ?

RESPONDO:  unue premu dekstra-alt (AltGr) + shift + 9, kaj malpremu, kaj premu 'u'.

laŭ la dosiero "/usr/share/X11/xkb/symbols/us"
sub "dvorak-intl"
la "dead_breve" klavo estas tajpita per alt+shift+9.  "dead" signifas ke la hoketo/"breve" aperos sur la sekve tajpita litero.   la tria kaj kvara kolumnoj estas atingebla per la dekstra "alt" klavo--la tria sen "shift" kaj la kvara kun "shift".

uzu "sudo vim ./us" por redakti la klavaron.  trovu "u, U, uacute, Uacute" sub "dvorak-intl", kaj anstataŭ "uacute" tajpu "ubreve", kaj anstataŭ "Uacute" tajpu "Ubreve":

 key <AC04> { [         u,          U,        ubreve,           Ubreve ] };

tiel, oni povas premu dekstra 'alt' + 'u' por tajpi 'ŭ' pli facile.

--

if you use linux / ubuntu, and type using the interational dvorak keyboard layout, you might've noticed that to make a ĝ, one presses ^ and g etc in order to type hatted letters (with the circumflex).  but to type û, it's not that simple.  ^ and u make û, but how to type ŭ?

ANSWER: first press right-alt (AltGr) + shift +9 and let go, and then press 'u'.

according to the file "/usr/share/X11/xkb/symbols/us"
under "dvorak-intl"
the "dead_breve"key is typed by pressing alt+shift+9.  "dead" means that the breve will appear on the next letter typed.  the third and fourth columns art attainable by the right "alt" key--the third without shift and the fourth with shift.

use "sudo vim ./us" to edit the keyboard. find "u, U, uacute, Uacute" under "dvorak-intl", and instead of "uacute" type "ubreve", and instead of "Uacute" type "Ubreve":

 key <AC04> { [         u,          U,        ubreve,           Ubreve ] };

this way, one can press right 'alt' + 'u' to type 'ŭ' more easily.

2013-12-14

Sonos controller prevents standby / sleep / screensaver

Just wanted to let y'all know that Sonos Controller 4.2 on Windows XP prevents the computer from putting on the screensaver / locking your computer / going into standby/hibernate, or turning off your monitor.

This is only so when music is actually playing.  If you hit "pause" on the controller, the computer can do its power-saving tricks.

Workaround: pause the music or set the sleep timer in Sonos Controller.

I don't see a way to change this behavior, let me know if you find one.

2013-07-05

"Error occurred during the SSL handshake: invalid SSL session" - Troubleshooting Perforce plugin error

The Perforce plugin for Eclipse may give the error "Error occurred during the SSL handshake: invalid SSL session" when you try to edit a file.

Some JVM distributions that are shipped internationally come with limited cryptography capabilities for national security purposes.  The 256 bit cryptography that Perforce uses may not be in the JVM that your Eclipse installation is running on.  Therefore you need to install the Java Cryptography Extension (JCE) for the Perforce plugin to work.
  1. Determine which eclipse.ini file you should use (from joomla.org):
    1. If you downloaded Eclipse IDE manually from internet the "eclipse.ini" file is just inside the unpacked folder
      1. Open Eclipse as you normally do.
      2. Click Help -> About Eclipse SDK
      3. Click Installation Details
      4. Go to the Configuration tab
      5. Find "eclipse.home.location=file:<PATH>".  <PATH> is where eclipse is installed.
    2. If you installed Eclipse via terminal or software center the location of the file is "/etc/eclipse.ini"
    3. In some Linux versions the file can be found at "/usr/share/eclipse/eclipse.ini". Do not use this file if you found a config file at "/etc/eclipse.ini".
  2. Determine the current version of the JVM that eclipse will use to run the Perforce plugin, not to be confused with $JAVA_HOME and Window/Preferences/Java/Installed JREs.
    1. Open the eclipse.ini file directly inside Eclipse's installation folder.
    2. Check for -vm and below, see the path to the Java VM installation on which Eclipse is running and determine the version from the path.
      1. If there is no -vm line, eclipse is running on the default version of Java for your machine.
      2. Open a terminal window and type "export"
      3. Look for JAVA_HOME = ... in the output, and determine the version the version from the path.
  3. If you are running Java version 6, update to the latest version of Java.
    1. Download Java 7 or later, and extract.
    2. Make sure you update eclipse.ini if the -vm is specified there.
    3. Also update the JAVA_HOME environment variable if found in output of "export" command.  Look in ~/.profile and ~/.bash_rc files.  Prefer to specify it in ~/.profile file.
    4. Alternatively, install JCE for Java 6 (google it).
  4. Now that you have Java 7, download and install JCE for Java 7.
    1. View the README to determine where to put the files.

2013-05-29

gcc sparc v8 relocation error: value does not fit

in our case, we got this error when we tried to do:
load [label], register.

you have to set the label into a register, then do
load [register], register

or
load [register + offset], register

such as
load [%fp - 4], %l0

basically, just make sure your instructions are formatted properly!

2013-03-02

modelsim: Cannot open `include file "Constants.v".

was trying to use ModelSim to test my Quartus project, but was getting this error when i did "compile" -> "compile..." from ModelSim's menu.

vlog -reportprogress 300 -work work C:/lab4/ALU.v
# Model Technology ModelSim ALTERA vlog 10.1b Compiler 2012.04 Apr 27 2012
# -- Compiling module ALU

# ** Error: C:/lab4/IDEX_regs.v(56): Cannot open `include file "Constants.v".
# ** Error: C:/lab4/ALU.v(77): (vlog-2730) Undefined variable: 'constant 1'.
# ** Error: C:/lab4/ALU.v(77): (vlog-2730) Undefined variable: 'constant 2'.

verilog lets you use header files to share constants between modules.  the problem was that modelsim couldn't find where my header file / constants file was.   my constants file was in my lab4 folder with the rest of my project's files.  it was probably looking in the lab4/simulation/modelsim folder, which was the current modelsim folder.  how to help modelsim find your header files:
  • in ModelSim, click "Compile" -> "Compile Options..."
  • click on "Verilog & SystemVerilog" tab
  • click "Include Directory..."
  • move up a couple directories to get to your main project folder, or whatever folder your header files are in.
  • click OK, OK
that should've been good enough, but it wasn't in my case.  i got this message:

# Modified C:\Program Files (x86)\altera\modelsim12.1\modelsim_ase\win32aloem/modelsim.ini

but then when i clicked Compile -> Compile Options again,  i saw that my changes were lost.

so, i used notepad to open the file: C:\Program Files (x86)\altera\modelsim12.1\modelsim_ase\win32aloem/modelsim.ini

one of the lines of the file said this:

OptionFile = C:/lab2/simulation/modelsim/vlog.opt

that's lab2!  it seems modelsim was permanently configured to pull options from one of my old projects.  so i changed it to say lab4 and saved.

at this point, you should be able to save changes made in Compiler Options (Compile -> Compile Options).

i used notepad to open the settings file in my lab4 folder:  C:/lab4/simulation/modelsim/vlog.opt

the contents should simply be:
+incdir+C:/lab4

hope this helped you!

2013-01-26

linux mint, mate, panels: change desktop folder location

if you don't want mate to use the $HOME/Desktop folder as the folder it actually shows on your desktop, you can change which location it uses.

i couldn't find anything by searching for this until i remembered that mate is a successor of gnome2.  so, i looked up how to do it for gnome2 and it seems to be kind of the same:

here's how to do it with gnome:
http://www.howtogeek.com/howto/17752/use-any-folder-for-your-ubuntu-desktop-even-a-dropbox-folder/

so, just go to your home folder, click "view"->"show hidden files", then click on the ".config" folder and then open "user-dirs.dirs" and change everything there.

alternatively (thanks anonymous),
  1. gedit ~/.config/user-dirs.dirs
  2. change the value of XDG_DESKTOP_DIR="/insert/path/here" and save it
  3. killall nautilus

2013-01-23

solution: ubuntu/mint linux doesn't shut down, cpu stuck

i have linux mint installed on my dell studio 1569 laptop.  linux mint would never shut down on its own.  i go to shut off and it just pukes all over the screen.

Linux Mint 13 Maya ajtNbMint tty1
ajtNbMint login: modem manager[2701]: <info> Caught signal 15, shutting down...

rpcbind: rpcbind terminating on signal.  Restart with "rpcbind -w"
nm-dispatcher.action: Caught signal 15, shutting down...
[  766.704047] BUG: soft lockup - CPU#3 stuck for 23s! [reboot:9642]
[  766.704341] Stack:
[  766.704304] Call Trace:
[  766.704410]  <IRQ>
[  766.704404]  <EOI>
...

----------
important edit 2014-06-09:

if you are running ubuntu 12.04, i recommend updating to ubuntu 14.04.  this has fixed many hardware related issues for me.

-----------
important edit 2013-11-11:

i don't think the below solution actually does anything, despite people say it working.  this is because the bug only happens when you shut down the computer after it has been on for a while, but when you test a new boot parameter, you restart so it can take effect and then shut down immediately after restarting to test it.  because you shut down right after starting up, it seems to have worked, and then post "thank you" and realize later that day that it didn't work.

this bug has already been reported to linux and is already fixed in the "mainline kernel" which means that it just hasn't been rolled out to normal users yet because it's not completely tested.  here is the bug report where the reporter says the bug has been fixed upstream:  https://bugs.launchpad.net/ubuntu/+source/linux/+bug/254326

no need to wait -- you can begin using the mainline kernel now.  all i did was install an image*.deb file and now when i boot up, i can choose "ubuntu with advanced options" and boot using the updated kernel.
https://wiki.ubuntu.com/Kernel/MainlineBuilds?action=show&redirect=KernelMainlineBuilds

after using the new kernel, my computer turns off normally even after several hours of use, and it also doesn't crash every 2 hours or after resuming from sleep anymore.

below are the old suggestions, which i believe DO NOT work!
let me know what actually works for you in the comments.  remember, to test if your change worked, you should use your computer for a couple hours before shutting down.

-----------


for some people, adding the kernel boot parameters "noapic" fixes the problem:
  • http://muffinresearch.co.uk/archives/2008/08/20/ubuntu-bug-soft-lockup-cpu0-stuck-for-11s/
  • https://bugs.launchpad.net/ubuntu/+source/linux/+bug/206316

once i did this, my computer still didn't shut down, but it gave me this helpful message:  "irq 19: nobody cared (try booting with the "irqpoll" option)".  so i also added the "irqpoll" kernel boot parameter, and ever since it has shut down beautifully.  this has to do with intel and linux not playing well together.

if you are using grub2, simply run 
gksudo gedit /etc/default/grub


and add "noapic" to the line starting with "GRUB_CMDLINE_LINUX_DEFAULT":

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash blah blah blah noapic irqpoll"

2012-11-28

solution to vagrant up -> "The host class is reporting that NFS is not supported by this host"

got this error running vagrant up:
ajt@ajtNbMint /media/c/ajt/edu/20122/eng100l/github/whwn $ vagrant up
[default] VM already created. Booting if it's not already running...
The host class is reporting that NFS is not supported by this host,
or `nfsd` may not be installed. Please verify that `nfsd` is installed
on your machine, and retry.

in linux, i solved this by opening synaptic package manager and installing "nfs-kernel-server"

too late for me to try now, but i have a feeling that running this in a terminal would work too:
sudo apt-get install nfs-kernel-server

in windows, change the vagrantfile so you use virtualbox's shared folders instead of nfs, by setting nfs=>false:
config.vm.share_folder "blah", "~/blah", ".", :extra => 'dmode=755,fmode=644', :nfs => false

2012-11-15

split "city, state zip" in excel.


here are some formulas to split a cell containing city, state and zip into separate city, state and zip cells in microsoft excel.

format: "city, state zip" e.g. "La Jolla, CA 92092-0100"
  • comma after city name, followed by a space
  • state is two letters, followed by a space
in cell b1, type
=LEFT(A1,(FIND(",",A1))-1)

in cell c1, type
=MID(A1,FIND(",",A1)+2,2)

in cell d1, type
=RIGHT(A1,LEN(A1)-FIND(",",A1)-4)

format: "city, state zip" e.g. "La Jolla, California 92092-0100"
  • comma after city name, followed by space
  • state is specified but of any length and followed by space
in cell b1, type
=LEFT(A1,(FIND(",",A1))-1)

in cell c1, type
=MID(A1,FIND(",",A1)+2,FIND("*", SUBSTITUTE(A1, " ", "*", LEN(A1) - LEN(SUBSTITUTE(A1, " ", ""))))-(FIND(",",A1)+2))

in cell d1, type
=RIGHT(A1, LEN(A1) - FIND("*", SUBSTITUTE(A1, " ", "*", LEN(A1) - LEN(SUBSTITUTE(A1, " ", "")))))

format: "city state zip" e.g. "La Jolla CA 92092-0100"
  • city, state, zip separated by 1 space only
  • state is two letters
in cell b1, type
=LEFT(A1,(FIND("*", SUBSTITUTE(A1, " ", "*", LEN(A1) - LEN(SUBSTITUTE(A1, " ", "")))))-4)

in cell c1, type
=MID(A1,(FIND("*", SUBSTITUTE(A1, " ", "*", LEN(A1) - LEN(SUBSTITUTE(A1, " ", "")))))-2,2)

in cell d1, type
=RIGHT(A1, LEN(A1) - FIND("*", SUBSTITUTE(A1, " ", "*", LEN(A1) - LEN(SUBSTITUTE(A1, " ", "")))))

2012-10-26

run linux mate in sudo mode

i have linux mint with the mate desktop, and i wanted to copy a file into a folder but got "error opening file: permission denied" or "the folder cannot be copied because you do not have permissions to create it in the destination".  i remembered before that i could run mate as root or in sudo mode or something, but i couldn't remember what it was called.  so how do you do administrative tasks in mate?

when you browse the contents of a folder in mate, you are actually seeing the caja app built into mate.  so i will tell you how to run caja as an administrator or "as superuser".

open a terminal, and type "sudo caja".  boom! done.  you can do anything in this window.

if you want to run all of mate apps in administrative mode, you can type "sudo mate-panel".  i'm not sure how you're going to close your first instance of mate-panel so you might be stuck with 2 task bars on top of each other.

2012-10-13

change date and time format of clock applet in linux mint mate

in the mate desktop environment that comes with linux mint, the clock is an applet built into the panel program.

to change the date and time format, press alt+f2 or open a terminal window.  type "mateconf-editor" and press enter.  this opens the configuration editor for mate.  if you don't have this installed, type "apt-get install mate-conf-editor" in a terminal.

navigate to /apps/panel/applets/applet_clock and click on "format".  read the long description and possibly set the value to "custom".  if you use "custom", also change the "custom_format" field, which accepts the same format strings that strftime() uses.

i set custom_format to "%F %H:%M" which displays the time in the format 2012-10-13 15:17

2012-10-06

solution to ImportError: No module named OSRNG

i was trying to run fab bootstrap on my windows machine an received the error: "ImportError: No module named OSRNG"

i found a folder on my computer called C:\PythonX\ that had the package i needed.  i merged the contents of this folder with my python installation in "C:\Program Files (x86)\python27\"

in the end, you need to have a folder like this, but with the location to your python installation:
C:\Program Files (x86)\python27\Lib\site-packages\Crypto\Random\OSRNG

2012-08-27

ucsd single sign-on does not allow saving password

if you go to ucsd and frequently log into sites that use their single sign-on page such as my tritonlink, you must have noticed that their log on page has the username/pid field set as a password field, so it looks like you're logging in with two passwords.  this tricks browsers into thinking you aren't logging in to something but possibly just changing your password, so it doesn't prompt to save your login info.  ucsd thinks they know what's best for you, but if you keep your computer physically secure and always lock your computer (windows key + 'L') before you leave, then why not save your password?

well you can with the help of either keepass password safe (mostly for pc), or lastpass online password manager.

in keepass, you can set up auto-type on an entry.  make a new entry, type your pid (eg A09...) for the username, and type your ucsd password.  the title of the entry should be nothing other than "ucsd".  now hold ctrl+alt+'a' (for "auto") when you're at the single sign-on page.  keepass will see that you're on a window that contains "ucsd" in the title and will automatically type your username, {tab}, your password and {enter}as if you typed it on your keyboard.

if you want to use lastpass, just install their extension for firefox, chrome, safari or even internet explorer.  sign in once and it'll prompt you to save the password -- lastpass is the only one smart enough to ask.

DataRow keeps converting values into strings

when i use DataRow.ItemArray or the DataRow's indexer (eg myDataRow[0] = ...) to set the values to objects, the values are converted to strings.

DataRow row = ...;
row[0] = (object)5;

//problem:
//row[0] == "5"
//row[0] != 5

the solution is to specify the type on the DataTable's column.

DataTable t = ...;
t.Columns[0].DataType = typeof(object);