!!Description\nA rapidly growing number of liberal arts colleges have selected Moodle as their learning management system (LMS) and general collaboration utility (GCU) because it is easy to use, inexpensive to support, and readily adaptable to the specific needs of different institutions. Thanks to the "low-overhead" PHP technology upon which Moodle is based, it provides excellent opportunities for collaborative software development. The purpose of this workshop is to explore these opportunities. Specifically, we seek to examine these questions:\n* What Moodle challenges do liberal arts colleges face in common?\n* What (collective) expertise do we have with which meet these challenges?\n* What areas of Moodle software development can we collaborate on most effectively?\n* What resources are needed to ensure successful Moodle collaboration?\n* What communication and planning mechanisms will facilitate Moodle collaboration? \nWe invite liberal arts institutions that have a serious commitment to Moodle to send two-person teams to this workshop. Each team should include the CIO (or a designee who can speak on behalf of the IT organization) and the Moodle project manager or developer. Each team's travel and lodging costs will be covered by NITLE.\n\nPlease note that this meeting is part of a longer term effort to promote collaboration around Moodle and may not be appropriate for campuses in the early stages of Moodle adoption or use. Those users might be better served by using the [[NITLE Moodle Exchange|http://nitle.org/index.php/nitle/opportunities/services/the_moodle_exchange]], which is currently open to participation by anyone. Other events to serve the community, such as an annual Moodle event which would provide wider opportunities for participation, are also being evaluated as possibilities.
Try to get Blogthis in Diigo to work with EC Blogs. Great interface. Also add tag cloud code to Eduspaces blog:\n<<<\n<script type="text/javascript" src="http://www.diigo.com/roll2/linkrolls?username=markpea&count=10&style=customize&icon=true&l_type=0&t_color=0000FF&t_fam=Arial,sans-serif&t_size=14&t_bold=true&t_italic=false&t_underline=false&i_fam=Verdana,sans-serif&i_color=663300&i_size=10&i_bold=false&i_italic=false&i_underline=false&bg_color=FFFFFF&bg_repeat=no-repeat&title=Diigo%20bookmarks&tags=moodle&bg_img=" ></script><noscript><a href="http://www.diigo.com/user/markpea" >Diigo bookmarks</a></noscript>\n<<<
Php not working on Rublev. Need to add:\n{{{\nAddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps\n}}}\ninto // /usr/local/etc/apache22/httpd.conf// . Now restart with {{{sudo /usr/local/sbin/apachectl restart}}}\nand it works!\n
!!Mods to barnabas server\nNote : need to use sudo to do all these (permissions/ownership)\n# /var/www/moodle/config.php. Change //159.28.7.34// to //barnabas.lly.earlham.edu//\n# /etc/php5/apache2/php.ini. Change //upload_max_filesize// to 32M and //post_max_size// to 32M\n# add line to crontab with {{{crontab -e}}}\n** {{{*/10 * * * * wget -q -O /dev/null http://barnabas.lly.earlham.edu/moodle/admin/cron.php}}}\n# restart apache : {{{sudo apache2ctl restart}}}\n\n\n
Conversation with Welling Hall about Moodle issues:\n\n* The URL issue is still present. {{{Check this out!}}}\n* Confusion with Upload procedure. Reduce options to make things clearer. {{{Test this out with v1.7 to see how things are different}}}\n* Needs to ''duplicate'' assignments / forums or other activities. Current workaround is very kludgy.\n* Would like to be able to manually override a Quiz score. Cannot change any quiz score after it's completed.\n* Forums. Q&A is working well. She uses separate forums rather than multiple questions in the same forum since you can only limit the reposnse time for an individual Forum and not the questions on a forum.\n* Grading. Welling is doing most/all of her grading in Moodle. ''Excel download'' needs to work. Does not work if any of the assignments have an alphabetic grade.\n** Import Moodle grades into Micrograde? Formats?\n** would be nice to have a 'what if' feature in Moodle grading system similar to that of Micrograde. What would a student need to do to get grade up to an 'A' for example.\n\n
Had some issues with Moodle Sharing Cart which were [[fixed|http://www.earlham.edu/markp/miss/index.html#%5B%5B18 March 2009 %3A Sharing cart fix%5D%5D]] by dint of making ''zip'' (I cannot figure out why zip was not present in //usr/local/bin// while unzip was.\nSo, {{{ /usr/ports/archivers/zip]$ make install clean}}} does the trick. Repeat for ''gzip''\n
!!Randy Schultz's Jail setup scheme\n* Install OS from disk \n* Install ports via portsnap \n* Install cvsup-without-gui via make install \n* Set up /usr/local/etc/cvsup/stable.local from\n* /usr/share/examples/cvsup/stable-supfile \n* Csup the sources: \n** "env -i make buildworld" This builds the kernel binaries used by all the Jails. Takes ages. \n** "env -i make buildkernel" \n** "env -i make installkernel" \n* reboot into single user mode \n** "mergemaster -paU" \n** "make installworld" \n** "mergemaster -aU" \n* reboot \n* Snap the ports again to make sure \n* Install ezjail from ports \n* Build jails with ezjail \n* Install bash, sudo and logrotate from ports\n
After conversations with Aaron C-R I decided to install BSD on Frumentius which I shall rename to //Sergius//\nI downloaded and burned 4 BSD v7 CDs.\nHere is some initial +++[h/w info]\n{{{\nmarkp@frumentius:~$ lspci -nn\n00:00.0 Host bridge [0600]: Intel Corporation Unknown device [8086:25e0] (rev 80)\n00:02.0 PCI bridge [0604]: Intel Corporation 5000 Series Chipset PCI Express x8 Port 2-3 [8086:25f7] (rev 80)\n00:03.0 PCI bridge [0604]: Intel Corporation Unknown device [8086:0000] (rev 80)\n00:04.0 PCI bridge [0604]: Intel Corporation 5000 Series Chipset PCI Express x4 Port 4 [8086:25e4] (rev 80)\n00:05.0 PCI bridge [0604]: Intel Corporation 5000 Series Chipset PCI Express x4 Port 5 [8086:25e5] (rev 80)\n00:06.0 PCI bridge [0604]: Intel Corporation 5000 Series Chipset PCI Express x4 Port 6 [8086:25e6] (rev 80)\n00:07.0 PCI bridge [0604]: Intel Corporation 5000 Series Chipset PCI Express x4 Port 7 [8086:25e7] (rev 80)\n00:08.0 System peripheral [0880]: Intel Corporation 5000 Series Chipset DMA Engine [8086:1a38]\n00:10.0 Host bridge [0600]: Intel Corporation 5000 Series Chipset FSB Registers [8086:25f0]\n00:10.1 Host bridge [0600]: Intel Corporation 5000 Series Chipset FSB Registers [8086:25f0]\n00:10.2 Host bridge [0600]: Intel Corporation 5000 Series Chipset FSB Registers [8086:25f0]\n00:11.0 Host bridge [0600]: Intel Corporation 5000 Series Chipset Reserved Registers [8086:25f1]\n00:13.0 Host bridge [0600]: Intel Corporation 5000 Series Chipset Reserved Registers [8086:25f3]\n00:15.0 Host bridge [0600]: Intel Corporation 5000 Series Chipset FBD Registers [8086:25f5]\n00:16.0 Host bridge [0600]: Intel Corporation 5000 Series Chipset FBD Registers [8086:25f6]\n00:1c.0 PCI bridge [0604]: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 [8086:2690] (rev 08)\n00:1c.1 PCI bridge [0604]: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 2 [8086:2692] (rev 08)\n00:1c.2 PCI bridge [0604]: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 3 [8086:2694] (rev 08)\n00:1c.3 PCI bridge [0604]: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 4 [8086:2696] (rev 08)\n00:1d.0 USB Controller [0c03]: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 [8086:2688] (rev 08)\n00:1d.1 USB Controller [0c03]: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 [8086:2689] (rev 08)\n00:1d.2 USB Controller [0c03]: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 [8086:268a] (rev 08)\n00:1d.3 USB Controller [0c03]: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 [8086:268b] (rev 08)\n00:1d.7 USB Controller [0c03]: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2 Controller [8086:268c] (rev 08)\n00:1e.0 PCI bridge [0604]: Intel Corporation 82801 PCI Bridge [8086:244e] (rev d8)\n00:1f.0 ISA bridge [0601]: Intel Corporation 631xESB/632xESB/3100 Chipset LPC Interface Controller [8086:2670] (rev 08)\n00:1f.1 IDE interface [0101]: Intel Corporation 631xESB/632xESB IDE Controller [8086:269e] (rev 08)\n00:1f.2 IDE interface [0101]: Intel Corporation 631xESB/632xESB/3100 Chipset SATA IDE Controller [8086:2680] (rev 08)\n00:1f.3 SMBus [0c05]: Intel Corporation 631xESB/632xESB/3100 Chipset SMBus Controller [8086:269b] (rev 08)\n01:00.0 PCI bridge [0604]: Intel Corporation 6311ESB/6321ESB PCI Express Upstream Port [8086:3500]\n01:00.3 PCI bridge [0604]: Intel Corporation 6311ESB/6321ESB PCI Express to PCI-X Bridge [8086:350c]\n02:00.0 PCI bridge [0604]: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E1 [8086:3510]\n02:01.0 PCI bridge [0604]: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E2 [8086:3514]\n02:02.0 PCI bridge [0604]: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E3 [8086:3518]\n05:00.0 Ethernet controller [0200]: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) [8086:1096]\n05:00.1 Ethernet controller [0200]: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) [8086:1096]\n06:03.0 Ethernet controller [0200]: Intel Corporation 82541PI Gigabit Ethernet Controller [8086:107c] (rev 05)\n10:0c.0 VGA compatible controller [0300]: ATI Technologies Inc ES1000 [1002:515e] (rev 02)\n}}}\n===\n\nEthernet hardware +++[info]\n{{{\nmarkp@frumentius:~$ ifconfig -a\neth0 Link encap:Ethernet HWaddr 00:0E:0C:4D:BA:C4\n BROADCAST MULTICAST MTU:1500 Metric:1\n RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n collisions:0 txqueuelen:1000\n RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)\n Base address:0x3020 Memory:88800000-88820000\n\neth1 Link encap:Ethernet HWaddr 00:0E:0C:4D:BA:C5\n BROADCAST MULTICAST MTU:1500 Metric:1\n RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n collisions:0 txqueuelen:1000\n RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)\n Base address:0x3000 Memory:88820000-88840000\n\neth6 Link encap:Ethernet HWaddr 00:1B:21:0C:B8:A1\n inet addr:159.28.7.68 Bcast:159.28.7.255 Mask:255.255.255.0\n inet6 addr: fe80::21b:21ff:fe0c:b8a1/64 Scope:Link\n UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1\n RX packets:10526384 errors:0 dropped:0 overruns:0 frame:0\n TX packets:9274547 errors:0 dropped:0 overruns:0 carrier:0\n collisions:0 txqueuelen:100\n RX bytes:1197972358 (1.1 GB) TX bytes:493590006 (470.7 MB)\n Base address:0x2000 Memory:88920000-88940000\n\nlo Link encap:Local Loopback\n inet addr:127.0.0.1 Mask:255.0.0.0\n inet6 addr: ::1/128 Scope:Host\n UP LOOPBACK RUNNING MTU:16436 Metric:1\n RX packets:204458 errors:0 dropped:0 overruns:0 frame:0\n TX packets:204458 errors:0 dropped:0 overruns:0 carrier:0\n collisions:0 txqueuelen:0\n RX bytes:50186673 (47.8 MB) TX bytes:50186673 (47.8 MB)\n}}}\n===\nNetwork +++[info]\n{{{\nmarkp@frumentius:~$ sudo lshw -C network\n[sudo] password for markp:\n *-network:0 DISABLED\n description: Ethernet interface\n product: 80003ES2LAN Gigabit Ethernet Controller (Copper)\n vendor: Intel Corporation\n physical id: 0\n bus info: pci@0000:05:00.0\n logical name: eth0\n version: 00\n serial: 00:0e:0c:4d:ba:c4\n capacity: 1GB/s\n width: 64 bits\n clock: 33MHz\n capabilities: pm msi pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation\n configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.20-k2-NAPI firmware=14.224-1 latency=0 link=no module=e1000 multicast=yes port=twisted pair\n *-network:1 DISABLED\n description: Ethernet interface\n product: 80003ES2LAN Gigabit Ethernet Controller (Copper)\n vendor: Intel Corporation\n physical id: 0.1\n bus info: pci@0000:05:00.1\n logical name: eth1\n version: 00\n serial: 00:0e:0c:4d:ba:c5\n capacity: 1GB/s\n width: 64 bits\n clock: 33MHz\n capabilities: pm msi pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation\n configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.20-k2-NAPI firmware=14.224-1 latency=0 link=no module=e1000 multicast=yes port=twisted pair\n *-network\n description: Ethernet interface\n product: 82541PI Gigabit Ethernet Controller\n vendor: Intel Corporation\n physical id: 3\n bus info: pci@0000:06:03.0\n logical name: eth6\n version: 05\n serial: 00:1b:21:0c:b8:a1\n size: 100MB/s\n capacity: 1GB/s\n width: 32 bits\n clock: 66MHz\n capabilities: pm pcix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation\n configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.20-k2-NAPI duplex=full firmware=N/A ip=159.28.7.68 latency=32 link=yes mingnt=255 module=e1000 multicast=yes port=twisted pair speed=100MB/s\n}}}\n===\n
!! Session about ELS\n4 students in Judi Hetrick's Journalism II class. Sarah Scanlon, & Mandi Rice were new to ELS but picked it up quickly. Chris Matlack was not there and Fredrico Rojas I helped out.\nJudi created a community ('Future of News') but accidentally put it into blogs@barnabas (+++[note to self]>\nUnmake the 'blogs.barnabas' URL. Done. Redo the front page of barnabas.elgg. Done===)\nShe redid the community and the students joined community.\nTheir assignment was to copy and paste their piece into a blog posting and then write a summary in the community blog with a link to the individual article. Worked well.\nNext time Folio?
!! Lunch with languages.\nPresent were:\n* Yasumi Kuriya\n* Akiko Kakutani\n* Karim Sagna\n* Margaret Hampton\n* Aletha Stahl\n* Steve Heiny\n* David Stroeh\n* Annie Bandy\n* Ana Cornide\nPlus Neal & Me. We covered :\n!!!Comic Life\nAna talked about Comic Life. She showed some of her student's comics as pdfs. Some folks were puzzled about where the graphics had come from. We talked about the importance of having a pedagogical point behind using this. Also that the students took to it like a duck to water.\n!!!~YouTube\nNeal gave out a couple of hand-outs with instructions about how to convert ~YouTube videos from Flash into ~MP4. Then they can be uploaded into Moodle or played with ~VLC.\nAlternative approaches :\n# Using [[Earlham Learning Spaces|https://blogs.frumentius.earlham.edu]] make a new blog posting and link straight from YouTube - [[instructions|http://www.earlham.edu/markp/LSW/index.html#%5B%5BEmbed%20YouTube%20video%5D%5D]]\n# I need to suss out a Flash player for Moodle & Elgg so that flv files can be uploaded and played automatically.\n!!!Simple Audio Recorder\nNeal demonstrated a simple audio recorder for the Mac. Most folks were quite impressed.\n!Ana wants to do podcasting in Fall semester next academic year!
!!!Thursday, 25 January 2007\nB Welling Hall [07:05 PM]: Hi Mark, I just discovered inadvertently that it is possible to prevent students from seeing comments on an assignment. At least for an online text assignment, if the link is hidden to students, they can't see comments until the link is turned back on. So, in future, at deadline time, I'll turn the link off and then turn it back on when I'm finished grading.\n!!!Friday, 26 January 2007\nMark Pearson [02:11 PM]: I understand what you're saying. Nice idea for a workaround to the issue of all students seeing grrades/comments at the same time.\n\nThanks\n
!! Download code from port\n# {{{cd /usr/ports/databases/phpmyadmin}}}\n# {{{ /usr/ports/databases/phpmyadmin]$ script ~/phpmyadmin-port-install.log\nScript started, output file is /home/markp/phpmyadmin-port-install.log}}}\n# {{{sudo make install clean}}}\n# {{{^D\nScript done, output file is /home/markp/phpmyadmin-port-install.log}}}\n!! Edit httpd.conf\n* It gets installed into // /usr/local/www/phpmyadmin// which is not where Apache would be looking for it. The log suggests to add +++[the following]\nTo make phpMyAdmin available through your web site, I suggest\nthat you add something like the following to httpd.conf:\n{{{\n Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"\n\n <Directory "/usr/local/www/phpMyAdmin/">\n Options none\n AllowOverride Limit\n\n Order Deny,Allow\n Deny from all\n Allow from 127.0.0.1 .example.com\n </Directory>\n}}}\n=== to // /usr/local/etc/apache22/httpd.conf//\n* +++[Actually added:]\n{{{\n# link to phpmyadmin\n Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"\n\n <Directory "/usr/local/www/phpMyAdmin/">\n Options none\n AllowOverride Limit\n\n Order Deny,Allow\n Deny from all\n Allow from 127.0.0.1 rublev.lly.earlham.edu\n </Directory>\n}}}\n=== \n* Restart Apache : {{{sudo apachectl restart}}}\n* I got an access error -- fixed by substituting {{{.earlham.edu}}} for {{{rublev.lly.earlham.edu}}} in the //httpd.conf// above\n!!Install phpmyadmin\n* Using +++[quick install destructions]>\n{{{\n/usr/local/www/phpMyAdmin]$ sudo mkdir config\n$ sudo chmod o+rw config\n$ sudo cp config.inc.php config\n$ sudo chmod o+w config/config.inc.php\n$ sudo chown www:www config\n}}}\n=== in Documentation.txt.\n* Access //phpmyadmin/setup/index.php// +++[warning messages]>\nRuntime Notice in ./libraries/common.inc.php#272\ndate_default_timezone_get() [function.date-default-timezone-get]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead\n\nBacktrace\n\n./libraries/common.inc.php#272: date_default_timezone_get()\n./setup/lib/common.inc.php#18: require_once(./libraries/common.inc.php)\n./setup/index.php#12: require(./setup/lib/common.inc.php)\n\nWarning: Cannot modify header information - headers already sent by (output started at /usr/local/www/phpMyAdmin/libraries/Error.class.php:357) in /usr/local/www/phpMyAdmin/libraries/header_http.inc.php on line 22\n\nWarning: Cannot modify header information - headers already sent by (output started at /usr/local/www/phpMyAdmin/libraries/Error.class.php:357) in /usr/local/www/phpMyAdmin/libraries/header_http.inc.php on line 23\n\nWarning: Cannot modify header information - headers already sent by (output started at /usr/local/www/phpMyAdmin/libraries/Error.class.php:357) in /usr/local/www/phpMyAdmin/libraries/header_http.inc.php on line 24\n\nWarning: Cannot modify header information - headers already sent by (output started at /usr/local/www/phpMyAdmin/libraries/Error.class.php:357) in /usr/local/www/phpMyAdmin/libraries/header_http.inc.php on line 25\n\nWarning: Cannot modify header information - headers already sent by (output started at /usr/local/www/phpMyAdmin/libraries/Error.class.php:357) in /usr/local/www/phpMyAdmin/libraries/header_http.inc.php on line 28\n=== \n* complete installation +++[with]\n{{{\n$ sudo mv config/config.inc.php . # move file to current directory\n$ sudo chmod o-rw config.inc.php # remove world read and write permissions\n}}}\n=== \n* ''this works!''\n
The [[Coleg Gwent Moodle|http://moodle.coleggwent.ac.uk/]] has an impressive [[Visitors Centre|http://moodle.coleggwent.ac.uk/course/view.php?id=58&topic=4]] accessible without logging in (though you do have to agree to Terms and Conditions). All the modules/blocks are working with v1.7. Here are some screenshots:\n* [[blocks & modules|graphics/gwent_block_modules.png]]<<imagebox>> with links to the downloadable code!\n** Alton College's [[online resources block|Moodle blocks: Online Resources]]\n** HSU Course Menu\n** Live Stats block\n** HSU's [[MyFiles|Moodle modules : MyFiles]]\n** Book\n** JPG Slideshow\n** Feedback -- a simpler version of Questionnaire\n* [[Code modifications|graphics/gwent_code_mods.png]]<<imagebox>> used\n* [[Maintenance scripts|graphics/gwent_maintenance_scripts.png]]<<imagebox>>\n** [[Category sorter sauce|modules/sortcats.php ]]\n* Moodle on Mobile Phones -- tip to tweak Moodle not to use session cookies with Opera Mini browser\n* [[Rotating images|http://moodle.coleggwent.ac.uk/course/view.php?id=58&topic=9]] with an embedded iframe inside Moodle.\n\n\n
Randy Schultz came over and helped.\n* use ''custom install''\n* Disk partitions:\n|swap| 4Gb| |\n|/var| 30G|UFS2+S|\n|/| 199G|UFS2+s|\nThe ''+S'' means that "soft updates" are used which apparently improves cache handling.\n* Custom Distro\n* Startup service : accounting ON\n* add a group admin and user markp\n* compile (with {{{make install}}}) ports sudo, bash and ezjail\n!!To Do Friday\nList hostnames:\n* Sergius attach to port 1\n* Rublev attach to port 2\nApps to install:\n* APache (with mod-rewrite, mod_python, etc)\n* PhP 5 (get list of +++[desired extensions]\n*dom\n*exif\n*gd\n*iconv\n* json\n* ldap\n* lib_xml\n* mbstring\n* mime_magic\n* mysql\n* mysqli\n* openssl\n* PDO\n* pdo_mysql\n* session\n* simpleXML\n* soap\n* SPL\n* tokenizer\n* wddx\n* xml\n* xmlreader\n* xmlwriter\n* ctype\n* zip\n* zlib\n!!!Additions:\n* curl\n* postgres\n* xmlrpc\n===\n\n* MySQL\n* Postgres\n* MySQLadmin\n* phpmyadmin\n* equivalents for postgres.\n* Python\n\n(find some IP addresses to relinquish)
The power went off over the weekend so both my servers went down. Boo hoo!\nLocations:\n|Apache|{{{/usr/local/etc/apache22}}} |\n|web root|{{{/usr/local/www/apache22/data}}} |\n|ports |{{{/usr/ports}}}|\n|php 5 |{{{/usr/ports/lang/php5}}}|\n\n
Mysql not starting up on Barnanbas:\nProblem:\n{{{\nmarkp@Barnabas:/etc/init.d$ sudo mysql start\nPassword:\nERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)\n}}}\n+++[Fix:]\n Re: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'\nHi you just have to create the socket file\n\nCreate the directory if it is not there:\nCode:\n\nsudo mkdir /var/run/mysqld/\n\ntouch the file to create it\nCode:\n\nsudo touch /var/run/mysqld/mysqld.sock\n\nchange the ownership of the folder and socket to the mysql user\nCode:\n\nsudo chown mysql /var/run/mysqld/\n\nCode:\n\nsudo chown mysql /var/run/mysqld/mysqld.sock\n\n\nstart the mysql server\nCode:\n\nsudo mysqld\n\nand see if it works\n\nThat should do the trick..... well it worked for me \n===\n{{{\nmarkp@Barnabas:/etc$ cd /var/run/mysqld/\nmarkp@Barnabas:/var/run/mysqld$ sudo touch mysqld.sock\nmarkp@Barnabas:/var/run/mysqld$ sudo chown mysql mysqld.sock\nmarkp@Barnabas:/var/run/mysqld$ cd /etc/init.d/\nmarkp@Barnabas:/etc/init.d$ sudo ./mysql start\n * Starting MySQL database server mysqld [ OK ]\n * Checking for corrupt, not cleanly closed and upgrade needing tables.\n}}}\n\n
!!Already installed:\n* sudo\n* bash\n* Apache 2.2\n\nUpdate on what I'm doing today.\n* changed default shell in passwd file to /usr/local/bin/bash for both Sergius and Rublev\n* added group 'admins' to sudoers file on both platforms.\n* compile vim(7) with {{{ /usr/ports/editors/vim$ sudo make install clean }}}. Creates vim 7.2.69. +++[SECURITY NOTE:]>\nThe VIM software has had several remote vulnerabilities discovered within VIM's modeline support. It allowed remote attackers to execute arbitrary code as the user running VIM. All known problems have been fixed, but the FreeBSD Security Team advises that VIM users use {{{set nomodeline}}} in ~/.vimrc to avoid the possibility of trojaned text files.\n===\n\n* ~PhP 5 version 5.2.5 in {{{/usr/ports/lang/php5}}} . +++[Options ]>\n* Build Apache module\n* Enable Debug\n* disable CGI stuff (Build CGI,Fastcgi, pathinfo)\n* disable Suhosin (not for jails)\n===\n\n* ~PhP Extensions added {{{/usr/ports/php5-extensions}}}. +++[List:]>\n* BCMATH=off (default) "bc style precision math functions"\n* BZ2=off (default) "bzip2 library support"\n* CALENDAR=off (default) "calendar conversion support"\n* CTYPE=on (default) "ctype functions"\n* CURL=off (default) "CURL support"\n* DBA=off (default) "dba support"\n DBASE=off (default) "dBase library support"\n* DOM=on (default) "DOM support"\n* EXIF=off (default) "EXIF support"\n* FILEINFO=off (default) "fileinfo support"\n* FILTER=on (default) "input filter support"\n FRIBIDI=off (default) "FriBidi support"\n* FTP=off (default) "FTP support"\n* GD=off (default) "GD library support"\n* GETTEXT=off (default) "gettext library support"\n* GMP=off (default) "GNU MP support"\n* HASH=on (default) "HASH Message Digest Framework"\n* ICONV=on (default) "iconv support"\n IMAP=off (default) "IMAP support"\n INTERBASE=off (default) "Interbase 6 database support (Firebird)"\n* JSON=on (default) "JavaScript Object Serialization support"\n* LDAP=off (default) "OpenLDAP support"\n* MBSTRING=off (default) "multibyte string support"\n* MCRYPT=off (default) "Encryption support"\n* MHASH=off (default) "Crypto-hashing support"\n* MING=off (default) "ming shockwave flash support"\n MSSQL=off (default) "MS-SQL database support"\n* MYSQL=off (default) "MySQL database support"\n* MYSQLI=off (default) "MySQLi database support"\n NCURSES=off (default) "ncurses support (CLI only)"\n* ODBC=off (default) "unixODBC support"\n* OPENSSL=off (default) "OpenSSL support"\n* PCNTL=off (default) "pcntl support (CLI only)"\n* PDF=off (default) "PDFlib support (implies GD)"\n* PDO=on (default) "PHP Data Objects Interface (PDO)"\n* PDO_SQLITE=on (default) "PDO sqlite driver"\n* PGSQL=off (default) "PostgreSQL database support"\n* POSIX=on (default) "POSIX-like functions"\n* PSPELL=off (default) "pspell support"\n READLINE=off (default) "readline support (CLI only)"\n RECODE=off (default) "recode support"\n* SESSION=on (default) "session support"\n SHMOP=off (default) "shmop support"\n* SIMPLEXML=on (default) "simplexml support"\n* SNMP=off (default) "SNMP support"\n* SOAP=off (default) "SOAP support"\n* SOCKETS=off (default) "sockets support"\n* SPL=on (default) "Standard PHP Library"\n* SQLITE=on (default) "sqlite support"\n SYBASE_CT=off (default) "Sybase database support"\n SYSVMSG=off (default) "System V message support"\n SYSVSEM=off (default) "System V semaphore support"\n SYSVSHM=off (default) "System V shared memory support"\n* TIDY=off (default) "TIDY support"\n* TOKENIZER=on (default) "tokenizer support"\n* WDDX=off (default) "WDDX support (implies XML)"\n* XML=on (default) "XML support"\n* XMLREADER=on (default) "XMLReader support"\n* XMLRPC=off (default) "XMLRPC-EPI support"\n* XMLWRITER=on (default) "XMLWriter support"\n* XSL=off (default) "XSL support (Implies DOM)"\n YAZ=off (default) "YAZ support (ANSI/NISO Z39.50)"\n* ZIP=off (default) "ZIP support"\n* ZLIB=off (default) "ZLIB support"\n===\n\n!!To Install\nuse {{{sudo make install clean}}\n* [[Python|http://www.freshports.org/lang/python/]]\n* [[MySQL|http://www.freshports.org/databases/mysql50-server/]] version 5.1 won't install +++[error message]>\n==> mysql-server-5.1.30 cannot install: MySQL versions mismatch: mysql50-client is installed and wanted version is mysql51-client.\n=== so install 5.0.75 instead\n* [[Postgres|http://www.freshports.org/databases/postgresql82-server/]] postgresql 8.2.11 installed (to match client install)\n* ~MySQLAdmin\n* ~PHPMyAdmin\n* ~PHPpgAdmin\n
Ana Cornide (Spanish) wants to do blogging with her [[SPAN352:200810 - Hispanic Short Story|https://moodle.earlham.edu/course/view.php?id=357]] class. There are 14 students in the class and we'll add the names manually.\n* She's having them view a film and then make comments in their blog. Also add comments to other's blogs.\n* All students should add each other as Friends, then it's easy to access their blog\n## Search : People - type in second name : Go\n## Name should come up in ''Matched users and communities''\n## click on name\n## click //Click here to add this user as a friend.//\n## To approve go to //Your Network// , click //Friendship requests// and approve.\n* assignment entered into moodle, student responses into blog\n!!To be Sussed\n* Tagging. Get students to tag with the name of the film. ? Can you get an RSS feed for that tag?\n** Tagging plugin. What does it do?\n* Spanish keyboard. How to use on Mac
Try to run {{{mysql}}} I get the error:\n{{{\nERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)\n}}}\nAlso:\n{{{\n[markp@sergius /usr/local/etc/rc.d]$ mysql --print-defaults\nmysql would have been started with the following arguments:\n}}}\nSo it's starting with ''no'' defaults. Wrong!\n\nFrom [[Ubuntu forums|http://ubuntuforums.org/archive/index.php/t-312460.html]] +++[Some hints]>\nmcclimont\nDecember 6th, 2006, 07:40 PM\nI'm also having this same problem.\n\nThe version of mysql client/server i have installed is 5.0.21-3ubuntu1.\n\nI've found that although the server runs correctly, the clients do not.\n\nWith further exploration, i found that the settings used by the server (using the --print-defaults flag) are correct, but the mysql client does not have any of these defaults.\n{{{\n# mysqld --print-defaults\nmysqld would have been started with the following arguments:\n--user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --language=/usr/share/mysql/english --skip-external-locking --old_passwords=1 --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=128K --query_cache_limit=1048576 --query_cache_size=16777216 --query_cache_type=1 --log-bin=/var/log/mysql/mysql-bin.log --expire-logs-days=20 --max_binlog_size=104857600 --skip-bdb --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --language=/usr/share/mysql/english --skip-external-locking --old_passwords=1 --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=128K --query_cache_limit=1048576 --query_cache_size=16777216 --query_cache_type=1 --log-bin=/var/log/mysql/mysql-bin.log --expire-logs-days=20 --max_binlog_size=104857600 --skip-bdb\n}}}\n\n# mysql --print-defaults\nmysql would have been started with the following arguments:\n(none)\n\nSo, i start the server again, getting the failed output on mysqlcheck which is run on startup.\n\n# /etc/init.d/mysql start\nStarting MySQL database server: mysqld.\n# /usr/bin/mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect\nAs expected, the mysql client fails to start too.\n\n# mysql\nERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)\n\nUntil i specify the socket to use!\n\n# mysql --socket=/var/run/mysqld/mysqld.sock\nWelcome to the MySQL monitor. Commands end with ; or \sg.\nYour MySQL connection id is 6 to server version: 5.0.21-Debian_3ubuntu1-log\n\nType 'help;' or '\sh' for help. Type '\sc' to clear the buffer.\n\nmysql>\n\nNow this should prove that mysqld is running fine, but that the defaults mysql and other clients need to connect to mysqld just are not there (as shown with --print-defaults)\n\nMy configuration file is still the default, and the client section does have the correct path to mysqld.sock file.\n\nThis raises the questions:\n* Why are the defaults not there for the clients?\n* Is this in error with this build of mysql client?\n* How do i fix this?\n\n\nAnyone have any thoughts?\nkdiebold\nJuly 31st, 2007, 12:32 PM\nOn Dapper (at least on my install), the problem is that the clients (mysql and mysqladmin) were looking for /etc/my.cnf instead of /etc/mysql/my.cnf. Seems like a compile-time bug in the package.\n\nEasiest fix is:\nsudo ln -s /etc/mysql/my.cnf /etc/my.cnf\n===\n\n!!Mysql startup\nLooking at [[Starting and Stopping MySQL Automatically|http://dev.mysql.com/doc/refman/5.0/en/automatic-start.html]] and [[2.17.2.3. Starting and Troubleshooting the MySQL Server|http://dev.mysql.com/doc/refman/5.0/en/starting-server.html]].\nTry running +++[mysqld_safe]\n{{{\n[markp@sergius /usr/local/etc/rc.d]$ sudo mysqld_safe\nPassword:\ntouch: /var/db/mysql/sergius.lly.err: No such file or directory\nchown: /var/db/mysql/sergius.lly.err: No such file or directory\nStarting mysqld daemon with databases from /var/db/mysql\n/usr/local/bin/mysqld_safe: cannot create /var/db/mysql/sergius.lly.err: No such file or directory\n/usr/local/bin/mysqld_safe: cannot create /var/db/mysql/sergius.lly.err: No such file or directory\nSTOPPING server from pid file /var/db/mysql/sergius.lly.pid\ntee: /var/db/mysql/sergius.lly.err: No such file or directory\n090108 20:08:48 mysqld ended\ntee: /var/db/mysql/sergius.lly.err: No such file or directory\n}}}\n===\nAdd {{{mysql_enable="YES"}}} to /etc/rc.conf\nThen:\n{{{[markp@sergius /usr/local/etc/rc.d]$ sudo ./mysql-server start}}}\n<<<\n090108 20:51:55 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295\n090108 20:51:55 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295\n090108 20:51:55 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295\n090108 20:51:55 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295\nStarting mysql.\n<<<\nand this did it:\n<<<\n{{{\nps -ax | grep mysql\n98745 p0 IJ 0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf \n--user=mysql --datadir=/var/db/mysql --pid-file=/var/db/mysql/sergius.lly.pid\n98765 p0 IJ 0:00.17 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local\n --datadir=/var/db/mysql --user=mysql --pid-file=/var/db/mysql/sergius.lly\n}}}\n<<<\nFrom [[2.17.3. Securing the Initial MySQL Accounts|http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html]] Set root password:\n{{{\n$ mysql -u root\nmysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('************');\nmysql> SET PASSWORD FOR 'root'@'sergius.lly'=PASSWORD('***********');\n\n}}}\nnow access with {{{mysql -u root -p }}}
!!Starting up apps\nContents of /usr/local/etc/rc.d:\n<<<\n{{{\n[markp@sergius /usr/local/etc/rc.d]$ ls -l\ntotal 16\n-r-xr-xr-x 1 root wheel 5551 Jan 2 23:01 apache22\n-r-xr-xr-x 1 root wheel 1731 Jan 2 23:01 htcacheclean\n-r-xr-xr-x 1 root wheel 1664 Jan 8 15:17 mysql-server\n-r-xr-xr-x 1 root wheel 1762 Jan 8 15:04 postgresql\n-r-xr-xr-x 1 root wheel 1788 Jan 7 21:07 snmpd\n-r-xr-xr-x 1 root wheel 813 Jan 7 21:07 snmptrapd\n}}}\n<<<\nAlthough mysql-server will startup with {{{sudo ./mysql-server start}}} (see [[8 January 2009 -- Mysql not operating]] postgres and apache22 do not seem to startup in this way. (tried it and {{{ps -ax}}} shows their process not running)\n
4625
!Proposal\nWorking group to consult with and advise Instructional Technologist in the following areas:\n# Directions for I.T innovations. Including :\n** Moodle -- new features, modules, blocks. What's needed, what's not. Priority for implementation.\n** Moodle -- integration with enterprise systems -- CMS/Portal. Auto enrollment and course creation processes.\n** Blogging -- blogging within Moodle, replacement blogging system with podcasting support, commercial blogging services (Blogger, Typepad)\n** Podcasting -- tied in with blogging. \n# Faculty needs and aspirations with Instructional Technology. What do faculty want and when?\n# Assessment. How well are we providing Instruct Tech services? In what ways can we (I) do better?\n\n!!Possible Composition\n* Instructional Technologist-Librarian (1)\n* Librarian (1-2)\n* ECS System Manager (1) -- what's feasible and what's not.\n* Teaching Faculty (2-3)\n* Students (2)\n\n
This is just too easy. After all the hassles I had with OS X server, this is a doddle ....\nSo, GD is not present in the default php 5 setup. I google for "php GD ubuntu" click on the [[first link|http://ubuntuforums.org/showthread.php?t=252842]] to Ubuntu forums and read:\n{{{sudo apt-get install php5-gd}}}\nthen\n{{{sudo apache2ctl restart}}}\nand it worketh!\nThis is really too easy!! But I can handle it.\n\n----\n\n
Unfortunatley Apache2 on Ubuntu server v7.04 'fiesty fawn' does not come with mod-rewrite empowered. Since GIMF I found [[these destructions|http://blog.estebanglas.com.ar/2007/06/activating-mod_rewrite-on-apache-ubuntu/]] which I followed:\n* Add a loader to mod_rewrite module:\nExecute (on the shell): {{{sudo a2enmod rewrite}}}\n* Edit the apache2.conf by adding a call:\n<<<\nOn ubuntu this file usually sits on: /etc/apache2/apache2.conf\n{{{<IfModule mod_rewrite.c>}}}\n{{{RewriteEngine On}}}\n{{{</IfModule>}}}\n<<<\n* Edit the virtual host file:\n<<<\nTo know what hosts are enabled take a look at: {{{/etc/apache2/sites-enabled/}}}\n{{{$ ls -l /etc/apache2/sites-enabled/}}}\n{{{lrwxrwxrwx 1 root root 36 2007-07-10 11:39 000-default -> /etc/apache2/sites-available/default}}}\nThere you’ll see a simlink to some file(s) sitting at: {{{/etc/apache2/sites-available/}}}\nwhich you’ll have to edit. You need to add the permissions for your directorie(s):\n{{{<Directory />}}}\n{{{Options FollowSymLinks}}}\n{{{AllowOverride All}}}\n{{{</Directory>}}}\n<<<\n* Restart your Apache:\n>> {{{sudo /etc/init.d/apache2 force-reload}}}\n\n
use {{{$ adduser }}} and {{{adduser --system}}} It's easy.\n\n!!Issues with 'adduser'\nThe whole process of creating a user account on Ubuntu is bizarre to say the least. Here are some lessons I learned:\n# the user's home directory does ''not'' get created by default unless you use the ''-m'' option\n# the ''-D'' option doesn't update the user's defaults. No, this is for updating the system default settings!\n# the password supplied with the ''-p'' option has to be the //encrypted// password. Needless to say, the crypt utility is not installed by default on Ubuntu (neither is mcrypt)\n** To install it use {{{sudo apt-get install mcrypt}}} but then you get:\n<<<\nMedia change: please insert the disc labeled\n '~Ubuntu-Server 7.04 _Feisty Fawn_ - Release i386 (20070415)'\nin the drive '/cdrom/' and press enter\nAGGGGGGGG!\n<<<\nTo generate the encrypted password I used [[UNIX crypt(3) encryption|http://javascript.internet.com/passwords/unix-crypt(3)-encryption.html]] online service with no 'salt' (click Cancel).\n\nFound a whole bunch of additional user commands with {{{apropos user}}} (thanks Dylan!) which include ''usermod'' to modify a user account.\n\n----\n\n
Useful but slightly dated guide for installing [[apache+ssl, php and mysql| http://www.bsdguides.org/guides/freebsd/webserver/apache_ssl_php_mysql.php]] on FreeBSD\n!!Notes\n+++[Apache 22 changes]\n{{{\ncd /usr/ports/www/apache22\nmake install clean\necho 'apache22_enable="YES"' >> /etc/rc.conf\necho 'apache22_flags="-DSSL"' >> /etc/rc.conf\nmkdir /usr/local/etc/apache22/ssl.key\nmkdir /usr/local/etc/apache22/ssl.crt\nchmod 0700 /usr/local/etc/apache22/ssl.key\nchmod 0700 /usr/local/etc/apache22/ssl.crt\n}}}\n===\n\nEdit +++[httpd.conf]\n{{{\n/usr/local/etc/apache22/httpd.conf\n}}}\n<<<\n{{{\nAddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps\n}}}\n<<<\n===\n\n!!Changes to httpd.conf\n# Virtual Hosts\n{{{\n1. Virtual hosts\n# Include etc/apache22/extra/httpd-vhosts.conf\n}}}\nchange to {{{extra/httpd-vhosts.conf}}} since 'extra' is in the same directory as httpd.conf\n2. enable index.php :\n{{{\n# DirectoryIndex: sets the file that Apache will serve if a directory\n# is requested.\n#\n<IfModule dir_module>\n DirectoryIndex index.html index.php\n</IfModule>\n}}}\nand change to {{{DirectoryIndex index.html index.php}}} to add index.php to default execution\n3. add +++[moodle stuff]>\n{{{\n# 8/24/07\n# Turn on the AcceptPathInfo variable, which allows scripts to be passed\n# arguments like http://server/file.php/arg1/arg2. This is essential to allow\n# relative links between your resources, and also provides a performance boost\n# for people using your Moodle web site.\n\nAcceptPathInfo on\n}}}\n===\n\n4. Realisation that there are problems here. +++[email to Aaron]>\nI don't don't whether apache 2.2 is configured the same way on your production boxes but I've discovered some strange potential bugs in the httpd.conf.\nI've compiled Apache 2.2 from the ports and the default location seems to be /usr/local/etc/apache22 and the httpd.conf is within this directory.\nBut there are loads of *relative* paths within the httpd.conf which will fail :\n\n> [markp@rublev /usr/local/etc/apache22]$ grep etc/apache22 httpd.conf\n> TypesConfig etc/apache22/mime.types\n> #MIMEMagicFile etc/apache22/magic\n> # The configuration files in the etc/apache22/extra/ directory can be\n> #Include etc/apache22/extra/httpd-mpm.conf\n> #Include etc/apache22/extra/httpd-multilang-errordoc.conf\n> #Include etc/apache22/extra/httpd-autoindex.conf\n> #Include etc/apache22/extra/httpd-languages.conf\n> #Include etc/apache22/extra/httpd-userdir.conf\n> #Include etc/apache22/extra/httpd-info.conf\n> #Include etc/apache22/extra/httpd-vhosts.conf\n> #Include etc/apache22/extra/httpd-manual.conf\n> #Include etc/apache22/extra/httpd-dav.conf\n> #Include etc/apache22/extra/httpd-default.conf\n> #Include etc/apache22/extra/httpd-ssl.conf\n> include /usr/local/etc/apache22/Includes/*.conf\nSo the default configuration would not render mime types correctly because it would not pick up the mime.types file. I've already changed the location for vhosts and then I checked a wee bit further and found all these ...\n===\n\n5. +++[fixed path issues]>\n{{{\n# The configuration files in the etc/apache22/extra/ directory can be\n# included to add extra features or to modify the default configuration of\n# the server, or you may simply copy their contents here and change as\n# necessary.\n\n# Server-pool management (MPM specific)\n#Include etc/apache22/extra/httpd-mpm.conf\n\n# Multi-language error messages\n#Include etc/apache22/extra/httpd-multilang-errordoc.conf\n\n# Fancy directory listings\nInclude /usr/local/etc/apache22/extra/httpd-autoindex.conf\n\n# Language settings\nInclude /usr/local/etc/apache22/extra/httpd-languages.conf\n\n# User home directories\nInclude /usr/local/etc/apache22/extra/httpd-userdir.conf\n\n# Real-time info on requests and configuration\nInclude /usr/local/etc/apache22/extra/httpd-info.conf\n\n# Virtual hosts\nInclude /usr/local/etc/apache22/extra/httpd-vhosts.conf\n\n# Local access to the Apache HTTP Server Manual\nInclude /usr/local/etc/apache22/extra/httpd-manual.conf\n\n# Distributed authoring and versioning (WebDAV)\n#Include etc/apache22/extra/httpd-dav.conf\n\n# Various default settings\nInclude /usr/local/etc/apache22/extra/httpd-default.conf\n\n# Secure (SSL/TLS) connections\n#Include etc/apache22/extra/httpd-ssl.conf\n}}}\n=== \n\n!!!Issues\nErrors on apache restart +++[errors]\n{{{\n[Thu Feb 12 20:43:49 2009] [notice] SIGHUP received. Attempting to restart\nWarning: DocumentRoot [/usr/local/docs/dummy-host.example.com] does not exist\nWarning: DocumentRoot [/usr/local/docs/dummy-host2.example.com] does not exist\n[Thu Feb 12 20:43:49 2009] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter\n[Thu Feb 12 20:43:50 2009] [notice] Digest: generating secret for digest authentication ...\n[Thu Feb 12 20:43:50 2009] [notice] Digest: done\n[Thu Feb 12 20:43:50 2009] [notice] Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.8e DAV/2 PHP/5.2.8 configured -- resuming normal operations\n}}}\n===\nand trying to access http://rublev.lly.earlham.edu/moo-cat/index.php gives:\n{{{\nForbidden\nYou don't have permission to access /moo-cat/index.php on this server.\n}}}\nProblem was dummy vhosts. Sussed by {{{sudo mv httpd-vhosts.conf httpd-vhosts.conf.org }}} and then create a blank httpd-vhosts.conf\n!!To Do\nCopy httpd.conf to sergius\nRestart Apache: {{{sudo /usr/local/sbin/apachectl restart}}}\nDefault data location : {{{/usr/local/www/apache22/data}}}\n\n
Alison Pope (RHUL) tells me that the following apps already use CAS:\n* Ex Libris/ Metalib\n* SFX\n* Aleph\n* phpBB\nNote that the first three are all Library Apps
!!Problems with playing MP3s\nWe've noticed in the past that the Moodle Flash player (and the stand alone flash player) can't handle MP3s encoded at bit rates less than 128kbps. This is a pain because often we don't need 128 and 64 will do.
!!ELS backup system\nRandy Schulz was kind enough to do me some scripts (located in /home/markp/backup_scripts):\n* +++[Daily]>\n<html><pre>\n#!/bin/sh\n\n# this is the daily backup routine for guinness markp's elgg schtuff.\n#\n# - 20071219 schulra\n\nPATH=/usr/bin:/bin\n\nBASEDIR="/home/markp"\nBACKUPDIR="/home/markp/elggbackups"\nCODEDIR="/var/www/blogs"\nDATADIR="/var/elgg_data"\n\nDAY=`date +%d`\n\nmysqldump -u elggbackup -pelggbackup -CQe elgg \s\n | bzip2 -9 > $BACKUPDIR/elgg_dba-backup.$DAY.sql.bz2\n</pre></html>=== backs up the database every day.\n* +++[Weekly]>\n<html><pre>\n#!/bin/sh\n\n# this is the weekly backup routine for guinness markp's elgg schtuff. it\n# needs to be, and assumes it is, run on days 7,14,21,28. Many nasty\n# and horrible things may result if it is not: comets smashing into the\n# earth, rivers burning, locusts, flies, cats and dogs living together.\n# You've been warned. ;> On a serious note, if this isn't run on one of\n# the specified days, the WOM global may be incorrect as it is generated\n# via the integer division of %d / 7. More succinctly, there will be an\n# off-by-1 condition.\n#\n# - 20071219 schulra\n\nBASEDIR="/home/markp"\nBACKUPDIR="/home/markp/elggbackups"\nCODEDIR="/var/www/blogs"\nDATADIR="/var/elgg_data"\n\n# generate the week of the month\nDOM=`date +%d`\nWOM=$(($DOM/7))\n\ncd $BASEDIR\n\ntar --exclude-from /var/elgg_excludes.txt --use-compress-program bzip2 -cf \s\n $BACKUPDIR/elgg_data_$WOM.tgz $DATADIR\n</pre></html>=== backs up the data directory every 7th day\n* +++[Monthly]>\n<html><pre>\n#!/bin/sh\n\n# this is the monthly backup routine for guinness markp's elgg schtuff.\n#\n# - 20071219 schulra\n\nBASEDIR="/home/markp"\nBACKUPDIR="/home/markp/elggbackups"\nCODEDIR="/var/www/elgg"\nDATADIR="/var/elgg_data"\n\nMO=`date +%m`\n\ncd $BASEDIR\n\n# nearly everything in here should be compressed (?) so there's little to gain\n# by compressing again\ntar -cf elggbackup_$MO.tar $BACKUPDIR\nrm -rf $BACKUPDIR/*\n</pre></html>=== tars up the contents of the elgg_backup dir and deletes what's in it. Then I just move this file off site.\n* The +++[crontab]>\n<html><pre>\n$ crontab -l\n# m h dom mon dow command\n# run monthly accumulate into tarball before starting the daily at 12\n0 0 1 * * /home/markp/backup_scripts/monthly\n# run daily database backup at 12:30\n30 0 * * * /home/markp/backup_scripts/daily\n# run weekly data backup at 1 am\n0 1 7 * * /home/markp/backup_scripts/weekly\n0 1 14 * * /home/markp/backup_scripts/weekly\n0 1 21 * * /home/markp/backup_scripts/weekly\n0 1 28 * * /home/markp/backup_scripts/weekly\n</pre></html>=== runs the //monthly// script on the first of the month before anything else to clear out the backup dir. Then the //daily// script runs every day and then on successive 7th days the //weekly// is run. Thus at the end of the month we should get 30 or so daily database backups and 4 weekly data backups. These are tarred up into the monthly one.\nI should make sure that the monthly script completes before starting the daily, but I'm not sure how to do that.\n
Since Elgg is now going to be used for at least two classes (ref) I need to make sure that the database and the data uploads are backed up on a regular basis:\n# Create backup user with read only access (& lock tables) {{{ GRANT SELECT,LOCK TABLES on elgg.* TO elggbackup@localhost IDENTIFIED BY 'elggbackup';}}}\n# Backup the database : run mysqldump {{{mysqldump -u elggbackup -p -C -Q -e elgg >/home/markp/elggbackups/elgg_dba-backup.sql}}}\n# Backup the data directory : {{{tar --exclude-from /var/elgg_excludes.txt -czf elgg_data.tgz /var/elgg_data}}} +++[elgg_excludes.txt]>\nsessions/*\ncache/*\n===\n\n# roll into single cron job and create daily backups in separate files. Overwrite every week.\n|!Date|!Database|!Size|!Data|!Size|!Comments|\n|10-29-2007|elgg_dba-backup.sql.4|1.8Mb|elgg_data.4.tgz| | |\n|11-13-2007|elgg_dba-backup.sql.5|2.0Mb|elgg_data.5.tgz|43Mb|last backup before markpea account deleted|\n|11-30-2007|elgg_dba-backup.sql.7|2.0Mb|elgg_data.7.tgz|8.3Mb|3 big MP3 files from markp are gone|\n|12-07-2007|elgg_dba-backup.sql.9|1.6Mb|elgg_data.9.tgz|12Mb| |\n\nnew backup string : {{{mysqldump -u elggbackup -pelggbackup -CQe elgg | gzip >elgg_dba-backup.12.sql.gz}}}
!!Archive Jail\nWith the heat problem in the server room a month or so ago the MTBF for the main disk drive will have been reduced (Randy S confirmed this diagnosis). So need to do a backup of the Jails. Here's how:\n# log in to frumentius\n# Stop both jails {{{[markp@frumentius ~]$ sudo /usr/local/etc/rc.d/ezjail.sh stop}}}\n# Use ezjail-admin to backup {{{ sudo ezjail-admin archive rublev}}}\n# FTP or SCP to desktop. Problem: ~FireFTP has limit of 2Gb transfer. Putty FTP seems to work. Alternative is to use scp via Barsanuphius.\n** {{{C:\sProgram Files\sPuTTY>pscp markp@frumentius.lly.earlham.edu:rublev-200903090954.53.tar.gz "K:\sFrumentius Jails"}}}\n# restart Jail. Can do this while FTP runs. {{{sudo /usr/local/etc/rc.d/ezjail.sh start}}}\n----\n|!Jail Archive|!Date|!File|!Off-server?|\n|sergius| Mar-05|sergius-200903051053.30.tar.gz|Backup(K:)/Frumentius Jails|\n|rublev| Apr-01|rublev-200904011036.17.tar.gz| ditto |\n\n
Faculty wanting to use blogs / podcasting next semester (Jan 07):\n* Yasumi Kuriya : Japanese social s/w site. Use Skype for conversations. Record and publish as podcasts?\n* Chisato : Students blog instead of construct web site\n* Meg Streepy : Students blogging and podcasting\n* Aletha Stahl : Haitian Site -- FordKight? Mediawiki? Interested in Podcasting / blogging. Talk mid-Dec\n!!To Do\n* Install WPMU on Macarius\n* Test podcasting module\n* Suss out EC or hosted solution for blog\n* headphones for Skype / podcasting.
Email to Dan Terrio at NITLE email list:\n<<<\nWe are currently using an obsolete version of Movable Type, v2.6, and I am pushing to move to something new. The problem is that the new M.T (v3.2 I think) would cost us about $1,000 (last time I checked) and I really interested in having a system that handles podcasting well.\n\nI've blogged some useful links for blog comparisons and info about Wordpress, M.T , TextPattern and Drupal in my IT blog: http://www.earlham.edu/~markp/it/archives/006191.html <http://www.earlham.edu/%7Emarkp/it/archives/006191.html> The accent for us at Earlham is Open Source solutions.\n\nI'm looking for a blogging system that will handle both photo gallery & podcasts. Wordpress has a fantastic podcast plugin (see above link) but it's achilles heel is that it is a single user blog only. The code resides in user space rather than server space. This makes it out of the question for education use since we wouldn't want everyone to be running blog php & database code in their own user accounts!\n\nFrom my researches I am pursuing the Drupal http://drupal.org/ option. There is now a module providing integration with the popular Gallery 2 http://gallery.menalto.com/ photo album s/w : http://drupal.org/project/gallery\n\nLoudblog http://loudblog.de/ seems to be a slick way of creating and maintaining podcasts and with the Loudbot system http://ektoras.agora.sonnexh.com/cms/index.php?option=com_frontpage&Itemid=1 there is integration with Drupal (as well as other CMS packages such as Mambo, Joomla etc).\n\nSo, right now I'm going to test out Drupal + Loudbot + Loudblog as a total podcasting solution and then see how Gallery 2 may fit in. \n<<<
I started off a discussion thread in the Blogs forum of moodle.org called [[Blogging in Moodle.Role of elgg|http://moodle.org/mod/forum/discuss.php?d=65777#299242]]. \nHere are are initial thoughts and a nicely thought out proposal from Michael Penney.\n\n<<faqlist bytag MBA title hr>>\nWhat should be our response?\n* offer to mentor?\n* offer to collaborate (already done)?\n* MP has considerable Moodle programming experience under his belt so collaboration would be rather asymmetrical.\n
[[Alison Pope's Diigo bookmarks tagged with cas|http://www.diigo.com/user/Ajp-diigo/cas?page_num=1&sort_by=2]]
!![[CAS|Central Authentication Service (CAS)]] in Moodle\n* Here's what happens when a non-authenticated user visits an application which has been modified with CAS, for example, Moodle : [[Scenario 1|graphics/CAS scenario1.png]]<<imagebox>>\n* If a user is already authenticated with CAS, here's what happens when he visits Moodle: [[Scenario 2|graphics/CAS scenario2.png]]<<imagebox>>\n\nIn our current production version of Moodle (1.6.3+) an authentication method is present called "Use a CAS server (SSO)" (in Administration >> Users >> Authentication). This basically looks up the user on the CAS server (which must therefore do the authentication -- with LDAP in our case) and can create a new user record in Moodle if not already present. Obviously we would need a CAS server with LDAP to implement this.\n!!!The bad news\n# The entry [[Use a CAS server (SSO)|http://docs.moodle.org/en/auth/cas]] in ~MoodleDocs has no meaningful content. \n# New entry [8th March 07] in Moodle tracker entitled [[The CAS authentification don't work|http://tracker.moodle.org/browse/MDL-8813]] with the comment:\n<<<\nYes - it is caused by its non-standard implementation - it duplicated a lot of code from other places.\nIt needs cleanup and some rewriting to make it work properly :-( \n<<<\nHere's an [[older conversation|http://moodle.org/mod/forum/discuss.php?d=18179]] about CAS and SSO for Moodle from 05.
* make a directory for your cvs checkout. call it whatever you want.\n* To connect and login for the first time to the CVS server, you can use this command: {{{cvs -d:pserver:anonymous@cvs.moodle.sourceforge.net:/cvsroot/moodle login}}} . There is no password - when asked for one, just hit Enter.\n* To checkout (download) the entire Moodle code for the first time, use this command: {{{cvs -z3 -d:pserver:anonymous@cvs.moodle.sourceforge.net:/cvsroot/moodle co contrib}}}\n* Later, to update your local copy of Moodle to the current version in CVS you just need to go into your local moodle directory and type:{{{cvs update -dP}}}\n
!!Camtasia & Jing\nhttp://www.jingproject.com/\n\n<<<\nI recorded and edited it with Camtasia Studio, one of the other screen recording tools that TechSmith makes.\nCamtasia Studio is designed for making more professional video tutorials because you have tons of editing, resizing and annotation options, which is why I like using it for these videos.\nVideo capture in Jing on the other hand doesn't have any editing options, but is much faster and easier to use. So when I want to quickly show something or it doesn't need to be polished, I use Jing. \n<<<
Camtasia Studio Pro\nVersion 2.02 Feb 17 2004\n\nRegistered to :\n Mark Pearson\nSerial number:\n 5DB3FBD24BE1613377\n\nSnagIt\nVersion 7.03 Jan 26 2004\n\nRegistered to :\n Mark Pearson\nSerial number:\n BEE66C468854B16FBD \n\n+++[email]>\nI had Camtasia Studio Pro on a old machine running Windows 2000. Details:\nCamtasia Studio Pro\nVersion 2.02 Feb 17 2004\nRegistered to :\nMark Pearson\nSerial number:\n5DB3FBD24BE1613377\n\nSnagIt\nVersion 7.03 Jan 26 2004\nRegistered to :\nMark Pearson\nSerial number:\nBEE66C468854B16FBD\n\nThe thing is that I am now using a new Windows XP box and I'd like to install the Studio Pro Upgrade without having to retro-install the outdated v2.2 and possibly compromise my working environment. Is this possible?\nThanks\nDr M H Pearson \n=== \nsent from [[sales contact page|http://www.techsmith.com/company/contact/salescontact.asp]] on Jan 6th 2009
!Central Authentication Service (CAS)\n!! What is CAS\nCAS is basically a mechanism for achieving [[Single Sign On (SSO)|http://www.ja-sig.org/products/cas/]] between a number of different web applications developed by Yale University and made Open Source. See [[Using CAS at Yale: A Quick Introduction|http://www.yale.edu/tp/auth/usingcasatyale.html]]\n!! How it works (from the Yale site)\n# "First and more importantly, CAS is unlike many familiar authentication systems because it is not simply a password-validation tool. In a traditional environment, your web application will ask users for an ID and a password, and it will then call logic to determine whether this ID/password pair is valid. With CAS, however, your application never gains access to the user's password; to improve systemwide security, users supply their passwords only to the CAS server directly."\n# When you first encounter a new user (e.g., one that has not yet established a session with your application), you'd normally display a username/password form in HTML. With CAS, you don't do this; instead, you simply redirect the browser to CAS's login URL, which is {{{https://secure.its.yale.edu/cas/login}}}\n# CAS then authenticates the user. If authentication fails -- e.g., if the user cannot supply a correct password -- then you'll never hear from the user again. (At least, you won't hear formally through any CAS protocol!) Only if a user succesfully authenticates does that user's browser return to your application. Specifically, the user returns because CAS redirects the browser back to your application. CAS knows how to find your application because when you initially redirected the user to CAS, you supplied a service parameter, in the form {{{https://secure.its.yale.edu/cas/login?service=http://my/url}}}\n# When CAS redirects the authenticated user back to your application, it will append a parameter named ''ticket'' to your URL. For instance, the URL you supplied CAS may be called as follows: {{{http://my/url?ticket=ST-92834-m34Aa83f7a3f}}}\n# The only thing you can do with this ticket is to send it back to CAS, which involves opening an HTTPS connection to {{{https://secure.its.yale.edu/serviceValidate}}} and sending two query parameters: ''service'', which must match the service URL you initially supplied to CAS when redirecting the user there, and ''ticket'', which is the ticket you just received. CAS then responds either with an explicit refutation of this ticket (think "it's not meaningful to me and does not represent a valid user") or an acknowledgement that the ticket proves authentication. In the latter case, CAS also supplies the user's ~NetID so that you know the identity of the user.\n\nNote that this final connection to CAS occurs directly between your application and CAS; your application opens a socket connection and retrieves information from the CAS server. You do not redirect the browser; you speak directly to CAS, effectively closing the loop and completing the authentication process.\n\n* [[diagram of CAS protocol in action|http://www-128.ibm.com/developerworks/web/library/wa-singlesign/figure1.gif]]<<imagebox>> from [[Build and implement a single sign-on solution|http://www-128.ibm.com/developerworks/web/library/wa-singlesign/]]\n* [[CAS resources]]\n
* Updated to [[Tiddlywiki|http://www.tiddlywiki.com/]] v2.0.11 on 8/23/06\n* added Alan Hecht's [[FAQlist|http://www.personal.psu.edu/staff/a/c/ach12/tiddlywiki/extensions.htm#%5B%5BFaqList%20(for%20TW%202.0)%5D%5D]]\n
When the server goes down unexpectedly (as in a recent power outage) it's prudent to check the integrity of the MySQL tables.\n[[Repairing Database Corruption in MySQL|http://www.databasejournal.com/features/mysql/article.php/10897_3300511_1]] is a good resource.\n\nI used {{{mysqlcheck -u <database-username> -p elgg}}} to check all the tables of the Elgg database with the 'MEDIUM' (default) option. This :\n>"Scans rows to check that deleted links are correct, and verifies a calculated checksum for all keys with a calculated a key checksum for the rows."\n\n
/***\n| Name:|CloseOnCancelPlugin|\n| Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|\n| Version:|6.9.3|\n| Date:|30-Sep-2006|\n| Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n***/\n//{{{\nmerge(config.commands.cancelTiddler,{\n\n handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,\n\n handler: function(event,src,title) {\n this.handler_orig_closeUnsaved(event,src,title);\n if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))\n story.closeTiddler(title,true);\n return false;\n }\n\n});\n\n//}}}\n\n
!!Ideas for Moodle projects for NITLE collaboration\n\n* [[Structured Outline / Template]]\n* [[Blogging Activity in Moodle]]\n* [[Enhancements to Assignment]]\n* [[PRS, SMS & Moodle]]\n* [[Music notation Interpreter]]\n
Another approach to Digital Image Management.\n* [[Collective Access|http://www.collectiveaccess.org/index.php?g=about&s=overview]]\n* [[installation|http://trac.collectiveaccess.org/wiki/CollectiveAccessInstallation]] -- the guide is very complete and installation is similar to moodle. Good info about configuring php.ini\n* [[example collection|http://www.coneyislandhistory.org/collection/]]
!Criteria for comparing blogging systems\n\nI'm looking for Open Source php/SQL server based blogging systems that will host student, faculty and class blogs. I'm considering a multiuser ~WordPress derivative [[Lyceum|http://lyceum.ibiblio.org/about/]] together with an interesting FOAF driven blogging engine which crosses Myspace with Blog called [[elgg|http://elgg.org]]\nA great review by [[Blogsavvy|http://blogsavvy.net]] of [[Multi user blog tools|http://blogsavvy.net/multi-user-blog-tools-overall-ratings-and-reviews]] which includes Drupal, elgg and WP MU.\n\n!! Preliminary list of criteria\n!!! User Stuff\n* LDAP support for creating new users\n* User self naming -- anonymity\n* User modified/generated themes / styles ?\n* Ease of management\n* configurable WYSYWG input interface\n\n!!! Features\n* Comments -- moderation\n* SPAM protection\n* Trackbacks\n* RSS feeds\n* Upload files / graphics\n* Static web pages\n* linked wiki\n* support for podcasting\n* plugin modules support\n* support for XMLRPC -- Performancing FF extension\n* [[OpenID|http://openid.net/]] support : [[Wikipedia article|http://en.wikipedia.org/wiki/OpenID]] Microsoft has [[adopted OpenID|http://www.readwriteweb.com/archives/microsoft_openid_five_key_takeaways.php]]\n\n!!! System Issues\n* Ease of Installation / upgrade and configuration. \n* Active User community ?\n* Active Developer community\n* quality of online documentation -- documentation wiki ?\n* quality of codebase (subjective)\n* version number (actual & apparent)\n* frequency of bug fixes / version upgrades\n* Moodle integration -- current situation and potentialities
/***\nJust some bits and pieces\n***/\n//{{{\nconfig.messages.messageClose.text = "X"; // default is "close"\nconfig.views.wikified.defaultText = ""; // default is "The tiddler '%0' doesn't yet exist. Double-click to create it"\nconfig.options.chkHttpReadOnly = false; // Enable editing so that visitors can experiment with it\n//}}}
!!Objective : test out new Moodle 1.8.3 and exercise the census code\n!!!Pre-occuring issues\nWhen Aaron and I were testing out the fix to the database crash on Sula recently we restored what we thought was the 1.8 database into moodle18 on barnabas. But it turned out that it was a backup of the 1.6 database and it had the ULPGC assignment tables present. So, now the database is virtually useless and I can drop it entirely and start from scratch. (? Maybe if I had had the ULPGC tables in the database the course restore from 1.6 to 1.8 for courses with ULPGC assignments might have worked)?\n!!!Procedure : 1. deal with redundant stuff\n# Get rid of the other 1.8 installation (in /var/www/moodle1.8/moodle) and the data in /var/moodle1.8_data and the database called moodle1_8. Delete entirely.\n# Mv the current 1.8 test code to another directory name so that I can see what hacks were made to the code. //mved to moodle_retired//\n# Leave the data dir where it is or ''copy'' to a new dir //moodle_retired_data//\n# drop //moodle18// database and recreate it from backup (mbackups/moodle18-dba-dump.sql from 9-26), call it //moodle_retired// (to go with code). --Use command line--. I used phpmyadmin. \n<<<\n@@CREATE DATABASE `moodle_retired` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;@@\n[Note that that Moodle documentation has just //CREATE DATABASE moodle;// -- I think that the default character set utf8 and collation are also needed]\n{{{GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER, LOCK TABLES ON `moodle\s_retired` . * TO 'moodle_user'@'localhost';}}}\n[add priv LOCK TABLES so that Moodle_user can do backups]\n{{{mysql -u root -p moodle\s_retired <moodle18-dba-dump.sql}}}\nlastly, drop moodle18;\n<<<\nTest with user moodle_user (will password still work -- ''YES'')\nEdit config.php with new database name, and rejig locations\n[[http://barnabas.lly.earlham.edu/moodle_retired/|http://barnabas.lly.earlham.edu/moodle_retired/]] worketh!\n!!!2. Install new code & database\n# create new database called //moodle//\n** {{{CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;}}}\n** {{{GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER, LOCK TABLES ON moodle . * TO moodle_user@localhost;}}} [''Note:'' keep the same username and password for all moodle databases]\n** {{{CREATE DATABASE moodle19 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;}}}\n** repeat grant for user moodle_user on database moodle19\n# restore the production 1.8 database into //moodle//\n** {{{mysql -u root -p moodle <moodleDB-peace10-9.sql}}}\n** when I install the Moodle 1.9beta I'll have a "retired" database, a current one called "moodle" and an experimental one, moodle19\n# unpack {{{/home/markp/moodle/moodle-latest-18.tgz}}} into /var/www\n** {{{cd /var/www ; sudo cp -p /home/markp/moodle/moodle-latest-18.tgz . ; sudo tar -xvf moodle-latest-18.tgz; sudo chown -R www-data:www-data moodle}}}\n# configure the config.php to point to database //moodle//\n**[[database upgrade screen|graphics/dbupgrade_182-183.png]]<<imagebox>>\n**[[current release information|graphics/moodle_current_info_183.png]]<<imagebox>>\n**[[groups|graphics/dbupgrade_groups.png]]<<imagebox>>\n# Re-do hacks and mods:\n** copy over modified themes\n** change styles\n** turn off javascript for Chameleon\n# New features:\n** zip/upload\n\n
|!Faculty|!Issues|!Comments|\n|John Iverson|dissemination large numbers of graphic images. Burned them to CD and mailed. Attempt to send images via email but size limitations prohibited this.|Here, one could see a web based database being advantageous. Access from anywhere to upload. Make a 'collection' with a URL - send URL via email to colleagues.|\n|Meg Streepy|Slowness of network both in office (ethernet & wireless) and at home (?) to upload/download graphics|Good network throughput for graphics is crucial for doing anything with graphics in a web environment. Many apps have client systems for batching uploads but network speed is still vital.|\n|Brent Smith|Access to Homes of Rahu from off campus|''WinXP/2000'' : use Internet Explorer and ftp://ftp.earlham.edu -- changes into Windows Explorer and then drag/drop to copy. ''Mac'' : in Finder select Go -> Connect to server and use address ftp://ftp.earlham.edu. In both cases login with earlham username and password.|\n|John Iverson|Sharing lots of images with colleagues. For just a single project he had 1,000 images of 1Mb each. Cannot send graphics as email attachments. Has 30,000 35mm slides needing to be scanned.|Email limitations on all mail systems (including Googlemail). A web based database would allow for easy sharing of image sets|\n|Ron Parker|seems to be statisfied with his own system for handling graphics. Uses AcDc to edit batches of photos and create web page album|Should we get into GIS with images here?|\n
Also getting funny things with the date on Barnabas. Here the problem was a bit clearer:\n<<<\n<html><pre>markp@Barnabas:~$ date\nFri Feb 29 15:46:34 EST 2008\nmarkp@Barnabas:~$ sudo hwclock\nFri 29 Feb 2008 11:07:27 AM EST -0.398364 seconds</pre></html>\n<<<\nNote that the hardware clock was 4 hours behind the real time. Also the time was slow.\nReset the time:\n>{{{markp@Barnabas:~$ sudo date 02291608}}}\n>{{{Fri Feb 29 16:08:00 EST 2008}}}\nAnd copy the system time to the hardware clock\n<<<\n{{{markp@Barnabas:~$ sudo hwclock --systohc}}}\n{{{markp@Barnabas:~$ sudo hwclock}}}\n{{{Fri 29 Feb 2008 04:08:31 PM EST -0.151946 seconds}}}\n<<<\nI got this stuff from [[Manually setting the system date (and hardware clock) in Ubuntu Linux|http://blog.andrewbeacock.com/2007/05/manually-setting-system-date-and.html]]\n
To try to address [[Problem dates on Frumentius]] I have +++[synchronised]>\n<html><pre>\nmarkp@frumentius:~$ sudo date 02291622\nFri Feb 29 16:22:00 EST 2008\nmarkp@frumentius:~$ sudo hwclock --systohc\nmarkp@frumentius:~$ sudo hwclock\nFri 29 Feb 2008 16:22:41 EST -0.340005 seconds\n</pre></html>===\n the hardware clock with the software date as with [[Date on Barnabas]]\nThough I doubt whether this will make a difference....\n
[[WhatsNew]]
/***\nTo use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #870000; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink {\n margin-left:0.5em; margin-right:0.5em;\n padding-left:3px; padding-right:3px;\n color:#white; font-size:100%;\n}\n#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#4C4C4C;}\n\n#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\n#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\n\n\n/*}}}*/
<div class='header' macro='gradient vert #390108 #900'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<!--\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n-->\n<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n</div>\n<!--\n<div id='mainMenu'>\n<div refresh='content' tiddler='MainMenu'></div>\n-->\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
/*{{{*/\n.viewer .listTitle { list-style-type:none; margin-left:-2em; }\n.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\n/*}}}*/\n/***\nImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\n***/\n/*{{{*/\n[[TagglyTaggingStyles]]\n[[HorizontalMainMenuStyles]]\n/*}}}*/\n/***\nClint's fix for weird IE behaviours\n***/\n/*{{{*/\nbody {position:static;}\n.tagClear{margin-top:1em;clear:both;}\n/*}}}*/\n/***\nJust colours, fonts, tweaks etc. See SideBarWhiteAndGrey\n***/\n/*{{{*/\n\n/***\nhttp://tiddlystyles.com/#theme:DevFire\nAuthor: Clint Checketts\n***/\n\n/*{{{*/\nbody {\nbackground: #000;\n}\n/*}}}*/\n/***\n!Link styles /% ============================================================= %/\n***/\n/*{{{*/\na,\na.button,\n#mainMenu a.button,\n#sidebarOptions .sliderPanel a{\n color: #ffbf00;\n border: 0;\n background: transparent;\n}\n\na:hover,\na.button:hover,\n#mainMenu a.button:hover,\n#sidebarOptions .sliderPanel a:hover\n#sidebarOptions .sliderPanel a:active{\n color: #ff7f00;\n border: 0;\n border-bottom: #ff7f00 1px dashed;\n background: transparent;\n text-decoration: none;\n}\n\n#displayArea .button.highlight{\n color: #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n.header{\n border-bottom: 2px solid #ffbf00;\n color: #fff;\n}\n\n.headerForeground a {\n color: #fff;\n}\n\n.header a:hover {\n border-bottom: 1px dashed #fff;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu {color: #fff;}\n#mainMenu h1{\n font-size: 1.1em;\n}\n#mainMenu li,#mainMenu ul{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar {\n right: 0;\n color: #fff;\n border: 2px solid #ffbf00;\n border-width: 0 0 2px 2px;\n}\n#sidebarOptions {\n background-color: #4c4c4c;\n padding: 0;\n}\n\n#sidebarOptions a{\n margin: 0;\n color: #ffbf00;\n border: 0;\n}\n#sidebarOptions a:hover {\n color: #4c4c4c;\n background-color: #ffbf00;\n\n}\n\n#sidebarOptions a:active {\n color: #ffbf00;\n background-color: transparent;\n}\n\n#sidebarOptions .sliderPanel {\n background-color: #333;\n margin: 0;\n}\n\n#sidebarTabs {background-color: #4c4c4c;}\n#sidebarTabs .tabSelected {\n padding: 3px 3px;\n cursor: default;\n color: #ffbf00;\n background-color: #666;\n}\n#sidebarTabs .tabUnselected {\n color: #ffbf00;\n background-color: #5f5f5f;\n padding: 0 4px;\n}\n\n#sidebarTabs .tabUnselected:hover,\n#sidebarTabs .tabContents {\n background-color: #666;\n}\n\n.listTitle{color: #FFF;}\n#sidebarTabs .tabContents a{\n color: #ffbf00;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #ff7f00;\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tab:hover,\n#sidebarTabs .txtMoreTab .tabContents{\n color: #ffbf00;\n background: #4c4c4c;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n color: #ffbf00;\n background: #5f5f5f;\n}\n\n.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\n.tab.tabUnselected {background-color: #666;}\n.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\n.tabContents {\n background-color: #4c4c4c;\n border: 0;\n}\n.tabContents .tabContents{background: #666;}\n.tabContents .tabSelected{background: #666;}\n.tabContents .tabUnselected{background: #5f5f5f;}\n.tabContents .tab:hover{background: #666;}\n/*}}}*/\n/***\n!Message area styles /% ============================================================= %/\n***/\n/*{{{*/\n#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\n#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\n#messageArea a:hover {color: #ff7f00;}\n#messageArea a:active {color: #ff7f00;}\n#messageArea .messageToolbar a{\n border: 1px solid #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n.popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n.popup li.disabled{color: #fff;}\n.popup a {color: #ffbf00; }\n.popup a:hover { background: transparent; color: #ff7f00; border: 0;}\n.popup hr {color: #ffbf00; background: #ffbf00;}\n/*}}}*/\n/***\n!Tiddler Display styles /% ============================================================= %/\n***/\n/*{{{*/\n.title{color: #fff;}\nh1, h2, h3, h4, h5 {\n color: #fff;\n background-color: transparent;\n border-bottom: 1px solid #333;\n}\n\n.subtitle{\n color: #666;\n}\n\n.viewer {color: #fff; }\n\n.viewer table{background: #666; color: #fff;}\n\n.viewer th {background-color: #996; color: #fff;}\n\n.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n\n.viewer hr {color: #666;}\n\n.tiddler .button {color: #4c4c4c;}\n.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\n.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\n\n.toolbar {\n color: #4c4c4c;\n}\n\n.toolbar a.button,\n.toolbar a.button:hover,\n.toolbar a.button:active,\n.editorFooter a{\n border: 0;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.highlight, .marked {\n color: #000;\n background-color: #ffe72f;\n}\n.editorFooter {\n color: #aaa;\n}\n\n.tab{\n-moz-border-radius-topleft: 3px;\n-moz-border-radius-topright: 3px;\n}\n\n.tagging,\n.tagged{\n background: #4c4c4c;\n border: 1px solid #4c4c4c; \n}\n\n.selected .tagging,\n.selected .tagged{\n background-color: #333;\n border: 1px solid #ffbf00;\n}\n\n.tagging .listTitle,\n.tagged .listTitle{\n color: #fff;\n}\n\n.tagging .button,\n.tagged .button{\n color: #ffbf00;\n border: 0;\n padding: 0;\n}\n\n.tagging .button:hover,\n.tagged .button:hover{\nbackground: transparent;\n}\n\n.selected .isTag .tagging.simple,\n.selected .tagged.simple,\n.isTag .tagging.simple,\n.tagged.simple {\n float: none;\n display: inline;\n border: 0;\n background: transparent;\n color: #fff;\n margin: 0;\n}\n\n.cascade {\n background: #4c4c4c;\n color: #ddd;\n border: 1px solid #ffbf00;\n}\n/*}}}*/
/***\nTo use, add {{{[[TagglyTaggingStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging { vertical-align: top; margin:0px; padding:0px; }\n.tagglyTagging table { margin:0px; padding:0px; }\n\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .tagglyTagging .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyTagging .hidebutton { color:white; } /* has to be there so it takes up space */\n.selected .tagglyTagging .hidebutton { color:#aaa }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n.tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }\n.tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}\n.tagglyTagging ul ul li {margin-left:0.5em; }\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
<html>\n<h3 id="id11">Frustrations with Moodle Development</h3>\n\n<p>Andreas from Austria posted this question <a href="http://moodle.org/mod/forum/discuss.php?d=45852&mode=3">moodle newbie &#8211; general questions &amp; <span class="caps">API</span></a></p>\n\n<blockquote>\n<p>My name is Andreas and I'm a student from Austria. I'm rather new to moodle, but I will have to go a bit "under the surface", as I want to use moodle for my diploma thesis.</p>\n<p>some more dev-related questions:</p>\n</blockquote>\n\n<ul>\n <li>I am new to <span class="caps">PHP</span> (always dealt with Java before), so it is kind of hard for me to get through all the code. Which are in general the libraries I can concentrate on (as there are lots of them defining lots and lots of functions)?</li>\n <li>As I want to keep my code maintainable and "pretty" I do not want to hardcode any sql queries as far as possible. But how can I properly access moodle functionality? I mean is there always some "release stable <span class="caps">API</span>" e.g. for authentication?</li>\n <li>How do I correctly access other modules instead from directly accessing the database tables? Is there always some <span class="caps">API</span> or does this depend on the developer? What I would need for example is the <span class="caps">API</span> for doing a post in a forum or sending/receiving a chat message. What does the community suggest?</li>\n</ul>\n\n<p>Sam Marshall responded with <a href="http://moodle.org/mod/forum/discuss.php?d=45852&parent=210885">this</a> which matches the frustration which we found when trying to do development &#8212; to understand how the ruddy thing works you have to reverse engineer the system. And <strong>everyone</strong> who wants to develop Moodle has to do the same thing. Welcome to the 80s indeed.</p>\n\n<blockquote>\n<p> Basically you are expecting a system with a clearly-designed architecture, but you need to adjust your expectations. Moodle is not that system. It has a limited amount of architecture in certain areas (for example, there is a module <span class="caps">API</span>, although it's hard to find full documentation on this last I looked). There are many other small areas with different defined APIs, such as auth plug-ins, blocks, etc. Some of these work in a similar way to modules while others have a totally different style.</p>\n</blockquote>\n\n<p>It has been claimed that this is a good thing.</p>\n\n<p>In answer to your question about hardcoding <span class="caps">SQL</span> queries &#8211; Moodle's 'datalib.php' includes a number of data access functions. However, these don't really do what you probably expect (define wrapper functions through which you can access database functionality without needing to know how the tables are defined, thus separating the precise details of data definition from other areas of code). What they actually do is provide a limited set of table access operations which at least are guaranteed to work on both the databases Moodle supports. These work on 'Moodle-style tables' which must have a primary key called 'id' that is an autosequenced integer. You can also just do <span class="caps">SQL</span> queries if you like living dangerously; there are functions in datalib that can be used to run arbitrary <span class="caps">SQL</span>. Even for this it's better to use datalib functions than use <span class="caps">ADODB</span> (the <span class="caps">PHP</span> database integration layer Moodle uses) directly, because the datalib functions track some statistics about the number of queries etc.</p>\n\n<p>For accessing other modules it is entirely up to the module &#8211; there is no defined way for modules to expose their <span class="caps">API</span>. Instead, you go look into that module's code and see if there's a function that looks like it does what you want. If there is, use it (and hope they don't redefine the function next version); otherwise, you'll have to access database tables directly (and hope they don't redefine the tables next version).</p>\n\n</html>
I discovered the best command line options for 'diff':\n{{{diff -iwBu assignment.class.php.nozip assignment.class.php}}}\n* -i ignore case\n* -w ignore white space\n* -B ignore blank lines\n* -u use //unified context// as described in [[wikipedia article|http://en.wikipedia.org/wiki/Diff]]\n\nAlso [[Compare directories via diff|http://www.macosxhints.com/article.php?story=20070408062023352]]\n
In the first edition of Digital Planet we look at the future of computer technology with Professor Peter Cochrane. We ask whether quantum computers will have applications for the consumer and we examine the problems caused by our ability to store more and more data. \nThe programme also hears about an experimental treatment for eye conditions which involves playing video games and we begin our new feature - Top Digital Thingies.\n[[digital planet mp3|podcasts/03_27_06 Digital Planet.mp3]]
!!Jing recording sizes\n[[From Jing FAQ -- screen dimensions|http://help.jingproject.com/capture/select-an-area-to-capture/]]\n<<<\nIf you're routinely sending videos up to Screencast.com, YouTube or other popular media sites, and you want them to look as professional as possible, you'll likely want to know about dimensions and ratios. Don't worry, the math isn't too bad, and we'll give you some standards. Here's the standard dimensions for Standard and Widescreen formats.\n\nStandard, 4:3 (width:height) Popular dimensions include: 320x240, 640x480, 800x600, 1024x768\n\nWidescreen, 16:9 (width:height) This is sometimes referred to as High Definition or HD. Popular dimensions include: 640x360, 960x540, 1024x576, 1280x720, and 1920x1080\n<<<\n
!!Problem : I'm getting all postings to discussion Forums as email messages. Make it stop!\nWhen you join a Forum on Moodle it 'subscribes' you to that Forum by default. This means that you get forum posts by email. \n!!Fix : Part I\nYou will need to turn off subscriptions for each Forum you are a member of:\n# Logon to Moodle and go to the course\n# Click the Forums link in Activities box -- you'll see all the Forums together.\n# In Learning Forums section, click the Forum name.\n# At the top right you'll see a link called "Unsubscribe from this forum". Click on this and you'll get unsubscribed.\n# Return to the Forums listing by clicking the Forums link on the breadcrumb bar. [img[graphics/forums_breadcrumb.png]]\n# Repeat for ''every'' Forum\n!! Fix : Part II\nTo change the default behaviour so that you don't subscribe to a new Forum (you'll want to do this too):\n# On the course mail page open Participants and click on your own name.\n# This is your Profile page. Now select the Edit Profile tab\n# Find the option 'Forum auto-subscribe' and pull down the menu to 'No: dont' automatically subscribe me to Forums"\n# You will also have to type some comments into the Description field before you can Update.\n# Click Update Profile to save.\n----\n21 Sept 2006
/***\nDropDownTagChooser\nhttp://simonbaird.com/mptw/#DropDownTagChooser\nRequires TagUtils\nExample:\n{{{<<selectUniqueTag Priority>>}}}\n<<selectUniqueTag Priority>>\nSee also ExampleTask (uses ViewTemplate to put a couple of these in the toolbar).\n***/\n//{{{\nvar selectUniqueTagOnChange = function(tiddler,newTag,tagGroup) {\n\n // can I do this a better way, ie not have to use store.getTiddler???\n // just use macro handler scope ???\n\n var t = store.getTiddler(tiddler);\n t.setUniqueTagFromGroup(newTag,tagGroup);\n\n // refresh visible tiddlers\n story.forEachTiddler(function(title,element) {\n if (element.getAttribute("dirty") != "true") \n story.refreshTiddler(title,false,true);\n });\n\n return false;\n}\n\nconfig.macros.selectUniqueTag = {};\nconfig.macros.selectUniqueTag.handler =\n function(place,macroName,params,wikifier,paramString,tiddler) {\n\n var tagGroup = params[0];\n var label = params[1]?params[1]:params[0]+":";\n\n var tagsInGroup = getTitles(store.getTaggedTiddlers(params[0]));\n\n var select = document.createElement("select");\n\n /*\n // dont know how to make this work..\n var update = function(e) {\n if (!e) var e = window.event;\n alert("here");\n return false;\n };\n select.onchange = update;\n */\n\n select.setAttribute("onchange","selectUniqueTagOnChange('"+\n tiddler.title+"',this.options[this.selectedIndex].text,'"+tagGroup+"');");\n\n select.setAttribute("style","font-size:90%;"); // evil. should use a class!\n\n // in case there is currently none of them\n if (!tiddler.hasAnyTag(tagsInGroup)) {\n var opt = document.createElement("option");\n opt.text = "-";\n opt.selected = true;\n try {\n // for IE\n select.add(opt);\n }\n catch(e) {\n select.appendChild(opt)\n };\n }\n\n for (var i=0;i<tagsInGroup.length;i++) {\n var opt = document.createElement("option");\n opt.text = tagsInGroup[i];\n if (tiddler.hasTag(tagsInGroup[i]))\n opt.selected = true;\n try {\n // for IE\n select.add(opt);\n }\n catch(e) {\n select.appendChild(opt)\n };\n }\n\n wikify(label,place,null,tiddler);\n place.appendChild(select);\n}\n\n//}}}
Following install instructions fairly straightforward. Download, unpack and copy drupal into hosting dir. Rename to the name you want for the site, eg I renamed 'drupal' to 'iti'. \nLocate on OS X server : /Library/WebServer/Documents/iti\nLocation of settings (config) file : /Library/WebServer/Documents/iti/sites/default/settings.php\nI changed the following settings:\n $db_url = 'mysql://{drupal admin user:password}@localhost/drupal'; // where 'drupal' is the name of the database within MySQL\n $db_prefix = \s'\s';\n $base_url = 'http://ec281.lly.earlham.edu/iti'; / no trailing '/'\n\nNeed to create the drupal database and can use PhpMyAdmin to do this. Then import iti/database/database.4.1.mysql and hoped it worked. It did :-)\n* The cron thing : DrupalCron\n* Gotchas to installing modules : ModuleInstall\n
Getting cron to work on OS X server. Can't find Lynx so use wget. Found it in ''/sw/bin/wget''\nRun ''sudo pico /etc/crontab'' and end up with the following:\n\n<<<\n # minute hour mday month wday who command\n00 * * * * /sw/bin/wget -O - -q http://ec281.earlham.edu/iti/cron.php\n<<<\nwhich runs the cron job iti/cron.php on the hour every hour.
Drupal has an [[LDAP Integration|]] module for v4.7.\nFrom [[this posting|http://drupal.org/node/54196]] it seems to do what we need:\n<<<\nFrom my testing, what seems to happen is if the user already exists in ldap, then it grabs all the info for that user and populates it's database (user table) from it with the settings it can get from ldap.\n\nThe ldap_integration_module also seems to keep the users in sync if they make modifications to their settings in drupal.\n<<<
Error message when connecting to http://ec281.lly.earlham.edu:\n\n<<<\nUnable to connect to database server\n\nThis either means that the username and password information in your settings.php file is incorrect or we can't contact the MySQL database server. This could mean your hosting provider's database server is down.\n\nThe MySQL error was: Access denied for user 'drupaladmin'@'localhost' (using password: YES).\n\nCurrently, the username is drupaladmin and the database server is localhost.\n\n * Are you sure you have the correct username and password?\n * Are you sure that you have typed the correct hostname?\n * Are you sure that the database server is running?\n\nFor more help, see the Installation and upgrading handbook. If you are unsure what these terms mean you should probably contact your hosting provider.\n<<<\n\nMySQL was started up. Problem with settings.php?\nReset the drupaladmin password:\n\n<<<\nec281:~ markp$ mysql -u root -p\nEnter password: \nWelcome to the MySQL monitor. Commands end with ; or \sg.\nYour MySQL connection id is 188 to server version: 5.0.18-standard\n\nType 'help;' or '\sh' for help. Type '\sc' to clear the buffer.\n\nmysql> UPDATE mysql.user SET Password = PASSWORD('********')\n -> where user = 'drupaladmin';\nQuery OK, 1 row affected (0.00 sec)\nRows matched: 1 Changed: 1 Warnings: 0\n\nmysql> FLUSH PRIVILEGES;\nQuery OK, 0 rows affected (0.01 sec)\n<<<\n\nThat fixed it!
From Aaron today: \n<<<\nTo start/stop the firewall use sudo /etc/init.d/firewall [stop|start] (just a little script I wrote to make it easier to use)\nThe actually firewall rules that the stop start script call are /etc/rc.d/rc.firewall and are readable only by root (so you'll have to sudo less it). Feel free to take a look at it. I've added some comments which might make it a little easier to understand. \n<<<\n
<!---\n| Name:|~TagglyTaggingEditTemplate |\n| Version:|1.1 (12-Jan-2006)|\n| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|\n| Purpose:|See TagglyTagging for more info|\n| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|\n--->\n<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n<div class="editor" macro="edit text"></div>\n<br/>\n<!--}}}-->
\n* In [[this conversation|http://moodle.org/mod/forum/discuss.php?d=83866]] on moodle.org Sean Keogh has got Elgg 0.8 working with Moodle 1.9! Geoffrey Rowland provided some useful answers too.\n
!!1. Control over release of grades\nCurrently, whenever a student's assignment has been graded the student sees the results immediatley. But what if the faculty wants to go back and readjust the final grade? It may be too late for a change of mind if the student has already seen her grade. The only workaround I can think of is to turn grade visibility off in the Settings and then back on when ready. But this is clumsy. Enter Grade release.\n# Have a setting in the assignment creation page : hold grades for release / release immediately\n# On the grading page an option Release now/ Release after [date/time] / Hold all (overrides setting)\n# Also a reminder on the grading page of the current grade release status. \n\n!! 2. Modify ULPGC assignment\nThe ULPGC Assignment is used intensively by two faculty ([[Monteze]] and [[Welling]]) but there are a number of issues:\n<<faqlist byTag ULPGCiss title hr>>\nI suggest investigating the capabilities of the assignment module in Moodle v1.7 )& perhaps 1.8) to see what improvements have been made and then, with the ULPGC assignment as a starting point redo the code to address all the problems and add enhancements.\n\n* Another enhancement is in the Assignment list showing the numbers submitted, graded and ungraded -- as in [[this post to Moodle.org|http://moodle.org/mod/forum/discuss.php?d=43461&parent=299648]]\n* See also [[Moodle Assignment enhancements]]
There are a number of different approaches. I will look at purely Open Source solutions.\n[[This document|modules/ePortfolio Project Research Report.pdf]] from the [[Mahara site|http://marhara.org]] is a really useful REVIEW OF THE LITERATURE ON PORTFOLIOS AND ELECTRONIC PORTFOLIOS\n!! 1. Desirable features\n\n!!2. components within Moodle\n* [[Exabis ePortfolio]]\n* [[SPDC Portfolio]]\n* [[MyStuff : Open University]]\n!!3. standalone systems with Moodle integration\n* [[Elgg as an ePortfolio]]\n* [[Mahara]]\nThe problems that I see with current Moodle based e-portfolios are :\n# You'd need to retain the Moodle database and data directory indefinitely. Currently at Earlham we start each year with a fresh database and data directory and import courses where necessary to avoid issues with upgrading. We would not be able to do this and would have to also changethe way we use MyMoodle as a result.\n# The moodle data storage scheme is designed around courses. Adapting it to user centric portfolio collections is a kludge.\n# The [[Moodle 2.0 roadmap|http://docs.moodle.org/en/Roadmap#Version_2.0_-_Expected_Late_2008]] points to definite support of [[external repositories|http://docs.moodle.org/en/Development:Repository_API]] and also a [[portfolio API|http://docs.moodle.org/en/Development:Portfolio_API]] which all e-portfolios will be expected to use. The roadmap explicitly says "The first Portfolio plugin implemented will be Mahara." Moreover, if your institution decides to adopt an external repository this will probably break any built-in e-portfolio. [Note: Elgg would need a new plugin to use Moodle's portfolio API rather than the current integration module]\n# An e-portfolio system runs over a series of years and therefore needs long term developer commitment. A major question to ask of any system internal or external to Moodle is what is the likely long term future of the code.\n!!4. Others\n* [[FreeFolio - WordPress based]]\n\n\n
!! Features\n* an individual starting page which may contain one’s curriculum vitae or similar\n* a manageable category-system on two levels (main category and sub category)\n* file-management within the category-system (i.e. for publication of one’s best work-efforts)\n* publication of interesting links within moodle or into the web via weblink\n* self-reflection and documentation of one’s personal learning-style by using private notes (with the option for publication within moodle or into the web via weblink)\n* commenting-functionality for published links, files and notes\n* @@export-functionality into a ~SCORM-zip-format@@ [Unique]\n* cross-course usage of eportfolio-module\n* import of assignments from within all moodle-courses into an individual portfolio\n* import of previously from eportfolio-module exported SCORM-packages \n!!Links\n* [[main site (Germany)|http://moodlekurse.org/moodle_18/course/view.php?id=13]] login as Guest\n* [[documentation on Moodle docs|http://docs.moodle.org/en/Exabis_e-portfolio_block]]\n* [[discussion on moodle.org|http://moodle.org/mod/forum/discuss.php?d=77046]] last posting 21-Feb-08\n!!ToDo\n* Install this on a Moodle 1.9 test on Barnabas
Doing a backup of Ezjail according to [[instructions|Backup Jail]]\nProblems:\n<<<\n{{{\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/16/ moddata/assignment/176/904/responses/rsdana07_graded_resubmit_The_beautiful_thin gs_that_heaven_bears_Intro_to_Orgs_-_the_beautiful_things_9-4-08.rtf\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/16/ moddata/assignment/176/653/responses/mmmorgan07_graded_resubmit_The_beautiful_th ings_that_heaven_bears_MeredithMorganOrganizationAnalysisWC.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/16/ moddata/assignment/176/869/responses/mcnaugh08_graded_resubmit_The_beautiful_thi ngs_that_heaven_bears_Organizations_Beautiful_Things_Analysis.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/16/ moddata/assignment/225/653/responses/mmmorgan07_graded_2nd_draft_of_Tipdale_Case -_post_here_before_9_am_Friday_MeredithMorganTipdaleCaseStudyFinalDraft.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/16/ moddata/assignment/225/1196/responses/awroemb07_2nd_draft_of_Tipdale_Case-_post_ here_before_9_am_Friday_Tipdale_Engineering_Company_and_the_Political_Lens.rtf\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ãAãï½ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3第ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ ï¼¢ãï¼°ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3¬¬ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ãï¼£ãï½ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3第ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ãAãï½ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3第ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ãï¼¢ãï½ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3第ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/dãããããoodledata192+/213 ãï¼ãï¼£ãï½ï¼ï¼ï¼ ï¼·ï½ï½ï½ï½ï½ï½ï½.mp3第ï¼èª²ãèãç·´ç¿ãï¼ã\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/284/1350/This_topic_is_interesting_to_me_because_it_gives_me_ a_better_picture_of_what_goes_on_in_firms_and_corporations.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1257/responses/hoqueya_marked_STEP_6_Senior_research_pape r_due_TUESDAY_at-7-00_am-_do_not_be_late_Final_Paper_-_Yazdan_edited.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/703/responses/henryla_marked_STEP_6_Senior_research_paper _due_TUESDAY_at-7-00_am-_do_not_be_late_Final_Research_Paper.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1112/responses/banksju_marked_STEP_6_Senior_research_pape r_due_TUESDAY_at-7-00_am-_do_not_be_late_corporate_philan._checked\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1319/responses/anderal1_marked_STEP_6_Senior_research_pap er_due_TUESDAY_at-7-00_am-_do_not_be_late_Alex_Anderson_Executive_Pay_with_Forei gn.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1197/responses/marscbe-marked_markSTEP_6_Senior_research_ paper_due_TUESDAY_at-7-00_am-_do_not_be_late_SR._SEM_Final_Paper._Dec_15_2008.do c\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1224/responses/clarkti_marked_STEP_6_Senior_research_pape r_due_TUESDAY_at-7-00_am-_do_not_be_late_Final_Research_Paper.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1274/responses/bridgda_marked_STEP_6_Senior_research_pape r_due_TUESDAY_at-7-00_am-_do_not_be_late_Discrimination_in_the_workplace_Bridge. doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/908/responses/parkeka_marked_STEP_6_Senior_research_paper _due_TUESDAY_at-7-00_am-_do_not_be_late_senior_sem_outline_1_.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/1342/responses/abdulal_marked_STEP_6_Senior_research_pape r_due_TUESDAY_at-7-00_am-_do_not_be_late_Final_Paper_Ali.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/343/116/responses/gregotr_marked_STEP_6_Senior_research_paper _due_TUESDAY_at-7-00_am-_do_not_be_late_Executive_Compensation_and_Organizationa l_Effects.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/19/ moddata/assignment/428/1257/hoqueya_marked_STEP_6_Senior_research_paper_due_TUES DAY_at-7-00_am-_do_not_be_late_Final_Paper_-_Yazdan_edited_Repaired_.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/84/ moddata/assignment/161/1254/The_Gift_of_Knowledge-_A_layman_s_look_at_similariti es_between_Greek_Mythology_and_Judeo-Christian_religious_texts.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/128 /moddata/assignment/156/343/I_think_there_is_a_parallel_between_the_male_role_an d_power_as_well_as_between_the_female_role_and_the_passive_in_Sophocles.docx\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/294 /Kenneth Norton/Kenneth Norton                                                        11.doc\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/391 /moddata/assignment/515/371/Which_of_the_phenomena_discussed_in_this_article_are _supported_by_evidence_from_many_different_modern_cultures.docx\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/391 /moddata/assignment/515/497/Which_of_the_phenomena_discussed_in_this_article_are _supported_by_evidence_from_many_different_modern_cultures.docx\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/405 /moddata/assignment/646/292/responses/edcohn08_revised_Submit_paper_comparing_a_ theme_in_The_Company_and_The_revolutionary_origins._corporationsemmacohn\npax: File name too long for ustar ezjail/usr/home/moodle/data/moodledata192+/302 /Cardozo_Studies--Weisberg_s_Accepting_the_Inside_Narrator_s_Challenge--Billy_Bu dd_the_Legalistic_Reader.pdf\n}}}\n<<<\nFile names are [[too long|Long filename culprits]]. Try to figure out how the backup can exclude the moodledata directory.\n
// //''Name:'' FAQ List\n// //''Version:'' 1.4 for TW 2.0.0\n// //''Author:'' AlanHecht\n// //''Type:'' [[Macro|Macros]]\n\n// //''Description:'' FAQ List lets you compile a list of Frequently Asked Questions and present them in a cascading style for the viewer. Each question is turned into a link that will toggle the view of the answer text. The list can be compiled either from all tiddlers containing a certain tag or from a single tiddler that contains all the needed questions and answers.\n\n// //''Syntax:'' << {{{ faqlist mode source sortBy hrSeparator }}} >>\n// // ''faqlist:'' the macro call (required)\n// // ''mode:'' either "byTag" or "byTitle" (required)\n// // ''source:'' the associated tag or tiddler title (required)\n// // ''sortBy:'' if byTag, sort can be "title," "modifier," "modified." If byTitle, sort can be "question" and will reorder the questions in alphabetical order. (this parameter is optional; use "null" if you don't want a sort order, but want to use "hr" as the last paramter)\n// // ''hrSeparator:'' if "hr" is included at the end of the call string, each question/answer set will be separated by a horizontal rule.\n// //Examples: (edit these two tiddlers to see the syntax used for each)\n// // • [[FAQ Method One]] (compiled from tiddlers tagged with a certain tag)\n// // • [[FAQ Method Two]] (compiled using the content of a single tiddler)\n// // • @@color(#ff0000):''New!''@@ [[FAQ Method Three]] (uses the {{{<<tiddler>>}}} macro to pull the faq questions from a single tiddler and the answers from other tiddlers...very cool!)\n\n// //''Directions:'' <<tiddler StartupBehaviorDirections>> <<tiddler MacroDirections>>\n\n// //''Notes:'' If you choose to use byTitle mode where the entire set of questions/answers comes from a single tiddler, the syntax for the tiddler content is as follows:\n// // • Each question must be a single line (i.e. no hard returns) but can wrap as needed\n// // • The answer to a question begins on the next line after the question and can be as long as needed. It can also include hard returns as part of the answer text, but it cannot include empty lines (i.e. an empty line is the result of pressing enter twice).\n// // • Each question/answer set must be seperated by two hard returns (i.e. must have a single, blank line between them.\n// // Refer to [[FAQ Tiddler Sample]] for an example.\n\n// //''Known Issues:'' If a user clicks too quickly to toggle a FAQ entry on/off, they will go into tiddler edit mode. This should be corrected in the future by allowing web-hosted versions of the faq to disable double-clicking.\n\n// //''Revision History:''\n// // v0.1.0 (01 August 2005): initial release\n// // v0.1.1 (04 August 2005): Fixed an endless loop bug (thanks to Kevin Kleinfelter).\n// // v0.1.2 (19 October 2005): Fixed TW compatibility .32 bugs (newline for block quote and e.preventDefault by Clint Checketts)\n// // v0.1.3 (01 November 2005): Thanks to Clint's work, I fixed a similar "jump to top" problem when using the expand & collapse buttons. Also added the description for [[FAQ Method Three]]\n// // v0.1.4 (05 January 2006): Created a special version of FaqList to work with TW v2.0.0\n\n\n// //''Code section:''\nversion.extensions.faqlist = {major: 0, minor: 1, revision: 4, date: new Date("Jan 05, 2006")};\nconfig.macros.faqlist = {\n bulletCollapse: ">",\n bulletExpand: "∨",\n expandButton: {title: "Expand All", tooltip: "Open all items for reading"},\n collapseButton: {title: "Collapse All", tooltip: "Close all items"}\n};\nconfig.macros.faqlist.handler = function(place,macroName,params)\n{\n lingo = config.macros.faqlist;\n var mode = params[0].toLowerCase();\n var list = [];\n switch(mode)\n {\n case "bytag":\n var tagged = store.getTaggedTiddlers(params[1], params[2]);\n for(t=0; t<tagged.length; t++)\n {\n var title = tagged[t].title;\n list[t] = [title,store.getTiddlerText(title)];\n }\n var subTitle = store.fetchTiddler(title).getSubtitle();\n break;\n case "bytitle":\n var faqText = store.getTiddlerText(params[1]);\n var faqItems = faqText.split("\sn\sn");\n if(params[2] == "question")\n faqItems.sort();\n for(t=0; t<faqItems.length; t++)\n {\n list[t] = [faqItems[t].substring(0,faqItems[t].indexOf("\sn")),faqItems[t].substring(faqItems[t].indexOf("\sn")+1)];\n }\n var subTitle = null;\n break;\n }\n \n var faqHeading = place.appendChild(document.createElement("span"));\n faqHeading.appendChild(createTiddlyButton(faqHeading,lingo.expandButton.title,lingo.expandButton.tooltip,faqExpandAll));\n faqHeading.appendChild(createTiddlyButton(faqHeading,lingo.collapseButton.title,lingo.collapseButton.tooltip,faqCollapseAll));\n faqHeading.appendChild(document.createElement("p"));\n var faqBody = place.appendChild(document.createElement("span"));\n for(var t=0; t<list.length; t++)\n {\n var title = list[t][0];\n\n var content = "<<<\sn" + list[t][1] + "=\sn<<<\sn";\n var theClass = "tiddlyLinkExisting tiddlyLink";\n var itemHeading = faqBody.appendChild(document.createElement("span"));\n itemHeading.appendChild(document.createTextNode(config.macros.faqlist.bulletCollapse + " "));\n createTiddlyButton(itemHeading,title,subTitle,faqToggleThis,theClass);\n var itemBody = faqBody.appendChild(document.createElement("span"));\n itemBody.style.display = "none";\n itemBody.className = "itemBody";\n wikify(content,itemBody,null,null);\n faqBody.appendChild(itemBody);\n faqBody.appendChild(document.createElement("p"));\n if(params[3] == "hr")\n faqBody.appendChild(document.createElement("hr"));\n }\n}\n\nfunction faqToggleThis(e)\n{\n var content = this.parentNode.nextSibling;\n var shown = content.style.display;\n if(shown == "none")\n {\n content.style.display = "inline";\n this.previousSibling.nodeValue = config.macros.faqlist.bulletExpand + " ";\n }\n else\n {\n content.style.display = "none";\n this.previousSibling.nodeValue = config.macros.faqlist.bulletCollapse + " ";\n }\n}\n\nfunction faqExpandAll(e)\n{\n for(t=0; t<this.parentNode.nextSibling.childNodes.length; t++)\n {\n if(this.parentNode.nextSibling.childNodes[t].className == "itemBody")\n {\n this.parentNode.nextSibling.childNodes[t].style.display = "inline";\n this.parentNode.nextSibling.childNodes[t].previousSibling.childNodes[0].nodeValue = config.macros.faqlist.bulletExpand + " ";\n }\n }\n// e.preventDefault();\n}\n\nfunction faqCollapseAll(e)\n{\n for(t=0; t<this.parentNode.nextSibling.childNodes.length; t++)\n {\n if(this.parentNode.nextSibling.childNodes[t].className == "itemBody")\n {\n this.parentNode.nextSibling.childNodes[t].style.display = "none";\n this.parentNode.nextSibling.childNodes[t].previousSibling.childNodes[0].nodeValue = config.macros.faqlist.bulletCollapse + " ";\n }\n }\n// e.preventDefault();\n}\n
* When teachers display their "My Moodle" home page all the assignments for the course are listed. How does one switch this off.\n* When grading, the student's grade is revealed as soon as the grade is saved. Need some mechanism to delay revealing grades until all have been finished or Teacher gives the thumbs-up.\n----\n1 Nov 06
For TIP workshop\nFind out how to:\n* enable automatic spell checking when using any web form\n* squash obnoxious advertisements\n* save form information as you type. Retrieve in emergency.\n* Use Scrapbook to save web pages & whole sites\n\n!!1. Spell checker\n[[Firefox help for spell check|http://support.mozilla.com/en-US/kb/Using+the+spell+checker]]\n
After attempting to set up a user account for Dylan on Barnabas (see [[Adding users]]) I managed to screw up my own group membership and lose membership of admin group. This meant that I couldn't ''sudo'' to change anything.\nAfter phoning Randy Schultz I decided that GIMF (Google Is My Friend) and found [[these useful instructions|http://www.arsgeek.com/?p=554&print=1]]. I'll repeat them here in case the web site is unobtainable:\n<<<\nOver the last few days I’ve had several occasions to use single user mode to change a password for users on Ubuntu boxes. I’ve also used this once when a fellow tech messed up the sudoers file via a typo, essentially allowing no one to have sudo access!\nWhat’s single user mode? Essentially, this logs you in as root, but disables network services such as ssh logons and whatnot. It’s a fairly safe way to log into a box and so things like change passwords. I’m doing this mostly on Ubuntu boxes but this should work for just about any linux distro which uses GRUB as it’s boot manager.\nTo get onto a machine using single user mode, simply reboot it. When the machine restarts, you should either be put right into the GRUB menu if it’s a dual boot machine. If it’s not a dual boot machine, you should have an opportunity to enter the GRUB menu by hitting the ESC key.\nOnce you’re in the GRUB menu, you’ll have a list of your latest kernels, and their recovery modes below. You’ll start off on the latest, which is what you want. Type the ‘e’ key.\nThis will bring you to a sub-menu. You’ll be on the top selection which is root (some hard drive info in this space). Use the arrow keys to go down 1 selection to the kernel option. Again, hit the ‘e’ key.\nNow you’ll see the command that GRUB will use to start your box. It will look something like this:\n> {{{kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hda1 ro quiet splash}}}\nYou’ll want to add the word ’single’ to the end so it looks like this:\n> {{{kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hda1 ro quiet splash single}}}\nNow hit the enter key once. Then type ‘b’ to boot the machine.\nYou’ll go through what looks like the normal boot process, but find yourself suddenly staring not at a graphical user interface, but a command line. Welcome to being root. What now?\nWell, in the two examples I’ve given, we’ll look at changing a user’s password. In this case, the users were the only users on their box. To change their password, type:\n> passwd USERNAME\nSubstitute the username who’s password you want to change. Then type the new password twice. When you’ve done that, type:\n exit\n\nIn Ubuntuland this will dump you into runlevel 2 (graphical) and your user should now be able to log in as normal.\nIn my other example, a tech was adding a group to the sudoers file, so anyone belonging to that group would have sudo access, but what he ended up with was a malformed soduers file which wouldn’t allow *anyone* sudo access.\nSo into single user mode we went, and he then typed\n> {{{visudo}}}\n\nto edit the sudoers file. He corrected his mistake, saved the file and restarted to a much better situation.\n<<<\n----\n\n
[[J W Player|http://www.jeroenwijering.com/]] claims that it //has become the most used video player on the internet//\nLook at integration in Elgg and Moodle\n
/***\n|Name|FontSizePlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#FontSizePlugin|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nResize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.\nYou can customize the maximum and minimum allowed sizes.\n(only affects tiddler content text, not any other text)\n\nAlso, you can load a TW file with a font-size specified in the url.\nEg: http://tw.lewcid.org/#font:110\n\n!Demo:\nTry using the font-size buttons in the sidebar, or in the MainMenu above.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nThen put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.\n\n!Usage\n{{{<<fontSize>>}}} results in <<fontSize>>\n{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>\n\n!Customizing:\nThe buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.\nTo change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.\n\n!Notes:\nThis plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.\n\n!History:\n*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.\n*25-07-06, version 0.9\n\n!Code\n***/\n\n//{{{\nconfig.fontSize={};\n\n//configuration settings\nconfig.fontSize.settings =\n{\n defaultSize : 100, // all sizes in %\n maxSize : 200,\n minSize : 40,\n stepSize : 10\n};\n\n//startup code\nvar fontSettings = config.fontSize.settings;\n\nif (!config.options.txtFontSize)\n {config.options.txtFontSize = fontSettings.defaultSize;\n saveOptionCookie("txtFontSize");}\nsetStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\sn","fontResizerStyles");\nsetStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\sn .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");\n\n//macro\nconfig.macros.fontSize={};\nconfig.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n\n var sp = createTiddlyElement(place,"span",null,"fontResizer");\n sp.ondblclick=this.onDblClick;\n if (params[0])\n createTiddlyText(sp,params[0]);\n createTiddlyButton(sp,"+","increase font-size",this.incFont);\n createTiddlyButton(sp,"=","reset font-size",this.resetFont);\n createTiddlyButton(sp,"–","decrease font-size",this.decFont);\n}\n\nconfig.macros.fontSize.onDblClick = function (e)\n{\n if (!e) var e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nconfig.macros.fontSize.setFont = function ()\n{\n saveOptionCookie("txtFontSize");\n setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\sn","fontResizerStyles");\n}\n\nconfig.macros.fontSize.incFont=function()\n{\n if (config.options.txtFontSize < fontSettings.maxSize)\n config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.macros.fontSize.decFont=function()\n{\n\n if (config.options.txtFontSize > fontSettings.minSize)\n config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.macros.fontSize.resetFont=function()\n{\n\n config.options.txtFontSize=fontSettings.defaultSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.paramifiers.font =\n{\n onstart: function(v)\n {\n config.options.txtFontSize = v;\n config.macros.fontSize.setFont();\n }\n};\n//}}}
!!Pasted text from Word loses formatting\nFaculty using Mac OS X and Firefox types comments into a Word document. Selects comment text and copies. Opens up grading interface in Moodle and pastes into comment box. All formatting lost. I think it's a Firefox issue. From [[Zotero forums|http://forums.zotero.org/discussion/205/export-bib-to-clipboard-in-os-x/#Item_0]]\n<<<\nThe problem here is that Firefox doesn't support copying rich text to the OS X clipboard in a format that other apps (other than Thunderbird) can understand. This isn't limited to us—it's the same reason you can't copy in rich text from Firefox, Camino or Thunderbird to other apps.\n<<<\n
!!Discussion Forums and Groups\nDina Battaglia is teaching the rather large Intro to Psych course (~100 students). She is using discussion forums to engage students. She has 6 or so groups with a senior student TA for each group. \n* We created a new scale and applied that to the Forum.\n* Q: Could a 'non-editing' TA rate Forum posts? Ans: Yes!\n* She found the ability to go in as a student or TA very useful\n* Announcements to groups -- just make News Forum separate groups!\n* [[Duplicate Discussions|http://www.earlham.edu/~markp/moodle_wiki/#DuplicateAssignmentHowTo]] easy way to create new Forums using the same setup.\n----\nSept 7th 06
From Graham Atwell's [[Pontydysgu|http://www.pontydysgu.org/]]\n* From the [[FreeFolio roadmap|http://www.pontydysgu.org/2008/02/freefolio-roadmap/]] page:\n<<<\n;1. Developing a repository\n: Integrate a proper (standards based) lightweight document repository for uploading, storing and accessing different digital artefacts (e.g. documents, etc.). The repository will allow users to store different objects, including text, audio, photographs and video, to access and annotate those objects and to report on their wok in different presentation formats. Users will be able to share access to their work with those they choose. The repository will conform to technical standards and will allow users to copy their work to portable media, if they wish. This will facilitate interoperability with other portfolios and learning applications.For instance if a leaner progresses to university they will be able to transfer their work including multimedia objects.\n; 2. Reporting views, building blocks\n: Develop a system module for allowing users to present achievements - should be flexible and allow multiple ‘views’. The module will provide templates to allow users to easily present different views of their work for different purposes, for instance for supporting job applications, for applications for further courses or as part of their curriculum activities. The templates will provide structures to assist learners in developing their presentations. Users will be able to choose different objects form the portfolio to form part of the presentations. Different presentations can be stored within the portfolio or exported to portable media. Once more users will be able to control with whom they share their presentations.\n; 3. Improvements to profile\n: Develop system to allow administrator control of profile template. Also examine feasibility of making links between different people with same interests/goals in the user profile. The development of the profile template will make it easy for administrators to customise the template for different installations of the portfolio. The ab9lity to automatically link people with similar interests of similar learning goals will facilitate peer group learning and the development of groupwork. The system will allow learners to find materials and posts relevant to their personal and learning interests of their learning.\n; 4. Improvements to the Personal Development Profile (PDP)\n: Develop reusable template for PDP process. Allow reviewing and reporting on progress towards goals. Allow view of goals and progress over time. The further development of the Personal Development Profile will allow users to easily view their progress over time, to reflect on that progress and to develop a record. This will assist in developing learners’ abilities for planning and evaluation. \n; 5. Improve groups functionality\n: Make it easier to form on the fly groups for sharing and collective activities. his will make it possible to develop working areas for different groups of learners, for instance for undertaking shared projects. Work undertaken in groups may be used as part of the presentations as in 2 above. \n; 5. Styling, choice of styles. \n: Allow users choice of style/design. Research has shown the importance to learners of being able to give their portfolios their own look and feel. We will develop a number of different styles for users to choose from and will facilitate those who are able in developing their own styles.\n; 6. Scaling\n: Further develop administrative systems to allow easier install and scaling for multiple group use. Develop an installable version of Freefolio which may in future be installed on clients systems if they wish. \n<<<\n
We're using Ubuntu 7.10 "Gutsy Gibbon" Ubuntu on this server. Say no more ...\n!!Install GD for php on Frumentius\nFollow [[these|Add GD to php 5 on Ubuntu]] instructions. But get error: \n> {{{Unmet dependencies. Try apt-get -f install with no packages}}}\nDo {{{ sudo apt-get -f install}}} +++[results]>\nReading package lists... Done\nBuilding dependency tree\nReading state information... Done\nCorrecting dependencies...Done\nThe following packages will be REMOVED\n webmin\n0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.\n1 not fully installed or removed.\nNeed to get 0B of archives.\nAfter unpacking 82.6MB disk space will be freed.\nDo you want to continue [Y/n]? Y\n(Reading database ... 61135 files and directories currently installed.)\nRemoving webmin ...\n===\n\nThen {{{ sudo apt-get -f install php5-gd}}} +++[results]>\nReading package lists... Done\nBuilding dependency tree\nReading state information... Done\nCorrecting dependencies...Done\nThe following packages will be REMOVED\n webmin\n0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.\n1 not fully installed or removed.\nNeed to get 0B of archives.\nAfter unpacking 82.6MB disk space will be freed.\nDo you want to continue [Y/n]? Y\n(Reading database ... 61135 files and directories currently installed.)\nRemoving webmin ...\nmarkp@frumentius:~/elggbackups$ sudo apt-get -f install php5-gd\nReading package lists... Done\nBuilding dependency tree\nReading state information... Done\nThe following extra packages will be installed:\n defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62\n libpng12-0 libt1-5 libx11-6 libx11-data libxau6 libxdmcp6 libxpm4 ttf-dejavu\n ttf-dejavu-core ttf-dejavu-extra x11-common\nSuggested packages:\n defoma-doc psfontmgr x-ttcidfont-conf dfontmgr libfreetype6-dev libgd-tools\nRecommended packages:\n libft-perl\nThe following NEW packages will be installed\n defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62\n libpng12-0 libt1-5 libx11-6 libx11-data libxau6 libxdmcp6 libxpm4 php5-gd\n ttf-dejavu ttf-dejavu-core ttf-dejavu-extra x11-common\n0 upgraded, 18 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 0B/6650kB of archives.\nAfter unpacking 15.5MB of additional disk space will be used.\nDo you want to continue [Y/n]? Y\nMedia Change: Please insert the disc labelled\n âUbuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)â\nin the drive â/cdrom/â and press enter\nPreconfiguring packages ...\nFATAL: Error inserting battery (/lib/modules/2.6.22-14-server/kernel/drivers/acpi/battery.ko): No such device\n... ''everything installs OK apart from battery error''\nProcessing triggers for libc6 ...\nldconfig deferred processing now taking place\n===\n\nInstalled fine!\nRestart Apache {{{ sudo apache2ctl restart}}} Error:\n>{{{apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName}}}\n''NEED TO FIX THIS''\n\n\n\n
!!Build Intel e1000 driver\nHave determined that the problem is probably a missing driver from Ubuntu 7.1, Gutsy Gibbon. S5000PAL system board featuring Intel 82563EB ethernet controller.\nUbuntu Forums have the following useful page [[HOWTO build/install updated e1000 driver when you have no net|http://ubuntuforums.org/showthread.php?t=551720&highlight=Intel+E1000+gutsy]] \n!!!1. Preliminaries\n# Run {{{lspci -nn}}} to see ethernet controller in +++[this list]>\n8086:10A5\n8086:10BD\n8086:10C0\n8086:10C2\n8086:10C3\n8086:294C\n===\n\n# run {{{uname -r}}} to determine exact kernel. I think I have : kernel version 2.6.22\n!!!2. Assemble components\nNeed the Ubuntu 7.10 server installation CD\n# install the build-essential meta-package from your installation CD-ROM by inserting the CD-ROM and +++[running apt]>\n{{{sudo apt-cdrom add}}}\n{{{sudo apt-get install build-essential}}}\n===\n\n# download the driver source and the linux-headers packages corresponding to your kernel version:\n## e1000-7.6.5 driver source from Intel [[download page|sourcehttp://downloadcenter.intel.com/confirm.aspx?httpDown=http://downloadmirror.intel.com/9180/eng/e1000-7.6.5.tar.gz&agr=N&ProductID=983&DwnldId=9180&strOSs=All&OSFullName=All%20Operating%20Systems&lang=eng] [[downloaded archive|modules/e1000-7.6.5.tar.gz]]\n# Check kernel version with {{{uname -r}}} . Ubuntu docs indicate that 'Gutsy Gibbon' is 2.6.22\n# Download headers from here : [[Software Packages in "gutsy", devel section|http://packages.ubuntu.com/gutsy/devel/]]\n** [[linux-headers-2.6.22-14 (2.6.22-14.46)|http://packages.ubuntu.com/gutsy/devel/linux-headers-2.6.22-14]] (depends upon GNU Core utils)\n** [[linux-headers-2.6.22-14-386 (2.6.22-14.46)|http://packages.ubuntu.com/gutsy/devel/linux-headers-2.6.22-14-386]] (depends upon coreutils, libc6, linux-headers-2.6.22-14)\n** [[linux-headers-2.6.22-14-generic (2.6.22-14.46)|http://packages.ubuntu.com/gutsy/devel/linux-headers-2.6.22-14-generic]] (depends upon coreutils, libc6, linux-headers-2.6.22-14)\n## for kernel 2.6.22.14.21 add the following:\n*** [[linux-headers-386 (2.6.22.14.21)|http://packages.ubuntu.com/gutsy/devel/linux-headers-386]] (depends upon linux-headers-2.6.22-14-386)\n*** [[linux-headers-generic (2.6.22.14.21)|http://packages.ubuntu.com/gutsy/devel/linux-headers-generic]] (depends upon linux-headers-2.6.22-14-generic)\n# Assemble all downloaded components, the driver and headers, and either burn to a CD or copy to USB thumb drive.\n# Insert CD/Thumb drive into server and copy everything to {{{/tmp}}}\n!!!3. Build driver\n# Install the +++[deb packages]>\n{{{mv *.deb /tmp}}}\n{{{cd /tmp}}}\n{{{dpkg --install linux-headers-2.6.22-14_2.6.22-14.46_all.deb}}}\nand so on until all the packages have been installed\n===\n\n# check permissions on {{{/var/cache}}} and make write access with chmod\n# +++[build driver]>\n# Get to the tmp dir : {{{cd /tmp}}}\n# Unpack the file : {{{tar xvfz e1000-7.6.5.tar.gz}}}\n# Go to the source directory that's been unpacked : {{{cd e1000-7.6.5/src}}}\n# This places a backup copy of the original driver in your home directory :\n>{{{sudo cp /lib/modules/2.6.20-15-generic/kernel/drivers/net/e1000/e1000.ko ~/e1000-2.6.20-15-generic.orig.ko}}}\n# Build : {{{make}}}\n# If you got no errors, proceed to install\n> {{{sudo install -D -m 644 e1000.ko /lib/modules/2.6.20-15-generic/kernel/drivers/net/e1000/e1000.ko}}}\n# Try this to see if it claims your ethernet device : {{{sudo modprobe e1000}}}\n===\n\n# run {{{ifconfig -a}}} to check that new device is present\n# restart network device : {{{sudo /etc/init.d/networking/restart}}}\n# load driver on subsequent boots: {{{echo "e1000" | sudo tee -a /etc/modules}}}\n\n!!!Wed 5-Dec -- in Charlie's dungeon\n* {{{lspci -nn}}} revealed ethernet controller id {{{8086:1019}}} which was not on the list above. Hmmmm.\n* copying stiuff off the CDROM drive worked OK\n* I had to add an [[extra header|modules/linux-headers-2.6.22-14-server_2.6.22-14.46_i386.deb]] by dowloading it to the Mac and transferring with a USB drive. In order to do this I had to add an entry to /etc/fstab (which I called usbdrive) but that worked.\n* The 'make' went well with no errors.\n* I did a modprobe e1000 to load the driver but got no error messages. \n* also loaded the driver for subsequent reboots (in retrospect a mistake)\n* {{{ifconfig eth0}}} did not give error 'network not available' so hopeful.\n* With a static IP address tried pinging but no response. Also could not ping in.\n* switched machine off and schlepped it over to ITAM.\n!!!Fri 7-Dec\n* Set up slab in tearoom -- was too noisy for printer room.\n* Started it up but on boot got a kernel panick.\n* Inserted install CD and booted off that. Unloaded module with {{{rmmod e1000} and copied out of /lib/modules/2.6.22-14-server/kernel/drivers/net/e1000 and replaced with orginal module I had backed up.\n* Now it starts up but doesn't get on the network as before.\n----\n[[New approach|Frumentius : new approach]]
# install Webmin as per [[Ubuntu 7.10 (Gutsy Gibbon) LAMP Server Setup|http://onlyubuntu.blogspot.com/2007/10/ubuntu-710-gutsy-gibbon-lamp-server.html]]\n# check mod_rewrite present on Apache 2. [[install|Frumentius : mod_rewrite]]\n# check GD present [[install|Frumentius : GD install]]\n# install ImageMagick ?\n
!!Installing Ubuntu 7.10\nI downloaded the latest server version (7.10) from the [[Ubuntu download page|http://www.ubuntu.com/getubuntu/download]] and burnt it to an ISO CD. \nFollowed this [[Ubuntu 7.10 (Gutsy Gibbon) LAMP Server Setup|http://onlyubuntu.blogspot.com/2007/10/ubuntu-710-gutsy-gibbon-lamp-server.html]] procedure.\n* Disk partitions:\n<<<\n{{{partition #1 (sda) as ext3}}}\n{{{partition #5 (sda) as swap}}}\n<<<\n* User accounts:\n> administrator -- system user account\n> markp - my user account\n* servers to install:\n** LAMP\n** ~OpenSSH\n** Postgres SQL\n** Samba\n> (MySQL root password : standard)\n!!!!MAC addresses:\nUse {{{ifconfig eth0}}} and {{{ifconfig eth1}}}\n<html>\n<dl><dt>eth0 :</dt><dd>00:0E:0C:4D:BA:C4</dd></dl>\n<dl><dt>eth1 :</dt><dd>00:0E:0C:4D:BA:C5</dd></dl>\n</html>\nIP address : 159.28.7.68
!Hardware issues\n[26-Nov] Do {{{shutdown -H now}}} get error message : {{{halt: unable to iterate IDE devices}}}\n[28-Nov] System still not getting onto the network. I know that the wall port is working because I swapped it with Barnabas successfully.\n!!!Boot Errors\n''Before'' anything appears on the screen (at least 60 secs) get the following Beep sequence twice 1-5-2-3. Page 107 in [[the manual|modules/Intel Server Board_s5000pal_tps_v1_4.pdf]] has the following info for this beep code:\n\nTable 49. BMC Beep Codes\n|!Code|!Reason for Beep|!Associated Sensors|!Supported?|\n|1-5-2-3|CPU: Configuration error (e.g., VID mismatch) | N/A | No |\n\nHowever, the first text on the screen are two lines in yellow:\n> @@Intel 3.2 ~GHz@@\n> @@Intel 3.2 ~GHz@@\nPressing key ''F2'' at this point gets into the BIOS.\nChecking the Error Manager reveals:\n|!Error|!Severity|! |!Description|\n|92A9| major | N/A |Serial port component encountered a resource conflict error. The error code identifies the error. Major severity requires user intervention but does not stop system boot.|\n|8161| major | 2 |Processor 02 unable to apply Microcode update. Microcode version 0. The error code identifies the error. Major severity requires user intervention but does not stop system boot. The instance code identifies the component in error|\nConsulting the manual we find on p105 :\nTable 47. POST Error Messages and Handling\n|!Error Code|! Error Message |!Response|\n|8161|Processor 02 unable to apply BIOS update | Pause |\n\nSaving (F10) and exiting the BIOS, the machine gives the following messages:\n>~ACPI : Unable to load system description tables\n>~PnPBIOS: get_dev_node: invalid handle\nbut continues to boot.\nHowever, Apache gives the following error which indicates that all is not well:\n>"Apache 2 could not reliably determine server's fully qualifies domain name, using 127.0.1.1 for ~ServerName."\nand DHCP does not obtain an IP address.\n\nIn the current position of the server I cannot see the POST code diagnostic ~LEDs as the machine starts up. But if necessary I can rotate the case so that the back faces front.
!!Install mod_rewrite for Apache2\nFollow [[these|Add mod_rewrite to Apache on Ubuntu]] instructions:\n* {{{$ sudo a2enmod rewrite}}} +++[results]>\n{{{Module rewrite installed; run /etc/init.d/apache2 force-reload to enable.}}}\n===\n\n* edit /etc/apache2/apache2.conf with pico to enable mod_rewrite +++[code]>\n<html><pre>\n# 12/26/07 load mod_rewrite\n<IfModule mod_rewrite.c>\n RewriteEngine On\n</IfModule>\n\n<IfModule mpm_worker_module>\n StartServers 4\n(changed from 2)\n\n# 12/26/07\n# Turn on the AcceptPathInfo variable, which allows scripts to be passed\n# arguments like http://server/file.php/arg1/arg2. This is essential to allow\n# relative links between your resources, and also provides a performance boost\n# for people using your Moodle web site.\n\nAcceptPathInfo on\n</pre></html>\n===\n\nNow go to /etc/apache2/sites-available and add a file called {{{els.frumentius}}} +++[contents]>\n<html><pre>\n#\n# els.frumentius.earlham.edu\n#\n<VirtualHost *>\n ServerName els.frumentius.earlham.edu\n ServerAdmin markp@earlham.edu\n DocumentRoot /var/www/elgg\n DirectoryIndex index.html index.php\n CustomLog /var/log/apache2/els.frumentius-access.log combined\n ErrorLog /var/log/apache2/els.frumentius-error.log\n# nicked from Mac OS X server VHOST file\n <Directory /var/www/elgg>\n Options All Indexes ExecCGI Includes MultiViews FollowSymLinks\n AllowOverride All\n </Directory>\n</VirtualHost>\n</pre></html>\n===\n\nNow {{{sudo /etc/init.d/apache2 force-reload}}} +++[output]>\n * Reloading web server config apache2 4246\napache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName\n===\n\nEnable the site {{{sudo a2ensite els.frumentius}}}\nand reload apache2 {{{sudo /etc/init.d/apache2 reload}}}\n
!!Thinking outside the box\nSomehow not only does the shipped driver not work with this ethernet hardware, the remade driver don't work either. Which is perhaps not entirely surprising given that the result of lspci -nn did not match the controller ids listed as working.\nSo, if we cannot get hardware to fit the driver, why not //change the hardware//. \n# plunder gigabit ethernet card from one of the Lab PCs.\n# fit a PCI riser card and slot the ethernet card in\n# disable onboard ethernet in BIOS\n# reinstall from 7.10 CD and hope that there's a working driver ...\n----\n18-Dec-07\n* Ordered {{{NIC INTEL|PWLA8391GTBLK GIGABIT 1PC - OEM (Qty=1, Price=$29.99)}}} from Newegg. Has been documented to work in Ubuntu 7.01\n* It came to day, so installed into card cage. I disabled the network ROM from the BIOS (dunno whether this affects the interface or not).\n* {{{ifconfig -a}}} showed it was there on eth6 but not active.\n* enabled the new NIC interface (commands in [[Useful network commands]]), restarted the network and ''it worketh''\n\n\n\n
Still getting DNS error when trying to reload Apache:\n<<<\nsudo /etc/init.d/apache2 reload\n * Reloading web server config apache2 4326\napache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName\n [ OK ]\n<<<\nHave emailed Aaron and Randy asking for help.\n----\nUpdate : the name was in Tom Blosser's DNS tool but he had not checked the DNS box ....
/***\n|Name|FullScreenPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#FullScreenPlugin|\n|Version|1.1|\n|Requires|~TW2.x|\n!Description:\nToggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.\n\n!Demo:\nClick the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!History:\n*25-07-06: ver 1.1\n*20-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nvar lewcidFullScreen = false;\n\nconfig.commands.fullscreen =\n{\n text:" ↕ ",\n tooltip:"Fullscreen mode"\n};\n\nconfig.commands.fullscreen.handler = function (event,src,title)\n{\n if (lewcidFullScreen == false)\n {\n lewcidFullScreen = true;\n setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");\n }\n else\n {\n lewcidFullScreen = false;\n setStylesheet(' ',"lewcidFullScreenStyle");\n }\n}\n\nconfig.macros.fullscreen={};\nconfig.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = params[0]||" ↕ ";\n var tooltip = params[1]||"Fullscreen mode";\n createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);\n}\n\nvar lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;\nStory.prototype.closeTiddler =function(title,animate,slowly)\n{\n lewcid_fullscreen_closeTiddler.apply(this,arguments);\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n\n\nSlider.prototype.lewcidStop = Slider.prototype.stop;\nSlider.prototype.stop = function()\n{\n this.lewcidStop();\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n//}}}
Installing extensions and student files on the ~PCs in Wildman Lab.\n# login to the machine as ''installer''\n# insert and run DVD. Do a ''modify'' install and install ''in full'' the following extensions:\n** 3D Analyst\n** ~ArcScan\n** Geostatistical\n** Network\n# double-click on ''~Saguaro_Install_1_9_29.exe'' to install\n# drag ''student'' folder from DVD onto ''C:\s''\n# eject DVD\n# restart PC
Welcome to your brand new [[MonkeyPirateTiddlyWiki|http://simonbaird.com/mptw/]]. This is the standard empty [[TiddlyWiki|http://www.tiddlywiki.com/]] (version <<version>>) preconfigured with a few bits and pieces from MPTW, in particular the layout, the colours, and the popular [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]]. If you're new to ~TagglyTagging then try the (slightly out-of-date) [[FAQ|http://simonbaird.com/mptw1/#TagglyTaggingFAQ]] and [[Tutorial|http://simonbaird.com/mptw1/#TagglyTaggingTutorial]].\n\nTo get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <<option txtUserName>>\n\nTo create your own tiddlers, click 'new tiddler' in the right sidebar. To edit a tiddler click the 'edit' button in the tiddler's toolbar. To save all your tiddlers click 'save changes' in the right sidebar. If you're new to TiddlyWiki check out the formatting info [[here|http://www.tiddlywiki.com/#MainFeatures]].\n\nUse this to import tiddlers from another TiddlyWiki. You can use a local file (click Browse...) or type the url of an online TiddlyWiki.\n<<importTiddlers inline>>\nTo change your colour scheme you can edit the styles in StyleSheet. (Refer to StyleSheetColors and StyleSheetLayout for all styles used).\n\n
[[Last year|http://moodle.org/mod/forum/discuss.php?d=43938]] (15th April 2006) Martin Dougiamas was accepted as a mentor for the Google Summer of Code. The projects he operated are listed [[here|http://docs.moodle.org/en/Student_projects]] and there is also a [[Moodle listing|http://code.google.com/soc/moodle/about.html]] on the GOS site.\n\nA successful project description for [[Moodle Admin Page Cleanup|http://code.google.com/soc/moodle/appinfo.html?csaid=51F3FDBADF3CD88E]] was submitted by a student called [[Vincenzo K. Marcovecchio|http://vkm.ca/?s=soc2006-moodle-app]] from Canada.\n\nThe [[Drupal|http://drupal.org]] site has a well organized [[SOC 2006 page|http://drupal.org/google-summer-of-code-2006]] with HOWTO instructions for students to write a good application and a list of mentoring people.
!!Possible Project ideas:\n!!! Web services API\n> This [[Moodle docs entry|http://docs.moodle.org/en/Web_Services_API]] gives more details. \n> It seems like developers such as Brian King and Martin Langhoff are currently working on [[Web Services / API / Refactoring Opportunity|http://moodle.org/mod/forum/discuss.php?d=51752&parent=289480]]\n!!!Stand alone Moodle client\n> There seems to be [[some interest|http://moodle.org/mod/forum/discuss.php?d=45633]] in a stand alone Moodle client using [[Mozilla XUL|http://www.oreillynet.com/pub/a/mozilla/2002/12/17/app_dev.html]] rather like Blackboard's [[backpack|http://backpack.blackboard.com/Default.aspx]]\n!!!Assessment/Outcomes\n> Martin Dougiamas is keen on an outcomes/competencies system [[discussion here|http://moodle.org/mod/forum/discuss.php?d=63577&mode=3]] , references : [[Development:Outcomes|http://docs.moodle.org/en/Metadata]] and [[Development:Grades|http://docs.moodle.org/en/Development:Grades]]\n
!! [[Programme timeline for 2007|http://code.google.com/support/bin/answer.py?answer=60325&topic=10450]]\n| March 5:|Mentoring organizations can begin submitting applications to Google|\n| !March 12:|''Mentoring organization application deadline''|\n| March 13:|Google program administrators review organization applications|\n| March 14:|List of accepted mentoring organizations published on code.google.com; student application period opens|\n| !March 24:|''Student application deadline''|\n|Interim Period:|Mentoring organizations review and rank student proposals; where necessary, mentoring organizations may request further proposal detail from the student applicant|\n| !April 9:|List of accepted student applications published on code.google.com|\n|Interim Period:|Students learn more about their project communities|\n| May 28:|Students begin coding for their GSoC projects; Google begins issuing initial student payments|\n|Interim Period:|Mentors give students a helping hand and guidance on their projects|\n| July 9:|Students upload code to code.google.com/hosting; mentors begin mid-term evaluations|\n| July 16:|Mid-term evaluation deadline; Google begins issuing mid-term student payments|\n| August 20:|Students upload code to code.google.com/hosting; mentors begin final evaluations; students begin final program evaluations|\n| August 31:|Final evaluation deadline; Google begins issuing student and mentoring organization payments|\n
!!What is [[Google Summer of code|http://code.google.com/support/bin/topic.py?topic=10442]]?\nThis is an initiative by Google to fund student work on Open Source projects. Organizations apply to become a [[mentoring organization|http://code.google.com/support/bin/topic.py?topic=10447]] and advertize O.S projects for students to work on. Google funds the students directly.\nQuoting from the [[Knowledgebase page for Mentors|http://code.google.com/support/bin/topic.py?topic=10442]] :\n<<<\nGoogle Summer of Code 2006 is a program that offers student developers stipends to create new open source programs or to help currently established projects. Google will be working with a variety of open source, free software, and technology-related groups to identify and fund several hundred projects over a three-month period. The inaugural instance of the program, which took place last summer, brought together 400 students and 40 mentoring organizations from 49 countries. We'd like to include even more organizations and participants this year.\n\nThe program's goals are to inspire young developers and provide students in Computer Science and related fields the opportunity to do work related to their academic pursuits during the summer, and to support existing open source projects and organizations. Since we're looking to find developers around the world (many of whom may have considered creating open source software but haven't yet taken the plunge), we felt that concentrating on the student population was a good place to focus our efforts. Further, since no single organization could possibly mentor hundreds of students working on disparate projects, we thought it made sense to spread the work throughout the open source and free software community. We also think that the Apache Software Foundation (for instance) knows a lot more about what an Apache project needs than Google does and is more likely to ensure that an applicant gets the right kind of guidance so they can create acceptable code.\n<<<\n<<faqlist byTag GSCode title hr>>
There is a 'download to Excel' option in the Gradebook. However, if you have an assignment with a scalar grade, ie non-numeric & a user scale, there are no contents in the Excel file. The text download does contain the data but it's a pain to have to import it into Excel.
Monteze (and most other Earlham faculty) grade assignments with letter grades only. The Moodle gradebook does not support these very well. The "Download in Excel format" button yields an empty file when all the assignments are letter graded. Thus the code for this does not handle text fields. On the other hand, the 'Download in text format' process produces a file with all the assignments in it ''but'' you then have to use Data -> Import to get it into Excel.
!!Problems with Grading\nemail from Welling Hall:\n<<<\nPer earlier exchange, basically the "save and show next" feature on Moodle for Moodle grading is unreliable at best. I have lost grading in both Intro to IR and The Bomb.\n<<<
Types of graphics:\n# Digital camera images\n# scanned images from print\n# images downloaded from web\n# 35 mm slides\nMethods of storage, presentation, & dissemination:\n* files in folders\n* powerpoint presentations\n* static web pages (open to world)\n* album or gallery -- perhaps on the web. Display a number of related images with thumbnails and larger image\n* database -- search for images and find wanted images easily. No call for sharing images since subjects areas very specialized.\n** for web based image presentation issue of authenticated access vs open access (copyright stuff).\n<<faqlist byTag SciDiv title hr>>\n!!Solutions\n* any database solution needs to be easy to use, and quick to use. Little typing required - thus elaborate metadata fields are out.\n* need to be able to search and find items easily whether from database or other web format.\n* John needs to share image sets with colleagues but we're not interested in shared image databases here.\n* getting 35mm slides scanned and processed is a major issue.
!!Transitioning Academic Years\nI emailed Owen Stephens on 4^^th^^ April with the following question:\n<<<\nHow are you handling the academic year to year transition? Some places remove all last year's courses, for various reasons we have been starting from scratch with a new database (postgres -> MySQL) every year until this year. I'm thinking that having the previous year's courses available online will make reusing content a lot easier. So this raises the issue of assigning unique 'short names'. I have been using the course name concatenated with the Banner termcode. So, POLS107 becomes POLS107:0720 with a graduation yeer of 07 and spring semester 02. I noticed that you have two sets of numbers as in "CL1541 (61910) CL1541:Introduction to Ancient Philosophy" -- which is the CRN in this example?\n<<<\nHis reply:\n<<<\nOur transition between academic years in still in discussion. We originally intended to create blank courses for all Banner courses, and make it the tutors responsibility to backup and restore from last years course to this years course. However today I've been asked to reconsider this because of a fear that having to do the restore will put tutors off, so we are looking at ways of creating the new courses with content intact.\nWe are going to have to revisit our current naming conventions currently we have:\n \nShort name: BS1040 (60020)\nCourse ID Number: 60020\n> '60020' is the CRN.\n \nI suspect we will do something similar to your description - rename this something like:\n \nShort name: BS1040 (600200607)\nCourse ID Number: 600200607\n> Using the same idea of concatenating our CRN (60020) with the term code (0607 - representing academic year 2006/2007)\n \nAlthough not finalised I suspect we will do something like:\nOn 30th June (or agreed date) -\n* Update all enrolments/registrations on 2006/07 courses from Database driven to Manual\n* Update Short names and Course ID Numbers for 2006/07 courses as described above by SQL\n* Update the Banner query that Moodle uses to look at enrolments to use the 07/08 term data\n* Create the new courses with the Short names and Course ID Numbers to be 'vanilla' (that is, without an active term qualifier)\n* Populate the new courses with course material\n<<<
Cheap headsets available from [[Skype Accessories|http://us.accessories.skype.com/direct/skypeusa/accessoriesList.jsp?acctype=6]] :\n* [[Logitech® USB Headset 250|http://us.accessories.skype.com/direct/skypeusa/itemdetl.jsp?prod=2857]] $40\n* [[Logitech® Premium USB Headset 350|http://us.accessories.skype.com/direct/skypeusa/itemdetl.jsp?prod=2858]] $50\n* [[Plantronics DSP-400 Foldable Stereo PC Headset|http://us.accessories.skype.com/direct/skypeusa/itemdetl.jsp?prod=2900]] $80\n* [[Plantronics DSP-500 Multimedia Stereo PC Headset|http://us.accessories.skype.com/direct/skypeusa/itemdetl.jsp?prod=2901]] $85\n\nAll are advertised to function with the Mac.\n\n
/***\n| Name:|HideWhenPlugin|\n| Description:|Allows conditional inclusion/exclusion in templates|\n| Version:|6.1.2|\n| Date:|20-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\nFor use in ViewTemplate and EditTemplate. Eg\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.removeElementWhen = function(test,place) {\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }}\n\n});\n\n//}}}\n\n
/***\nTo use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #39a; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink {\n margin-left:0.5em; margin-right:0.5em;\n padding-left:3px; padding-right:3px;\n color:white; font-size:100%;\n}\n#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#178;}\n\n#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\n#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\n\n\n/*}}}*/
\n<<top>><<icon top.gif 16 16>>\n<<toggleSideBar '' '' hide>><<icon toggle.gif 16 16>>\n<<jump j '' top>><<icon jump.gif 16 16>>\n<<fullscreen f>><<icon full.gif 16 16>>\n
/***\n|Name|HoverMenuPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#HoverMenuPlugin|\n|Version|1.11|\n|Requires|~TW2.x|\n!Description:\nProvides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.\n\n!Demo:\nObserve the hovering menu on the right edge of the screen.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nTo customize your HoverMenu, edit the HoverMenu shadow tiddler.\n\nTo customize whether the menu sticks to the right or left edge of the screen, and its start position, edit the HoverMenu configuration settings part of the code below. It's well documented, so don't be scared!\n\nThe menu has an id of hoverMenu, in case you want to style the buttons in it using css.\n\n!Notes:\nSince the default HoverMenu contains buttons for toggling the side bar and jumping to the top of the screen and to open tiddlers, the ToggleSideBarMacro, JumpMacro and the JumpToTopMacro are included in this tiddler, so you dont need to install them separately. Having them installed separately as well could lead to complications.\n\nIf you dont intend to use these three macros at all, feel free to remove those sections of code in this tiddler.\n\n!To Do:\n* rework code to allow multiple hovering menus in different positions, horizontal etc.\n* incorporate code for keyboard shortcuts that correspond to the buttons in the hovermenu\n\n!History:\n*03-08-06, ver 1.1.2: compatibility fix with SelectThemePlugin\n*03-08-06, ver 1.11: fixed error with button tooltips\n*27-07-06, ver 1.1 : added JumpMacro to hoverMenu\n*23-07-06\n\n!Code\n***/\n\n/***\nstart HoverMenu plugin code\n***/\n//{{{\nconfig.hoverMenu={};\n//}}}\n\n/***\nHoverMenu configuration settings\n***/\n//{{{\nconfig.hoverMenu.settings={\n align: 'right', //align menu to right or left side of screen, possible values are 'right' and 'left' \n x: 1, // horizontal distance of menu from side of screen, increase to your liking.\n y: 158 //vertical distance of menu from top of screen at start, increase or decrease to your liking\n };\n//}}}\n\n//{{{\n//continue HoverMenu plugin code\nconfig.hoverMenu.handler=function()\n{ \n if (!document.getElementById("hoverMenu"))\n {\n var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");\n theMenu.setAttribute("refresh","content");\n theMenu.setAttribute("tiddler","HoverMenu");\n var menuContent = store.getTiddlerText("HoverMenu");\n wikify(menuContent,theMenu);\n }\n\n var Xloc = this.settings.x;\n Yloc =this.settings.y;\n var ns = (navigator.appName.indexOf("Netscape") != -1);\n function SetMenu(id)\n {\n var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];\n if(document.layers)GetElements.style=GetElements;\n GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};\n GetElements.x = Xloc;\n GetElements.y = findScrollY();\n GetElements.y += Yloc;\n return GetElements;\n }\n window.LoCate_XY=function()\n {\n var pY = findScrollY();\n ftlObj.y += (pY + Yloc - ftlObj.y)/15;\n ftlObj.sP(ftlObj.x, ftlObj.y);\n setTimeout("LoCate_XY()", 10);\n }\n ftlObj = SetMenu("hoverMenu");\n LoCate_XY();\n};\n\nwindow.old_lewcid_hovermenu_restart = restart;\nrestart = function()\n{\n window.old_lewcid_hovermenu_restart();\n config.hoverMenu.handler();\n};\n\nsetStylesheet(\n"#hoverMenu .imgLink, #hoverMenu .imgLink:hover {border:none; padding:0px; float:right; margin-bottom:2px; margin-top:0px;}\sn"+\n"#hoverMenu .button, #hoverMenu .tiddlyLink {border:none; font-weight:bold; background:#18f; color:#FFF; padding:0 5px; float:right; margin-bottom:4px;}\sn"+\n"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#fff; background:#000; padding:0 5px; float:right; margin-bottom:4px;}\sn"+\n"#hoverMenu .button {width:100%; text-align:center}"+\n"#hoverMenu { position:absolute; width:7px;}\sn"+\n"\sn","hoverMenuStyles");\n\n\nconfig.macros.renameButton={};\nconfig.macros.renameButton.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n\n if (place.lastChild.tagName!="BR")\n {\n place.lastChild.firstChild.data = params[0];\n if (params[1]) {place.lastChild.title = params[1];}\n }\n};\n\nconfig.shadowTiddlers["HoverMenu"]="<<top>>\sn<<toggleSideBar>><<renameButton '>' >>\sn<<jump j '' top>>\sn<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>\sn<<newTiddler>><<renameButton n>>\sn";\n//}}}\n//end HoverMenu plugin code\n\n//Start ToggleSideBarMacro code\n//{{{\nconfig.macros.toggleSideBar={};\n\nconfig.macros.toggleSideBar.settings={\n styleHide : "#sidebar { display: none;}\sn"+"#contentWrapper #displayArea { margin-right: 1em;}\sn"+"",\n styleShow : " ",\n arrow1: "«",\n arrow2: "»"\n};\n\nconfig.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var tooltip= params[1]||'toggle sidebar';\n var mode = (params[2] && params[2]=="hide")? "hide":"show";\n var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;\n var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;\n var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");\n if (mode == "hide")\n { \n (document.getElementById("sidebar")).setAttribute("toggle","hide");\n setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");\n }\n};\n\nconfig.macros.toggleSideBar.onToggleSideBar = function(){\n var sidebar = document.getElementById("sidebar");\n var settings = config.macros.toggleSideBar.settings;\n if (sidebar.getAttribute("toggle")=='hide')\n {\n setStylesheet(settings.styleShow,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","show");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);\n }\n else\n { \n setStylesheet(settings.styleHide,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","hide");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);\n }\n\n return false;\n}\n\nsetStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\sn","ToggleSideBarButtonStyles");\n//}}}\n//end ToggleSideBarMacro code\n\n//start JumpToTopMacro code\n//{{{\nconfig.macros.top={};\nconfig.macros.top.handler=function(place,macroName)\n{\n createTiddlyButton(place,"^","jump to top",this.onclick);\n}\nconfig.macros.top.onclick=function()\n{\n window.scrollTo(0,0);\n};\n\nconfig.commands.top =\n{\n text:" ^ ",\n tooltip:"jump to top"\n};\n\nconfig.commands.top.handler = function(event,src,title)\n{\n window.scrollTo(0,0);\n}\n//}}}\n//end JumpToStartMacro code\n\n//start JumpMacro code\n//{{{\nconfig.macros.jump= {};\nconfig.macros.jump.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = (params[0] && params[0]!=".")? params[0]: 'jump';\n var tooltip = (params[1] && params[1]!=".")? params[1]: 'jump to an open tiddler';\n var top = (params[2] && params[2]=='top') ? true: false; \n\n var btn =createTiddlyButton(place,label,tooltip,this.onclick);\n if (top==true)\n btn.setAttribute("top","true")\n}\n\nconfig.macros.jump.onclick = function(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var top = theTarget.getAttribute("top");\n var popup = Popup.create(this);\n if(popup)\n {\n if(top=="true")\n {createTiddlyButton(createTiddlyElement(popup,"li"),'Top ↑','Top of TW',config.macros.jump.top);\n createTiddlyElement(popup,"hr");}\n \n story.forEachTiddler(function(title,element) {\n createTiddlyLink(createTiddlyElement(popup,"li"),title,true);\n });\n }\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nconfig.macros.jump.top = function()\n{\n window.scrollTo(0,0);\n}\n//}}}\n//end JumpMacro code\n\n//utility functions\n//{{{\nPopup.show = function(unused,slowly)\n{\n var curr = Popup.stack[Popup.stack.length-1];\n var rootLeft = findPosX(curr.root);\n var rootTop = findPosY(curr.root);\n var rootHeight = curr.root.offsetHeight;\n var popupLeft = rootLeft;\n var popupTop = rootTop + rootHeight;\n var popupWidth = curr.popup.offsetWidth;\n var winWidth = findWindowWidth();\n if (isChild(curr.root,'hoverMenu'))\n var x = config.hoverMenu.settings.x;\n else\n var x = 0;\n if(popupLeft + popupWidth+x > winWidth)\n popupLeft = winWidth - popupWidth -x;\n if (isChild(curr.root,'hoverMenu'))\n {curr.popup.style.right = x + "px";}\n else\n curr.popup.style.left = popupLeft + "px";\n curr.popup.style.top = popupTop + "px";\n curr.popup.style.display = "block";\n addClass(curr.root,"highlight");\n if(config.options.chkAnimate)\n anim.startAnimating(new Scroller(curr.popup,slowly));\n else\n window.scrollTo(0,ensureVisible(curr.popup));\n}\n\nwindow.isChild = function(e,parentId) {\n while (e != null) {\n var parent = document.getElementById(parentId);\n if (parent == e) return true;\n e = e.parentNode;\n }\n return false;\n};\n//}}}\n\n\n
//{{{\n// version: beta 1.1\n//replace macro buttons with icons\n// params[0] = image location\n//params[1] = image width\n//params[2] = image height\n//params[3] = image title (optional)\nconfig.macros.icon={};\nconfig.macros.icon.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n\n if (place.lastChild.tagName!="BR")\n {\n var tempTitle = place.lastChild.firstChild.title;\n removeChildren(place.lastChild);\n place.lastChild.className = "imgLink";\n var img = createTiddlyElement(place.lastChild,"img");\n img.src = params[0];\n if (params[3])\n img.title = params[3];\n img.width= params[1];\n img.height =params[2];\n }\n};\n\n//use icons for toolbar commands.\n// used in view template like:\n// <span macro='commandIcon jump jump.bmp'></span>\n//params[0] = command name\n//params[1] = image location\nconfig.macros.commandIcon={};\nconfig.macros.commandIcon.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{if(!e) var e = window.event;\n var img = createTiddlyElement(place,"img",null,"toolbarImg");\n img.src = params[1];\n img.onclick = function(){config.commands[params[0]].handler(e,place,story.findContainingTiddler(place).getAttribute("tiddler"));};\n img.title = config.commands[params[0]].tooltip;\n}\n\nsetStylesheet(".toolbarImg {vertical-align: middle; cursor:pointer;}\sn","commandIconStyles"); \n\n//}}}
/***\n|''Name:''|ImportTiddlersPlugin|\n|''Source:''|http://www.TiddlyTools.com/#ImportTiddlersPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. It can also be very extremely helpful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\nThis plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. An interactive control panel lets you pick a document to import from, and then select which tiddlers to import, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles. Automatically add tags to imported tiddlers so they are easy to find later on. Generates a detailed report of import 'history' in ImportedTiddlers.\n!!!!!Interactive interface\n<<<\n{{{<<importTiddlers>>}}} or {{{<<importTiddlers core>>}}}\ninvokes the built-in importTiddlers macro (TW2.1.x+). If installed in documents using TW2.0.x or earlier, fallback is to use 'link' display (see below)\n\n{{{<<importTiddlers link>>}}}\ncreates "import tiddlers" link that when clicked to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n<<importTiddlers inline>>\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''select: all, new, changes, or differences''\n\nYou can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:\n>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document\n>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!non-interactive 'load tiddlers' macro\n<<<\nUseful for automated installation/update of plugins and other tiddler content.\n\n{{{<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>}}}\n<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>\n\nSyntax:\n{{{<<loadTiddlers label:text prompt:text filter source quiet confirm>>}}}\n\n''label:text'' and ''prompt:text''\n>defines link text and tooltip (prompt) that can be clicked to trigger the load tiddler processing. If a label is NOT provided, then no link is created and loadTiddlers() is executed whenever the containing tiddler is rendered.\n''filter'' (optional) determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"tiddler:~TiddlerName"'' retrieves only the specific tiddler named in the parameter.\n>''"tag:text"'' retrieves only the tiddlers tagged with the indicated text.\n''source'' (required) is the location of the imported document. It can be either a local document path/filename in whatever format your system requires, or a remote web location (starting with "http://" or "https://")\n>use the keyword ''ask'' to prompt for a source location whenever the macro is invoked\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"confirm"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n''2006.11.14 [3.1.2]'' fix macro handler parameter declaration (double-pasted param list corrupts IE)\n''2006.11.13 [3.1.1]'' use apply() method to invoke hijacked core handler\n''2006.11.13 [3.1.0]'' hijack TW2.1 built-in importTiddlers.handler() so it can co-exist with the plugin interface 'panel'. Use macro without params (or use 'core' keyword) to display built-in core interface. Use new "link" param to embed "import tiddlers" link that shows floating panel when clicked. Renamed a few plugin utility functions so they don't collide with core internal functions. More code restructuring to come.\n''2006.10.12 [3.0.8]'' in readTiddlersFromHTML(), fallback to find end of store area by matching "/body" when POST-BODY-START is not present (backward compatibility for older documents)\n''2006.09.10 [3.0.7]'' in readTiddlersFromHTML(), find end of store area by matching "POST-BODY-START" instead of "/body" \n''2006.08.16 [3.0.6]'' Use higher-level store.saveTiddler() instead of store.addTiddler() to avoid conflicts with ZW and other adaptations that hijack low-level tiddler handling. Also, in CreateImportPanel(), no longer register notify to "refresh listbox after every tiddler change" (left over from old 'auto-filtered' list handling). Thanks to Bob McElrath for report/solution.\n''2006.07.29 [3.0.5]'' added noChangeMsg to loadTiddlers processing. if not 'quiet' mode, reports skipped tiddlers.\n''2006.04.18 [3.0.4]'' in loadTiddlers.handler, fixed parsing of "prompt:" param. Also, corrected parameters mismatch in loadTiddlers() callback function definition (order of params was wrong, resulting in filters NOT being applied)\n''2006.04.12 [3.0.3]'' moved many display messages to macro properties for easier L10N translations via 'lingo' definitions.\n''2006.04.12 [3.0.2]'' additional refactoring of 'core candidate' code. Proposed API now defines "loadRemoteFile()" for XMLHttpRequest processing with built in fallback for handling local filesystem access, and readTiddlersFromHTML() to process the resulting source HTML content.\n''2006.04.04 [3.0.1]'' in refreshImportList(), when using [by tags], tiddlers without tags are now included in a new "untagged" psuedo-tag list section\n''2006.04.04 [3.0.0]'' Separate non-interactive {{{<<importTiddlers...>>}}} macro functionality for incorporation into TW2.1 core and renamed as {{{<<loadTiddlers>>}}} macro. New parameters for loadTiddlers: ''label:text'' and ''prompt:text'' for link creation, ''ask'' for filename/URL, ''tag:text'' for filtering, "confirm" for accept/reject of individual inbound tiddlers. Also, ImportedTiddlers report generator output has been simplified and "importReplace/importPublic" tags and associated "force" param (which were rarely, if ever, used) has been dropped.\n''2006.03.30 [2.9.1]'' when extracting store area from remote URL, look for "</body>" instead of "</body>\sn</html>" so it will match even if the "\sn" is absent from the source.\n''2006.03.30 [2.9.0]'' added optional 'force' macro param. When present, autoImportTiddlers() bypasses the checks for importPublic and importReplace. Based on a request from Tom Otvos.\n''2006.03.28 [2.8.1]'' in loadImportFile(), added checks to see if 'netscape' and 'x.overrideMimeType()' are defined (IE does *not* define these values, so we bypass this code)\nAlso, when extracting store area from remote URL, explicitly look for "</body>\sn</html>" to exclude any extra content that may have been added to the end of the file by hosting environments such as GeoCities. Thanks to Tom Otvos for finding these bugs and suggesting some fixes.\n''2006.02.21 [2.8.0]'' added support for "tiddler:TiddlerName" filtering parameter in auto-import processing\n''2006.02.21 [2.7.1]'' Clean up layout problems with IE. (Use tables for alignment instead of SPANs styled with float:left and float:right)\n''2006.02.21 [2.7.0]'' Added "local file" and "web server" radio buttons for selecting dynamic import source controls in ImportPanel. Default file control is replaced with URL text input field when "web server" is selected. Default remote document URL is defined in SiteURL tiddler. Also, added option for prepending SiteProxy URL as prefix to remote URL to mask cross-domain document access (requires compatible server-side script)\n''2006.02.17 [2.6.0]'' Removed "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.\n''2006.02.16 [2.5.4]'' added checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.\n''2006.02.14 [2.5.3]'' FF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()\n''2006.02.10 [2.5.2]'' corrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]'' moved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]'' added checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]'' added "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]'' Added support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]'' Added "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]'' Strip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]'' Reorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]'' Added "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]'' When a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]'' IMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]'' When refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]'' When "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]'' Update for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]'' tweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]'' Dynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]'' fixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]'' added 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]'' only load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]'' fixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]'' combined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]'' moved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // ''MACRO DEFINITION''\n//{{{\n// Version\nversion.extensions.importTiddlers = {major: 3, minor: 1, revision: 2, date: new Date(2006,11,14)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onClickImportButton=onClickImportButton;\nwindow.refreshImportList=refreshImportList;\n\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\n// fixups for TW2.0.x and earlier\nif (window.merge==undefined) window.merge=function(dst,src,preserveExisting)\n { for (p in src) if (!preserveExisting||dst[p]===undefined) dst[p]=src[p]; return dst; }\nif (config.macros.importTiddlers==undefined) config.macros.importTiddlers={ };\n\nmerge(config.macros.importTiddlers,{\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n foundMsg: "Found %0 tiddlers in %1",\n countMsg: "%0 tiddlers selected for import",\n importedMsg: "Imported %0 of %1 tiddlers from %2",\n src: "", // path/filename or URL of document to import (retrieved from SiteUrl tiddler)\n proxy: "", // URL for remote proxy script (retrieved from SiteProxy tiddler)\n useProxy: false, // use specific proxy script in front of remote URL\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: "", // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 8, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n});\n\nif (config.macros.importTiddlers.coreHandler==undefined)\n config.macros.importTiddlers.coreHandler=config.macros.importTiddlers.handler; // save built-in handler\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if (!params[0] || params[0].toLowerCase()=='core') { // default to built in\n if (config.macros.importTiddlers.coreHandler)\n config.macros.importTiddlers.coreHandler.apply(this,arguments);\n else \n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n }\n else if (params[0]=='link') // show link to floating panel\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n else if (params[0]=='inline') {// show panel as INLINE tiddler content\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n }\n else config.macros.loadTiddlers.handler(place,macroName,params); // any other params: loadtiddlers\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n refreshImportList();\n var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";\n document.getElementById("importSourceURL").value=siteURL;\n config.macros.importTiddlers.src=siteURL;\n var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";\n document.getElementById("importSiteProxy").value=siteProxy;\n config.macros.importTiddlers.proxy=siteProxy;\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\s\n#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#importPanel .rad { width:auto; }\s\n#importPanel .chk { width:auto; margin:1px;border:0; }\s\n#importPanel .btn { width:auto; }\s\n#importPanel .btn1 { width:98%; }\s\n#importPanel .btn2 { width:48%; }\s\n#importPanel .btn3 { width:32%; }\s\n#importPanel .btn4 { width:24%; }\s\n#importPanel .btn5 { width:19%; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importCollisionPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML \n//{{{\nconfig.macros.importTiddlers.html = '\s\n<!-- source and report -->\s\n<table><tr><td align=left>\s\n import from\s\n <input type="radio" class="rad" name="importFrom" value="file" CHECKED\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=!this.checked?\s'block\s':\s'none\s'"> local file\s\n <input type="radio" class="rad" name="importFrom" value="http"\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=!this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> web server\s\n</td><td align=right>\s\n <input type=checkbox class="chk" id="chkImportReport" checked\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;"> create a report\s\n</td></tr></table>\s\n<!-- import from local file -->\s\n<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\nlocal document path/filename:<br>\s\n<input type="file" id="fileImportSource" size=57 style="width:100%"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<!-- import from http server -->\s\n<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\n<table><tr><td align=left>\s\n remote document URL:<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="importUseProxy"\s\n onClick="config.macros.importTiddlers.useProxy=this.checked;\s\n document.getElementById(\s'importSiteProxy\s').style.display=this.checked?\s'block\s':\s'none\s'"> use a proxy script\s\n</td></tr></table>\s\n<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\s\n onKeyUp="config.macros.importTiddlers.proxy=this.value"\s\n onChange="config.macros.importTiddlers.proxy=this.value;">\s\n<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<table><tr><td align=left>\s\n select:\s\n <a href="JavaScript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this)" title="select all tiddlers">\s\n &nbsp;all&nbsp;</a>\s\n <a href="JavaScript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\s\n &nbsp;added&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\s\n &nbsp;changes&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\s\n &nbsp;differences&nbsp;</a> \s\n <a href="JavaScript:;" id="importToggleFilter"\s\n onclick="onClickImportButton(this)" title="show/hide selection filter">\s\n &nbsp;filter&nbsp;</a> \s\n</td><td align=right>\s\n <a href="JavaScript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this)" title="reduce list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n <a href="JavaScript:;" id="importListLarger"\s\n onclick="onClickImportButton(this)" title="increase list size">\s\n &nbsp;+&nbsp;</a>\s\n <a href="JavaScript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">\s\n &nbsp;=&nbsp;</a>\s\n</td></tr></table>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<input type=checkbox class="chk" id="chkAddTags" checked\s\n onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags &nbsp;\s\n<input type=checkbox class="chk" id="chkImportTags" checked\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags &nbsp;\s\n<input type=checkbox class="chk" id="chkKeepTags" checked\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\s\n<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:32%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:32%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:32%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importCollisionPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theCollisionPanel = document.getElementById('importCollisionPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n config.macros.importTiddlers.loadRemoteFile(config.macros.importTiddlers.src, function(src,txt) {\n var tiddlers = readTiddlersFromHTML(txt);\n var count=tiddlers?tiddlers.length:0;\n displayMessage(config.macros.importTiddlers.foundMsg.format([count,src]));\n config.macros.importTiddlers.inbound=tiddlers;\n window.refreshImportList(0);\n });\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importToggleFilter': // show/hide filter\n case 'importFilter': // apply filter\n alert("coming soon!");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: ';\n theText +='[['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn';\n theText +='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=config.macros.importTiddlers.listsize;\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n return; // no refresh needed\n }\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers=config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n if (!tags || !tags.length) {\n if (theTitles["untagged"]==undefined) { theTags.push("untagged"); theTitles["untagged"]=new Array(); }\n theTitles["untagged"].push(title);\n }\n else for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var inbound = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(inbound.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (inbound.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (inbound.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (inbound.status.substr(0,7)!="replace") && (inbound.status.substr(0,5)!="merge"))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = "";\n if (config.macros.importTiddlers.importTags)\n newTags+=inbound.getTags() // import remote tags\n if (config.macros.importTiddlers.keepTags && theExisting)\n newTags+=" "+theExisting.getTags(); // keep existing tags\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newTags+=" "+config.macros.importTiddlers.newTags; // add new tags\n inbound.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n inbound.status=(inbound.status=="")?'added':inbound.status;\n // do the import!\n // OLD: store.addTiddler(in); store.setDirty(true);\n store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);\n store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the collision panel and set the title edit field\n document.getElementById('importCollisionPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the collision panel will still be open... close it now.\n var panel=document.getElementById('importCollisionPanel'); if (panel) panel.style.display='none';\n\n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n // gather the statistics\n var count=0;\n for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].status && tiddlers[t].status.trim().length && tiddlers[t].status.substr(0,7)!="skipped") count++;\n\n // generate a report\n if (count && config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName\n newText +=" imported "+count+" tiddler"+(count==1?"":"s")+" from\sn[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.newTags+"\s"\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n// 20060918 ELS: DON'T ADD "discard" BUTTON TO REPORT\n// newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n// newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n// newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n // OLD: store.addTiddler(theReport);\n store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n\n // reset status flags\n for (var t=0; t<config.macros.importTiddlers.inbound.length; t++) config.macros.importTiddlers.inbound[t].status="";\n\n // refresh display if tiddlers have been loaded\n if (count) { store.setDirty(true); store.notifyAll(); }\n\n // always show final message when tiddlers were actually loaded\n if (count) displayMessage(config.macros.importTiddlers.importedMsg.format([count,tiddlers.length,config.macros.importTiddlers.src]));\n}\n//}}}\n\n/***\n!!!!! non-interactive 'load tiddlers' macro\n***/\n//{{{\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\nconfig.macros.loadTiddlers = {\n label: "",\n prompt: "add/update tiddlers from '%0'",\n askMsg: "Please enter a local path/filename or a remote URL",\n openMsg: "Opening %0",\n openErrMsg: "Could not open %0 - error=%1",\n readMsg: "Read %0 bytes from %1",\n foundMsg: "Found %0 tiddlers in %1",\n nochangeMsg: "'%0' is up-to-date... skipped.",\n loadedMsg: "Loaded %0 of %1 tiddlers from %2"\n};\n\nconfig.macros.loadTiddlers.handler = function(place,macroName,params) {\n var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;\n var prompt=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.prompt;\n var filter="updates";\n if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'\n || params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))\n filter=params.shift();\n var src=params.shift(); if (!src || !src.length) return; // filename is required\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="confirm"); if (ask) params.shift();\n var force=(params[0]=="force"); if (force) params.shift();\n if (label.trim().length) {\n // link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store\n createTiddlyButton(place,label.format([src]),prompt.format([src]), function() {\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n config.macros.importTiddlers.loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);\n })\n }\n else {\n // load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n config.macros.importTiddlers.loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);\n }\n}\n\nfunction loadTiddlers(src,html,quiet,ask,filter,force)\n{\n var tiddlers = readTiddlersFromHTML(html);\n var count=tiddlers?tiddlers.length:0;\n if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src]));\n var count=0;\n if (tiddlers) for (var t=0;t<tiddlers.length;t++) {\n var inbound = tiddlers[t];\n var theExisting = store.getTiddler(inbound.title);\n if (inbound.title=='ImportedTiddlers')\n continue; // skip "ImportedTiddlers" history from the other document...\n\n // apply the all/new/changes/updates filter (if any)\n if (filter && filter!="all") {\n if ((filter=="new") && theExisting) // skip existing tiddlers\n continue;\n if ((filter=="changes") && !theExisting) // skip new tiddlers\n continue;\n if ((filter.substr(0,4)=="tag:") && inbound.tags.find(filter.substr(4))==null) // must match specific tag value\n continue;\n if ((filter.substr(0,8)=="tiddler:") && inbound.title!=filter.substr(8)) // must match specific tiddler name\n continue;\n if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0))\n { if (!quiet) displayMessage(config.macros.loadTiddlers.nochangeMsg.format([inbound.title])); continue; }\n }\n // get confirmation if required\n if (ask && !confirm((theExisting?"Update":"Add")+" tiddler '"+inbound.title+"'\snfrom "+src))\n { tiddlers[t].status="skipped - cancelled by user"; continue; }\n // DO IT!\n // OLD: store.addTiddler(in);\n store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);\n store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value\n tiddlers[t].status=theExisting?"updated":"added"\n count++;\n }\n if (count) {\n // refresh display\n store.setDirty(true);\n store.notifyAll();\n // generate a report\n if (config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName+" loaded "+count+" tiddlers from\sn[["+src+"|"+src+"]]:\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n// 20060918 ELS: DON'T ADD "discard" BUTTON TO REPORT\n// newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n// newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n// newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n // OLD: store.addTiddler(theReport);\n store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n }\n // always show final message when tiddlers were actually loaded\n if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src]));\n}\n\n// replaces existing core function\n\nconfig.macros.importTiddlers.loadRemoteFile = function(src,callback,quiet,ask,filter,force) {\n if (src==undefined || !src.length) return null; // filename is required\n if (!quiet) clearMessage();\n if (!quiet) displayMessage(config.macros.loadTiddlers.openMsg.format([src]));\n if (src.substr(0,4)!="http" && src.substr(0,4)!="file") { // if not a URL, fallback to read from local filesystem\n var txt=loadFile(src);\n if ((txt==null)||(txt==false)) // file didn't load\n { if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"])); }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([txt.length,src]));\n if (callback) callback(src,convertUTF8ToUnicode(txt),quiet,ask,filter,force);\n }\n }\n else {\n var x; // get an request object\n try {x = new XMLHttpRequest()} // moz\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")} // IE 6\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")} // IE 5\n catch (e) { return }\n }\n }\n // setup callback function to handle server response(s)\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status==0 || x.status == 200) {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([x.responseText.length,src]));\n if (callback) callback(src,x.responseText,quiet,ask,filter,force);\n }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,x.status]));\n }\n }\n }\n // get privileges to read another document's DOM via http:// or file:// (moz-only)\n if (typeof(netscape)!="undefined") {\n try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n // send the HTTP request\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",src,true);\n if (x.overrideMimeType) x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"]));\n displayMessage(e.description?e.description:e.toString());\n }\n }\n }\n}\n\nfunction readTiddlersFromHTML(html)\n{\n // extract store area from html \n var start=html.indexOf('<div id="storeArea">');\n var end=html.indexOf("<!--POST-BODY-START--"+">",start);\n if (end==-1) var end=html.indexOf("</body"+">",start); // backward-compatibility for older documents\n var sa="<html><body>"+html.substring(start,end)+"</body></html>";\n\n // load html into iframe document\n var f=document.getElementById("loaderFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="loaderFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.open(); d.writeln(sa); d.close();\n\n // read tiddler DIVs from storeArea DOM element \n var sa = d.getElementById("storeArea");\n if (!sa) return null;\n sa.normalize();\n var nodes = sa.childNodes;\n if (!nodes || !nodes.length) return null;\n var tiddlers = [];\n for(var t = 0; t < nodes.length; t++) {\n var title = null;\n if(nodes[t].getAttribute)\n title = nodes[t].getAttribute("tiddler");\n if(!title && nodes[t].id && (nodes[t].id.substr(0,5) == "store"))\n title = nodes[t].id.substr(5);\n if(title && title != "")\n tiddlers.push((new Tiddler()).loadFromDiv(nodes[t],title));\n }\n return tiddlers;\n}\n//}}}
On Tuesday, November 07, 2006 1:15:56 PM, MarkPearson imported tiddlers from\n[[http://mptw.tiddlyspot.com/upgrade.html|http://mptw.tiddlyspot.com/upgrade.html]]:\n<<<\nOut of 10 tiddlers in {{{http://mptw.tiddlyspot.com/upgrade.html}}}:\n8 new tiddlers were added to your document.\n2 existing tiddlers were replaced.\n#[[CloseOnCancelPlugin]]\n#[[HideWhenPlugin]]\n#[[MptwLayoutPlugin]]\n#[[MptwUpgradeTsURL]]\n#[[MptwUpgradeURL]]\n#[[NewHerePlugin]]\n#[[QuickOpenTagPlugin]]^^\nreplaces QuickOpenTagPlugin - 2/9/2006 5:3:0 by SimonBaird^^\n#[[RenameTagsPlugin]]^^\nreplaces RenameTagsPlugin - 3/5/2006 17:59:0 by SimonBaird^^\n#[[TagglyTaggingPlugin]]\n#[[ToggleTagPlugin]]\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
//{{{\nconfig.formatters.unshift( {\n name: "inlinesliders",\n match: "\s\s+\s\s+\s\s+\s\s+|\s\s<slider",\n lookaheadRegExp: /(?:\s+\s+\s+\s+|<slider) (\sw*)(?:>?)\sn((?:.|\sn)*?)\sn(?:====|<\s/slider>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart )\n {\n var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\su00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");\n var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");\n panel.style.display = "none";\n wikify(lookaheadMatch[2],panel);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n },\n onClickSlider : function(e)\n {\n if(!e) var e = window.event;\n var n = this.nextSibling;\n n.style.display = (n.style.display=="none") ? "block" : "none";\n return false;\n }\n})\n//}}}
I want to install the latest [[Catalyst mods to moodle|Catalyst version of Moodle with TinyMCE]] so I need to install GIT.\n{{{\n$ cd /usr/ports/devel/git\n$ make install clean\n}}}\nPerformed on <<tag Rublev>>\n
Having got the [[server going|New server Barnabus]] I followed [[these destructions|http://docs.moodle.org/en/Step-by-step_Install_Guide_for_Ubuntu]] to install Moodle:\n\n{{{cd /var/www}}}\n{{{sudo wget http://download.moodle.org/stable18/moodle-latest-18.tgz}}}\n{{{sudo tar –zxf moodle-latest-18.tgz}}}\n{{{sudo mkdir /var/moodle_data}}}\n{{{sudo chown -R www-data.www-data /var/moodle_data /var/www/moodle}}}\n\nI ran the setup with http://159.28.7.34/moodle and, would ya know it, the thing installed and configured with nary a hitch.\nIt did, however, point out that GD was missing in the php install (strange) so, after a quick Google search I [[added the GD library|Add GD to php 5 on Ubuntu]]. Also, mod-rewrite was not jiggy with Apache so I [[added that too|Add mod_rewrite to Apache on Ubuntu]].\n----\n\n\n
Following postgres installation instructions at [[FreeBSD Diary|http://www.freebsddiary.org/postgresql.php#pgsql]] \nI got stumped by {{{su -l pgsql -c initdb}}} cos it kept saying "sorry". After emailing Randy Shultz and sleeping on it I realised that I needed to su to root to enable me to su to another user account.\n{{{\nrublev# su -l pgsql -c initdb\nThe files belonging to this database system will be owned by user "pgsql".\nThis user must also own the server process.\nThe database cluster will be initialized with locale C.\ncreating directory /usr/local/pgsql/data ... ok\ncreating subdirectories ... ok\nselecting default max_connections ... 10\nselecting default shared_buffers/max_fsm_pages ... 400kB/20000\ncreating configuration files ... ok\ncreating template1 database in /usr/local/pgsql/data/base/1 ... ''FATAL: could not create shared memory segment:'' Function not implemented\nDETAIL: Failed system call was shmget(key=1, size=1654784, 03600).\nchild process exited with exit code 1\ninitdb: removing data directory "/usr/local/pgsql/data"\n}}}\n;Error:\n:''FATAL: could not create shared memory segment:'' Function not implemented DETAIL: Failed system call was shmget(key=1, size=1654784, 03600).\n!!Suggestion\n* Uninstall postgres (instructions [[here|http://www.freebsddiary.org/postgresql.php]]) +++[code]\n{{{\n# pkg_delete -f postgresql-7.0.3\n# pkg_delete -f postgresql-7.1.3 # cd /usr/ports/databases/postgresql7\n# make deinstall\n}}}\n===\n\n* remake and ''log messages''\n* now do {{{su -l pgsql -c initdb}}}\n* ''find freebsd message board and ask about pgsql''\n\n[[postgres 8.3 client port|http://www.freebsd.org/cgi/cvsweb.cgi/ports/databases/postgresql83-client/Makefile]]\n[[postgres install destructions|http://www.freebsddiary.org/postgresql.php]]\n[[postgres docs|http://www.postgresql.org/docs/8.3/static/index.html]]\n
LDAP support was missing from php on Barnabas. So, following [[this instruction list|http://www.debianhelp.co.uk/apachephp.htm]] :\n{{{apt-get update}}}\n{{{sudo apt-get install php5-ldap}}}\n{{{sudo apache2ctl restart}}}\nThis did the job, though the system still could nopt lcoate the ldap service (though pinging directory.earlham.edu, sith and ashti all gave positive results, so these are reachable)\n
Steps to install the Book module (from [[this|http://moodle.org/mod/forum/discuss.php?d=56493]] ) discussion:\n# you go to moodle.org and download the book module from the dowload section.\n# It downloads to your computer as a zip file with name book_16.zip\n# you upload this to your server into the moodle/mod directory.\n# you unzip it there\n# you change the name on the unzipped folder to book\n# make sure to copy the lang files into the correct places\n# you go to the admin section of your site\n# it should go through a quick "updating book module" process.\n# you click on modules in your admin section and check firstly if it is there - if it is make sure the "eye" is open.
<<faqlist bytag LyceumInstall title hr >>
Download and unzip theme into user space. Then:\n* cd to WPMU themes directory:\n{{{ec281:~ markp$ cd /Library/WebServer/Documents/WPMU/wp-content/themes/}}}\n{{{ec281:/Library/WebServer/Documents/WPMU/wp-content/themes markp$ ls -l}}}\n{{{drwxr-xr-x 16 markp admin 544 Nov 8 20:58 almost-spring}}}\n{{{drwxr-xr-x 10 www admin 340 Oct 10 08:14 classic}}}\n{{{drwxr-xr-x 21 www admin 714 Oct 10 08:14 default}}}\n{{{drwxr-xr-x 16 markp admin 544 Nov 8 20:58 dusk}}}\n{{{drwxr-xr-x 22 www admin 748 Oct 10 08:14 home}}}\n{{{drwxr-xr-x 16 www admin 544 Nov 8 20:52 ocadia}}}\n{{{drwxr-xr-x 16 markp admin 544 Nov 8 20:59 remember}}}\n* I made these themes writable by the group, but this is probably not neccessary:\n{{{ec281:/Library/WebServer/Documents/WPMU/wp-content/themes markp$ sudo chmod 775 almost-spring/}}}\n* Now change ownership to www which is Apache:\n{{{ec281:/Library/WebServer/Documents/WPMU/wp-content/themes markp$ sudo chown www:admin almost-spring/}}}\n* and the listing shows the job done successfully:\n{{{ec281:/Library/WebServer/Documents/WPMU/wp-content/themes markp$ ls -l}}}\n{{{drwxrwxr-x 16 www admin 544 Nov 8 20:58 almost-spring}}}\n{{{drwxr-xr-x 10 www admin 340 Oct 10 08:14 classic}}}\n{{{drwxr-xr-x 21 www admin 714 Oct 10 08:14 default}}}\n{{{drwxrwxr-x 16 www admin 544 Nov 8 20:58 dusk}}}\n{{{drwxr-xr-x 22 www admin 748 Oct 10 08:14 home}}}\n{{{drwxr-xr-x 16 www admin 544 Nov 8 20:52 ocadia}}}\n{{{drwxrwxr-x 16 www admin 544 Nov 8 20:59 remember}}}\n\nNow go to http://ec281.lly.earlham.edu/WPMU/wp-admin and Site Admin : Themes and click on Update. Then activate.
Need programming support (php / MySQL) for Moodle projects:\n\n* system customization to give it Earlham look and feel\n* Faculty self service:\n** easy course creation from pulldown course list\n** autoenroll pre-enrolled students\n* integration with CMS / Portal:\n** reminder for student assignments due\n* podcast authoring module\n* bookmark sharing module -- good for group work
!!History\nI took delivery of the Intel server yesterday; the swap with Charlie Peck for a Mac mini. I swapped a 1.4GHz G4 Mac mini with 1Gb RAM, 80Gb hard drive, bluetooth & wireless for an Intel S5000 server, with 2 x 3.2 ~GHz Xeon CPU, 2Gb RAM and 250Gb hard drive. Charlie needed the mini to host a small webcam and was delighted with the whole package. I was chuffed because I cloned the mini to an old PMAL G4 dual 1GHz, so I still have Macarius running and I can now port the contents of Barnabas to the new server I have named Frumentius and retire Barnabas. [[quote for memory and hard drive|modules/GCI Quote#1985243_01-1.pdf]]\n!!!Intel server S5000 specs\n* [[complete motherboard documentation|modules/Intel Server Board_s5000pal_tps_v1_4.pdf]]\n* Two Xeon 3.2GHz ''dual core'' CPU.\n* 2 x Kingston 1GB 667MHZ ~DDR2 ECC Fully Buffered ~CL5 Dimm Dual Rank (see quote above for price). [[Memory configuration|modules/Intel Server Board_s5000pal_tps_v1_4 28.pdf]] ~DIMM_A1, ~DIMM_B1.\n* 4 SATA ports, can be configured RAID 0 or RAID 1.\n* Western Digital Caviar RE ~WD2500YS 250GB 7200 RPM 16MB Cache SATA 3.0Gb/s Hard Drive (see quote above for price)\n* Two Intel 80003ES2LAN Gigabit ethernet interfaces\nPress F2 for BIOS.\n* Reconfigure Advanced : System acoustic and performance\n>>Set fan profile : Performance -- > Acoustic (changes speed at which fans run; slower = quieter)\n>>Altitude : 300m or less -- also has effect on fan speed\nSystem serial number : @@~IZALDP5475047@@\nProduct code : @@~S3E22SYSTNZPPQ@@\n\n[[Frumentius : installing ubuntu]]\n[[Frumentius : issues]]\n[[Frumentius : install ToDo]]
/***\n|''Name:''|~IntelliTaggerPlugin|\n|''Version:''|1.0.0 (2006-04-26)|\n|''Type:''|plugin|\n|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|\n|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|\n|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|\n|''Source Code:''|[[IntelliTaggerPlugin SourceCode]]|\n|''Licence:''|[[BSD open source license (abego Software)]]|\n|''~TiddlyWiki:''|Version 2.0.8 or better|\n|''Browser:''|Firefox 1.5.0.2 or better|\n\n***/\n// /%\nif(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:0,date:new Date(2006,3,26),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.isPopupOpen=function(_2){return _2&&_2.parentNode==document.body;};abego.openAsPopup=function(_3){if(_3.parentNode!=document.body){document.body.appendChild(_3);}};abego.closePopup=function(_4){if(abego.isPopupOpen(_4)){document.body.removeChild(_4);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_5,_6,_7){_5.style.left=_6+"px";_5.style.top=_7+"px";};abego.centerOnWindow=function(_8){if(_8.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _9=abego.getWindowRect();abego.moveElement(_8,_9.left+(_9.width-_8.offsetWidth)/2,_9.top+(_9.height-_8.offsetHeight)/2);};abego.isDescendantOrSelf=function(_a,e){while(e){if(_a==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_c){var _d={};for(var i=0;i<_c.length;i++){_d[_c[i]]=true;}return _d;};abego.filterStrings=function(_f,_10,_11){var _12=[];for(var i=0;i<_f.length&&(_11===undefined||_12.length<_11);i++){var s=_f[i];if(s.match(_10)){_12.push(s);}}return _12;};abego.arraysAreEqual=function(a,b){var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_19,_1a){if(!_1a){return;}var _1b=findPosX(_1a);var _1c=findPosY(_1a);var _1d=_1a.offsetHeight;var _1e=_1b;var _1f=_1c+_1d;var _20=findWindowWidth();if(_20<_19.offsetWidth){_19.style.width=(_20-100)+"px";}var _21=_19.offsetWidth;if(_1e+_21>_20){_1e=_20-_21-30;}if(_1e<0){_1e=0;}_19.style.left=_1e+"px";_19.style.top=_1f+"px";_19.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _25=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_25.push([s.toString().toLowerCase(),s]);}_25.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_25[i][1];}};abego.getTiddlerField=function(_2b,_2c,_2d){var _2e=document.getElementById(_2b.idPrefix+_2c);var e=null;if(_2e!=null){var _30=_2e.getElementsByTagName("*");for(var t=0;t<_30.length;t++){var c=_30[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2d){e=c;}}}}return e;};abego.setRange=function(_33,_34,end){if(_33.setSelectionRange){_33.setSelectionRange(_34,end);var max=0+_33.scrollHeight;var len=_33.textLength;var top=max*_34/len,bot=max*end/len;_33.scrollTop=Math.min(top,(bot+top-_33.clientHeight)/2);}else{if(_33.createTextRange!=undefined){var _39=_33.createTextRange();_39.collapse();_39.moveEnd("character",end);_39.moveStart("character",_34);_39.select();}else{_33.select();}}};abego.internal.TagManager=function(){var _3a=null;var _3b=function(){if(_3a){return;}_3a={};store.forEachTiddler(function(_3c,_3d){for(var i=0;i<_3d.tags.length;i++){var tag=_3d.tags[i];var _40=_3a[tag];if(!_40){_40=_3a[tag]={count:0,tiddlers:{}};}_40.tiddlers[_3d.title]=true;_40.count+=1;}});};var _41=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_42,_43,_44,_45,_46,_47){var _48=this.fetchTiddler(_42);var _49=_48?_48.tags:[];var _4a=(typeof _47=="string")?_47.readBracketedList():_47;_41.apply(this,arguments);if(!abego.arraysAreEqual(_49,_4a)){abego.internal.getTagManager().reset();}};var _4b=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4c){var _4d=this.fetchTiddler(_4c);var _4e=_4d&&_4d.tags.length>0;_4b.apply(this,arguments);if(_4e){abego.internal.getTagManager().reset();}};this.reset=function(){_3a=null;};this.getTiddlersWithTag=function(tag){_3b();var _50=_3a[tag];return _50?_50.tiddlers:null;};this.getAllTags=function(_51){_3b();var _52=[];for(var i in _3a){_52.push(i);}for(i=0;_51&&i<_51.length;i++){_52.pushUnique(_51[i],true);}abego.sortIgnoreCase(_52);return _52;};this.getTagInfos=function(){_3b();var _54=[];for(var _55 in _3a){_54.push([_55,_3a[_55]]);}return _54;};var _56=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3b();var _5c=this.getTagInfos();_5c.sort(_56);return _5c;};this.getPartnerRankedTags=function(_5d){var _5e={};for(var i=0;i<_5d.length;i++){var _60=this.getTiddlersWithTag(_5d[i]);for(var _61 in _60){var _62=store.getTiddler(_61);if(!(_62 instanceof Tiddler)){continue;}for(var j=0;j<_62.tags.length;j++){var tag=_62.tags[j];var c=_5e[tag];_5e[tag]=c?c+1:1;}}}var _66=abego.toSet(_5d);var _67=[];for(var n in _5e){if(!_66[n]){_67.push(n);}}_67.sort(function(a,b){var d=_5e[b]-_5e[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _67;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6c=2;var _6d=1;var _6e=30;var _6f;var _70;var _71;var _72;var _73;var _74;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _75=function(){return _70;};var _76=function(tag){return _73[tag];};var _78=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7b=function(_7c){var s=_7c.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _7f=function(_80){var s=_80.value;var len=s.length;if(len>0&&s[len-1]!=" "){_80.value+=" ";}};var _83=function(tag,_85,_86){if(_7b(_85)){_85.value=_78(_85.value);}story.setTiddlerTag(_86.title,tag,0);_7f(_85);abego.IntelliTagger.assistTagging(_85,_86);};var _87=function(n){if(_74){if(_74.length>n){return _74[n];}n-=_74.length;}return (_72&&_72.length>n)?_72[n]:null;};var _89=function(n,_8b,_8c){var _8d=_87(n);if(_8d){_83(_8d,_8b,_8c);}};var _8e=function(_8f){var pos=_8f.value.lastIndexOf(" ");var _91=(pos>=0)?_8f.value.substr(++pos,_8f.value.length):_8f.value;return new RegExp(_91.escapeRegExp(),"i");};var _92=function(_93,_94){var _95=0;for(var i=0;i<_93.length;i++){if(_94[_93[i]]){_95++;}}return _95;};var _97=function(_98,_99,_9a){var _9b=1;var c=_98[_99];for(var i=_99+1;i<_98.length;i++){if(_98[i][1].count==c){if(_98[i][0].match(_9a)){_9b++;}}else{break;}}return _9b;};var _9e=function(_9f,_a0){var _a1=abego.internal.getTagManager().getSortedTagInfos();var _a2=[];var _a3=0;for(var i=0;i<_a1.length;i++){var c=_a1[i][1].count;if(c!=_a3){if(_a0&&(_a2.length+_97(_a1,i,_9f)>_a0)){break;}_a3=c;}if(c==1){break;}var s=_a1[i][0];if(s.match(_9f)){_a2.push(s);}}return _a2;};var _a7=function(_a8,_a9){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_a9),_a8);};var _aa=function(){if(!_6f){return;}var _ab=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ab){_ab="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_6f.innerHTML=_ab;applyHtmlMacros(_6f,null);refreshElements(_6f,null);};var _ac=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_71){_71.call(this,tag,e);}return false;};var _af=function(_b0,_b1,_b2,_b3){if(!_b1){return;}var _b4=_b3?abego.toSet(_b3):{};var n=_b1.length;for(var i=0;i<n;i++){var tag=_b1[i];if(_b4[tag]){continue;}if(i>0){createTiddlyElement(_b0,"span",null,"tagSeparator"," | ");}var _b8="";var _b9=_b0;if(_b2<10){_b9=createTiddlyElement(_b0,"span",null,"numberedSuggestion");_b2++;var key=_b2<10?""+(_b2):"0";createTiddlyElement(_b9,"span",null,"suggestionNumber",key+") ");var _bb=_b2==1?"Ctrl-Space or ":"";_b8=" (Shortcut: %1Alt-%0)".format([key,_bb]);}var _bc=config.views.wikified.tag.tooltip.format([tag]);var _bd=(_76(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_b8]);var _be="%0; Shift-Click: %1".format([_bd,_bc]);var btn=createTiddlyButton(_b9,tag,_be,_ac,_76(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c0=function(){if(_6f){window.scrollTo(0,ensureVisible(_6f));}if(_75()){window.scrollTo(0,ensureVisible(_75()));}};var _c1=function(e){if(!e){var e=window.event;}if(!_6f){return;}var _c3=resolveTarget(e);if(_c3==_75()){return;}if(abego.isDescendantOrSelf(_6f,_c3)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c1);var _c4=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_c6){_c4.apply(this,arguments);var _c7=_c6.tags;if(_c7){_c6.tags=_c7.trim();}};var _c8=function(_c9){story.focusTiddler(_c9,"tags");var _ca=abego.getTiddlerField(story,_c9,"tags");if(_ca){var len=_ca.value.length;abego.setRange(_ca,len,len);window.scrollTo(0,ensureVisible(_ca));}};var _cc=config.macros.edit.handler;config.macros.edit.handler=function(_cd,_ce,_cf,_d0,_d1,_d2){_cc.apply(this,arguments);var _d3=_cf[0];if((_d2 instanceof Tiddler)&&_d3=="tags"){var _d4=_cd.lastChild;_d4.onfocus=function(e){abego.IntelliTagger.assistTagging(_d4,_d2);setTimeout(function(){_c8(_d2.title);},100);};_d4.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_89(e.keyCode==48?9:e.keyCode-49,_d4,_d2);}else{if(e.ctrlKey&&e.keyCode==32){_89(0,_d4,_d2);}}setTimeout(function(){abego.IntelliTagger.assistTagging(_d4,_d2);},100);return false;};_7f(_d4);}};var _d7=function(e){if(!e){var e=window.event;}var _d9=resolveTarget(e);var _da=_d9.getAttribute("tiddler");if(_da){story.displayTiddler(_d9,_da,"IntelliTaggerEditTagsTemplate",false);_c8(_da);}return false;};var _db=config.macros.tags.handler;config.macros.tags.handler=function(_dc,_dd,_de,_df,_e0,_e1){_db.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_e1,createTiddlyElement(_dc.lastChild,"li"));};var _e2=function(){if(_6f&&_70&&!abego.isDescendantOrSelf(document,_70)){abego.IntelliTagger.close();}};setInterval(_e2,100);abego.IntelliTagger.displayTagSuggestions=function(_e3,_e4,_e5,_e6,_e7){_72=_e3;_73=abego.toSet(_e4);_74=_e5;_70=_e6;_71=_e7;if(!_6f){_6f=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_6f.style.position="absolute";}_aa();abego.openAsPopup(_6f);if(_75()){var w=_75().offsetWidth;if(_6f.offsetWidth<w){_6f.style.width=(w-2*(_6c+_6d))+"px";}abego.moveBelowAndClip(_6f,_75());}else{abego.centerOnWindow(_6f);}_c0();};abego.IntelliTagger.assistTagging=function(_e9,_ea){var _eb=_8e(_e9);var s=_e9.value;if(_7b(_e9)){s=_78(s);}var _ed=s.readBracketedList();var _ee=_ed.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_ed),_eb,_6e):_9e(_eb,_6e);abego.IntelliTagger.displayTagSuggestions(_a7(_eb,_ed),_ed,_ee,_e9,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_83(tag,_e9,_ea);}});};abego.IntelliTagger.close=function(){abego.closePopup(_6f);_6f=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_f1,_f2,_f3,_f4,_f5,id,_f7){if(!_f3){_f3="[edit]";}if(!_f4){_f4="Edit the tags";}if(!_f5){_f5="editTags";}var _f8=createTiddlyButton(_f2,_f3,_f4,_d7,_f5,id,_f7);_f8.setAttribute("tiddler",(_f1 instanceof Tiddler)?_f1.title:String(_f1));return _f8;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_f9,_fa,_fb,_fc,_fd,_fe){var _ff=_fd.parseParams("list",null,true);var _100=_ff[0]["action"];for(var i=0;_100&&i<_100.length;i++){var _102=_100[i];var _103=config.macros.intelliTagger.subhandlers[_102];if(!_103){abego.alertAndThrow("Unsupported action '%0'".format([_102]));}_103(_f9,_fa,_fb,_fc,_fd,_fe);}},subhandlers:{showTags:function(_104,_105,_106,_107,_108,_109){_af(_104,_72,_74?_74.length:0,_74);},showFavorites:function(_10a,_10b,_10c,_10d,_10e,_10f){_af(_10a,_74,0);},closeButton:function(_110,_111,_112,_113,_114,_115){var _116=createTiddlyButton(_110,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_117){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_117,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\s"black\s" face=\s"Arial, Helvetica, sans-serif\s">"+t+"<font>";},copyright:function(_11a){var e=createTiddlyElement(_11a,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\s"black\s" face=\s"Arial, Helvetica, sans-serif\s">&copy; 2006 <b><font color=\s"red\s">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\sn"+"!~IntelliTagger Stylesheet\sn"+"***/\sn"+"/*{{{*/\sn"+".intelliTaggerSuggestions {\sn"+"\stposition: absolute;\sn"+"\stwidth: 600px;\sn"+"\sn"+"\stpadding: 2px;\sn"+"\stlist-style: none;\sn"+"\stmargin: 0;\sn"+"\sn"+"\stbackground: #eeeeee;\sn"+"\stborder: 1px solid DarkGray;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .currentTag {\sn"+"\stfont-weight: bold;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .suggestionNumber {\sn"+"\stcolor: #808080;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .numberedSuggestion{\sn"+"\stwhite-space: nowrap;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .intelliTaggerFooter {\sn"+"\stmargin-top: 4px;\sn"+"\stborder-top-width: thin;\sn"+"\stborder-top-style: solid;\sn"+"\stborder-top-color: #999999;\sn"+"}\sn"+".intelliTaggerSuggestions .favorites {\sn"+"\stborder-bottom-width: thin;\sn"+"\stborder-bottom-style: solid;\sn"+"\stborder-bottom-color: #999999;\sn"+"\stpadding-bottom: 2px;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .normalTags {\sn"+"\stpadding-top: 2px;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\sn"+"\stfont-size: 10px;\sn"+"\sn"+"\stpadding-left: 0.3em;\sn"+"\stpadding-right: 0.3em;\sn"+"}\sn"+"\sn"+"/*}}}*/\sn";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\sn"+"{{{\sn"+"-->\sn"+"<div class=\s"favorites\s" macro=\s"intelliTagger action: showFavorites\s"></div>\sn"+"<div class=\s"normalTags\s" macro=\s"intelliTagger action: showTags\s"></div>\sn"+"<!-- The Footer (with the Navigation) ============================================ -->\sn"+"<table class=\s"intelliTaggerFooter\s" border=\s"0\s" width=\s"100%\s" cellspacing=\s"0\s" cellpadding=\s"0\s"><tbody>\sn"+" <tr>\sn"+"\st<td align=\s"left\s">\sn"+"\st\st<span macro=\s"intelliTagger action: closeButton\s"></span>\sn"+"\st</td>\sn"+"\st<td align=\s"right\s">\sn"+"\st\st<span macro=\s"intelliTagger action: version\s"></span>, <span macro=\s"intelliTagger action: copyright \s"></span>\sn"+"\st</td>\sn"+" </tr>\sn"+"</tbody></table>\sn"+"<!--\sn"+"}}}\sn"+"-->\sn";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\sn"+"{{{\sn"+"-->\sn"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+"<div class='title' macro='view title'></div>\sn"+"<div class='tagged' macro='tags'></div>\sn"+"<div class='viewer' macro='view text wikified'></div>\sn"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\sn"+"<!--\sn"+"}}}\sn"+"-->\sn";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/src/Plugin-IntelliTagger-src.js]]";setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"intelliTagger");}\n//%/\n
For IntelliTaggerPlugin source code see the [[archive|http://tiddlywiki.abego-software.de/archive]].
Here are some basic aspects of Moodle which you can cover on an Intro to Moodle session:\n!!!Preliminaries\n* Logging In. Use Earlham username and password.\n* Finding your course. Browse through the list of categories. Bear in mind that the course may be cross listed and so you may find it in AAAS rather than History for example.\n* Enrolling in the course. Obtain the 'enrollment key' from the professor or a classmate (the prof will have gieven this out in class). Use this to enroll in the course.\n!!!Browsers and Reading\nI would suggest making sure that you have some resources present in the Moodle course in Acrobat and MS Word format. Reading material online is usually just a matter of clicking on the link. However, depending on the browser you are using and the format of the resource file you may have some problems:\n* Internet Explorer and opening MS Word (or Powerpoint or Excel). You may encounter a blank screen after opening a Word document. This is because of the default security setting in I.E. Find the bar illustrated below and then select download:\n[img[IE error bar|graphics/Moodle_word_IE6_XP2_80.png]]\nYou'll then be asked whether you want to open or save the file. Choosing 'open' reveals the file within the browser and does ''not'' open MS Word (as you might have expected).\n* Opening a Word document with FireFox. Here the behaviour is more what you might expect:\n[img[FireFox download box|graphics/Moodle_word_FF_XP2_80.png]]\n* Acrobat documents display inside the browser (whether Firefox or I.E) with Windows XP; on the Mac the Preview application starts up and displays the document. On the PC make sure that you use the Print icon to print rather than selecting File --> Print.\n[img[graphics/moodle_acrobat_FF_xp_80.png]]\n!!!Online Assignments\n* You may want to have students practice uploading a file into a test assignment. Create the test assignment with Upload a single file. Note the 'prevent late submissions' setting and 'allow resubmitting' setting. Point out to students the Due date on the upload page and that if 'prevent late submissions' is set to 'yes' the uploading box will disappear after the due date, thus preventing a late assignment.\n!!!Monitoring students\nPoint out to students that all activity on Moodle is logged so that Teachers can easily discover whether a student has accessed the resource (but not whether she has read or printed it!)
I go this from [[Linux.kung.fu|]]\nNeed to compile before running.\n# Assemble gcc compiler +++[apt-get]>\nsudo apt-get install gcc\nsudo apt-get install libc6-dev\nsudo apt-get install make\n===\n\n# Compile sources +++[commands]>\n$ wget http://www.linuxkungfu.org/ipkungfu/ipkungfu-0.6.1.tar.gz\n$ tar -xvf ipkungfu-0.6.1.tar.gz\n$ cd ipkungfu-0.6.1\n$ ./configure {this is when you discover that you need to install gcc}\n$ make\n$ sudo make install\n$ sudo make install-config\n===\n\n# set up a config file +++[/etc/ipkungfu]>\n$ cd /etc/ipkungfu/\n$ sudo pico ipkungfu.conf\n===\n\n# run ipkungfu +++[results]>\n$ sudo ipkungfu\n<html><pre>\nChecking integrity: .. PASSED\nCould not find any cached rules. (First time running?)\niptables-restore functionality is disabled.\nBuilding MD5 hash of config files: OK\nUsing external IP address 159.28.7.34\nChecking configuration...\n\nWARNING:\nYou have '/etc/ipkungfu/services.conf' and yet, you still\ndefine ALLOWED_TCP_IN or ALLOWED_UDP_IN.\n\nAs of ipkungfu 0.6.0 both those vars are deprecated and\nhandled on '/etc/ipkungfu/services.conf'\n\nWe can re-create your 'services.conf' based on the settings\nyou have on ALLOWED_TCP_IN and/or ALLOWED_UDP_IN.\n\nWould you like to take care of this now?\nWe will wait 30 secconds for your answer(s).\n\nAnswer Yes/No [Default: no]: no\n\nWould you like to disable this warning?\n\nAnswer Yes/No [Default: no]:no\n\nSince the answer is 'no', ipkungfu won't run until one of these occurs:\n1 - You disable the warning\n2 - You transfer you're ALLOWED_TCP_IN and/or ALLOWED_UDP_IN\n to services.conf\n3 - You let us create your services.conf based on what you have\n on ALLOWED_TCP_IN and/or ALLOWED_UDP_IN</html></pre>\n===\n\nrun +++[again]>\n sudo ipkungfu\nChecking integrity: .. PASSED\nCould not find any cached rules. (First time running?)\niptables-restore functionality is disabled.\nBuilding MD5 hash of config files: OK\nUsing external IP address 159.28.7.34\nChecking configuration...\n\nWARNING:\nYou have '/etc/ipkungfu/services.conf' and yet, you still\ndefine ALLOWED_TCP_IN or ALLOWED_UDP_IN.\n\nAs of ipkungfu 0.6.0 both those vars are deprecated and\nhandled on '/etc/ipkungfu/services.conf'\n\nWe can re-create your 'services.conf' based on the settings\nyou have on ALLOWED_TCP_IN and/or ALLOWED_UDP_IN.\n\nWould you like to take care of this now?\nWe will wait 30 secconds for your answer(s).\n\nAnswer Yes/No [Default: no]: yes\nBacking /etc/ipkungfu/services.conf: OK\nIt's /etc/ipkungfu/services.conf.bak\nReplacing /etc/ipkungfu/services.conf with the default contents: OK\nTaking care of the following TCP ports:\nPort 20-21: OK\nPort 22: OK\nPort 53: OK\nPort 80: OK\nPort 137-139: OK\nCommenting out ALLOWED_TCP_IN in /etc/ipkungfu/ipkungfu.conf OK\n===\n\nEdit /etc/ipkungfu/services.conf +++[restart]>\nsudo ipkungfu\nChecking integrity: .. PASSED\nChecking MD5 Hash of config files: FAILED\nRe-Building MD5 hash of config files: OK\nUsing external IP address 159.28.7.34\nChecking configuration...\niptables: No chain/target/match by that name\niptables: No chain/target/match by that name\niptables: No chain/target/match by that name\niptables: No chain/target/match by that name\n TTL support detected!\n MARK support detected!\nClearing old chains and tables...\nImplementing custom rules...\nHandling Services On The Following Ports...\n----------------------------------\n Port Protocol Name Target\n----------------------------------\n 20 tcp ftp-data ACCEPT\n 21 tcp ftp ACCEPT\n 22 tcp ssh ACCEPT\n 53 tcp domain ACCEPT\n 80 tcp http ACCEPT\n 443 tcp https ACCEPT\n----------------------------------\nCreating proc settings cache: OK\nCreating iptables rules cache: OK\n===\nNot sure what {{{iptables: No chain/target/match by that name}}} means\n\nMake sure FTP works: from the +++[FAQ]>\n{{{less /usr/local/share/doc/ipkungfu-0.6.1/FAQ}}}\n<<<\n "When people connect to my ftp server and try to get a list of files, it just\n kinda sits there" - This is essentially the same issue as the dcc situation\n described above. You need the ftp conntrack helper module\n (ip_conntrack_ftp). Refer to the dcc question above for details. As with\n dcc, ftp by default uses random ports, and the kernel's packet filtering\n code needs this helper module to track the connection across these ports\n to allow established ftp connections through them. The relevant modules\n are ip_conntrack_ftp and ip_nat_ftp."\n<<<\n===\n\nCheck whether ip_conntrack_ftp is installed : {{{modprobe -c | grep ip_conntrack}}} +++[results]>\nalias ip_conntrack_tftp nf_conntrack_tftp\nalias ip_conntrack_ftp nf_conntrack_ftp\nalias ip_conntrack_netbios_ns nf_conntrack_netbios_ns\nalias ip_conntrack_netlink nf_conntrack_netlink\nalias ip_conntrack_sip nf_conntrack_sip\nalias ip_conntrack_amanda nf_conntrack_amanda\nalias ip_conntrack_irc nf_conntrack_irc\nalias ip_conntrack_proto_sctp nf_conntrack_proto_sctp\nalias ip_conntrack_pptp nf_conntrack_pptp\nalias ip_conntrack_h323 nf_conntrack_h323\nalias ip_conntrack nf_conntrack_ipv4\n=== It ''is'', so that's good.\n\nFrom the ipkungfu.conf:\n<<<\n<html><pre>\n# Set this to 0 if you're running ipkungfu on a machine\n# inside your LAN. This will cause private IP addresses\n# coming in on $EXT_NET to be identified as a spoof,\n# which would be inaccurate on intra-LAN traffic\n# This will cause private IP addresses coming in on\n# $EXT_NET to be identified as a spoof. Default is 1.\n# DISALLOW_PRIVATE=1\n</pre></html>\n<<<\nI'm not sure what, if anything to set this as.\n----\n!!Update 21-22 Jan\nAaron Cayard-Roberts has kindly fixed the firewall on Frumentius using iptables directly. Ipkungfu was not really flexible enough to do what we wanted.\n\n
starting and stopping jails on parent:\n{{{\n sudo /usr/local/etc/rc.d/ezjail.sh stop <jailname>\n sudo /usr/local/etc/rc.d/ezjail.sh start <jailname>\n sudo /usr/local/etc/rc.d/ezjail.sh restart <jailname>\n}}}\n-----\nto auto-startup things in each jail, need to add to /etc/rc.conf(with _enable tacked on the end), e.g.\n {{{apache22_enable="YES"}}}\nthis needs to be added to rc.conf in ''each'' jail that it needs to run. you don't need to add something in the rc.conf of a jail if the package only needs to run in some other jail. each jail is like a separate host/machine.\n----\nto capture output, e.g. when installing ports, do a\n{{{\n script /tmp/<filename>\n}}}\nthis captures output sent to the screen and sends it to the filename. when done capturing, like when the port is installed, press Ctrl-d.\nyou can then do a cat/more on the filename.
Moodle development conversations with Denise and Kevin:\n* switch off display of assignments in MyMoodle:\n** assignment visible until it has been submitted\n* Grading improvements:\n** want to be able to retain display of grades until all the grading done and reviewed.\n** switch in the course settings : release grades as completed / manually release grades\n* Procedure at end of year\n** automatic unenroll students\n** move to new archive category\n** copy old course to new incarnation\n** performance of old courses with new versaions of Moodle. Database updates.\n* Message markp with problems\n\n!!!Get ES/IP section #s from Denise\n
Yasumi reported that the Javascript MP3 player for her Japanese 102 class wasn't working for some of her students.\nIt works for me! Initially, I thought that it was a matter of popup blocking in Internet Explorer. So I went to a Lab PC to try it out with IE on Win XP. There were no blocking problems but the popup page did get a 404 error. Strange cos it worked in Firefox on the same machine & same account. Took a look at the file structure and noticed that the folder names had Japanese characters in them. I figured that IE might not be able to handle these. So I removed the Japanese chrs and remade the link. Works in both IE & FF.\n!!!To Do:\nGet Kerri to fix the remaining resources.\n
Denise has asked me for a list of things that Dylan could do.\n* Moodle statistics. Tidy up the output of current Moodle stats -- create bar charts from stats.\n<<<\nMark : what stats do people really want from Moodle? What questions do we want to have answered, especially relating to pedagogy? Do an email survey of EIS and selected faculty.\n<<<\n* Personal Course Creation. The current batch upload of courses is a [[pain in the botty department|]]. Only a third of courses created are actually used and the excess has a detrimental effect on server performance.\n** link to description of what would be needed\n* By doing the above programming project get familiar with Moodle to partake in NITLE Moodle hackfest and Google Summer of Code
/***\n|Name|JumpToTopMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#JumpToTopMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a toolbar command and a macro, that create a button for quickly jumping to the top of your TW.\nHandy to place in the tiddler toolbar (edit the ViewTemplate)\n\nNote: You can add an extra toolbar to the bottom of tiddlers as well with buttons of your choice, to allow easy access to the buttons/commands in it.\n\n!Demo:\n{{{<<top>>}}}<<top>>\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\n\n!History:\n*23-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nconfig.macros.top={};\nconfig.macros.top.handler=function(place,macroName)\n{\n createTiddlyButton(place,"^","jump to top",this.onclick);\n}\nconfig.macros.top.onclick=function()\n{\n window.scrollTo(0,0);\n};\n\nconfig.commands.top =\n{\n text:" ^ ",\n tooltip:"jump to top"\n};\n\nconfig.commands.top.handler = function(event,src,title)\n{\n window.scrollTo(0,0);\n}\n//}}}
Kevin Miles phoned up asking about fixing the display of Thunderbird. Got that sussed. Asked him what sort of summer workshops he'd be interested in. I suggested:\n* Quiz -- taking this to another level\n* using the online gradebook\nWhat he was interested in was making clips from videos and showing these on Moodle. Maybe a session for this? We'd also want a nice player for Moodle.\n\nI also talked to Michael Jackson (Psych) and he was very keen on an email session\n
Downlaod and expand the ldap integration module for Drupal 4.7. Then modify Library/WebServer/Documents/iti/modules/ldap_integration-4.7.0/ldap_integration/conf.php:\n<html><blockquote>\n/ / Admin must define a user able to write users' attributes (to generate new passwords when they are lost)<br />\ndefine(LDAP_WRITER_USER_DN, 'cn=stest,ou=People,dc=earlham,dc=edu');<br />\ndefine(LDAP_WRITER_USER_PASS, ' '); / / stick stest password here<br />\n<br />\n/ / Admin must define a user able to read users' attributes (to read e-mail addresses when passwords are lost)<br />\ndefine(LDAP_READER_USER_DN, 'cn=stest,ou=People,dc=earlham,dc=edu');<br