'; ?> " . $content->getTitle() . ""; } ?> display(); echo "

back to publication list

"; echo poweredby(); if (BIBTEXBROWSER_USE_PROGRESSIVE_ENHANCEMENT) { javascript(); } if (BIBTEXBROWSER_RENDER_MATH) { javascript_math(); } ?> $db = zetDB('bibacid-utf8.bib'); $dis = new SimpleDisplay($db); NoWrapper($dis); */ function NoWrapper($content) { echo $content->display(); } /** is used to create an subset of a bibtex file. usage:
  $db = zetDB('bibacid-utf8.bib');
  $query = array('year'=>2005);
  $dis = new BibtexDisplay();
  $dis->setEntries($db->multisearch($query));
  $dis->display();
*/ class BibtexDisplay { function __construct() {} function setTitle($title) { $this->title = $title; return $this; } /** sets the entries to be shown */ function setEntries($entries) { $this->entries = $entries; } function setWrapper($x) { $x->wrapper = 'NoWrapper'; } function display() { header('Content-type: text/plain; charset='.OUTPUT_ENCODING); echo '% generated by bibtexbrowser '."\n"; echo '% '.@$this->title."\n"; echo '% Encoding: '.OUTPUT_ENCODING."\n"; foreach($this->entries as $bibentry) { echo $bibentry->getText()."\n"; } } } /** creates paged output, e.g: [[http://localhost/bibtexbrowser/testPagedDisplay.php?page=1]] usage:
  $_GET['library']=1;
  include( 'bibtexbrowser.php' );
  $db = zetDB('bibacid-utf8.bib');
  $pd = new PagedDisplay();
  $pd->setEntries($db->bibdb);
  $pd->display();
*/ class PagedDisplay { var $query = array(); function __construct() { $this->setPage(); } /** sets the entries to be shown */ function setEntries($entries) { uasort($entries, 'compare_bib_entries'); $this->entries = array_values($entries); } /** sets $this->page from $_GET, defaults to 1 */ function setPage() { $this->page = 1; if (isset($_GET['page'])) { $this->page = $_GET['page']; } } function setQuery($query) { $this->query = $query; } function getTitle() { return query2title($this->query). ' - page '.$this->page; } function display() { $less = false; if ($this->page>1) {$less = true;} $more = true; // computing $more $index = ($this->page)*bibtexbrowser_configuration('PAGE_SIZE'); if (!isset($this->entries[$index])) { $more = false; } $this->menu($less, $more); print_header_layout(); for ($i = 0; $i < bibtexbrowser_configuration('PAGE_SIZE'); $i++) { $index = ($this->page-1)*bibtexbrowser_configuration('PAGE_SIZE') + $i; if (isset($this->entries[$index])) { $bib = $this->entries[$index]; echo $bib->toHTML(true); } else { //break; } } // end foreach print_footer_layout(); $this->menu($less, $more); } function menu($less, $more) { echo ''; $prev = $this->query; $prev['page'] = $this->page-1; if ($less == true) { echo 'Prev Page'; } if ($less && $more) { echo ' | '; } $next = $this->query; $next['page'] = $this->page+1; if ($more == true) { echo 'Next Page'; } echo ''; } } /** is used to create an RSS feed. usage:
  $db = zetDB('bibacid-utf8.bib');
  $query = array('year'=>2005);
  $rss = new RSSDisplay();
  $entries = $db->getLatestEntries(10);
  $rss->setEntries($entries);
  $rss->display();
*/ class RSSDisplay { var $title = 'RSS produced by bibtexbrowser'; function __construct() { // nothing by default } function setTitle($title) { $this->title = $title; return $this; } /** tries to always output a valid XML/RSS string * based on OUTPUT_ENCODING, HTML tags, and the transformations * that happened in latex2html */ function text2rss($desc) { // first strip HTML tags $desc = strip_tags($desc); // some entities may still be here, we remove them // we replace html entities e.g. é by nothing // however XML entities are kept (e.g. 5) $desc = preg_replace('/&\w+;/','',$desc); // bullet proofing ampersand $desc = preg_replace('/&([^#])/','&$1',$desc); // be careful of < $desc = str_replace('<','<',$desc); // final test with encoding: if (function_exists('mb_check_encoding')) { // (PHP 4 >= 4.4.3, PHP 5 >= 5.1.3) if (!mb_check_encoding($desc,OUTPUT_ENCODING)) { return 'encoding error: please check the content of OUTPUT_ENCODING'; } } return $desc; } /** sets the entries to be shown */ function setEntries($entries) { $this->entries = $entries; } function setWrapper($x) { $x->wrapper = 'NoWrapper'; } function display() { header('Content-type: application/rss+xml'); echo ''; // ?> <?php echo $this->title;?> http:// bibtexbrowser v5e1ec86e21e72094a034cedf5dd013f9b01ad0cc entries as $bibentry) { ?> <?php echo $this->text2rss($bibentry->getTitle());?> getURL();?> text2rss(bib2html($bibentry)."\n".$bibentry->getAbstract()); ?> getKey());?> $_GET['library']=1; @require('bibtexbrowser.php'); $_GET['bib']='bibacid-utf8.bib'; $_GET['year']='2006'; $x = new Dispatcher(); $x->main(); */ class Dispatcher { /** this is the query */ var $query = array(); /** the displayer of selected entries. The default is set in BIBTEXBROWSER_DEFAULT_DISPLAY. * It could also be an RSSDisplay if the rss keyword is present */ var $displayer = ''; /** the wrapper of selected entries. The default is an HTML wrapper * It could also be a NoWrapper when you include your pub list in your home page */ var $wrapper = BIBTEXBROWSER_DEFAULT_TEMPLATE; /** The BibDataBase object */ var $db = null; function __construct() {} /** returns the underlying BibDataBase object */ function getDB() { // by default set it from $_GET[Q_FILE] // first we set the database (load from disk or parse the bibtex file) if ($this->db == null) { list($db, $parsed, $updated, $saved) = _zetDB($_GET[Q_FILE]); $this->db = $db; } return $this->db; } function main() { // are we in test mode, or libray mode // then this file is just a library if (isset($_GET['test']) || isset($_GET['library'])) { // we unset in order to use the dispatcher afterwards unset($_GET['test']); unset($_GET['library']); return; } if (!isset($_GET[Q_FILE])) { die('$_GET[\''.Q_FILE.'\'] is not set!'); } // is the publication list included in another page? // strtr is used for Windows where __FILE__ contains C:\toto and SCRIPT_FILENAME contains C:/toto (bug reported by Marco) // realpath is required if the path contains sym-linked directories (bug found by Mark Hereld) if (strtr(realpath(__FILE__),"\\","/")!=strtr(realpath($_SERVER['SCRIPT_FILENAME']),"\\","/")) $this->wrapper=BIBTEXBROWSER_EMBEDDED_WRAPPER; // first pass, we will exit if we encounter key or menu or academic // other wise we just create the $this->query foreach($_GET as $keyword=>$value) { if (method_exists($this,$keyword)) { // if the return value is END_DISPATCH, we finish bibtexbrowser (but not the whole PHP process in case we are embedded) if ($this->$keyword()=='END_DISPATCH') return; } } // at this point, we may have a query if (count($this->query)>0) { // first test for inconsistent queries if (isset($this->query[Q_ALL]) && count($this->query)>1) { // we discard the Q_ALL, it helps in embedded mode unset($this->query[Q_ALL]); } $selectedEntries = $this->getDB()->multisearch($this->query); if (count($selectedEntries)==0) { $this->displayer = 'NotFoundDisplay'; } // default order uasort($selectedEntries, 'compare_bib_entries'); $selectedEntries = array_values($selectedEntries); //echo '
';print_r($selectedEntries);echo '
'; if ($this->displayer=='') { $this->displayer = bibtexbrowser_configuration('BIBTEXBROWSER_DEFAULT_DISPLAY'); } } // otherwise the query is left empty // do we have a displayer? if ($this->displayer!='') { $options = array(); if (isset($_GET['dopt'])) { $options = json_decode($_GET['dopt'],true); } // required for PHP4 to have this intermediate variable $x = new $this->displayer(); if (method_exists($x,'setEntries')) { $x->setEntries($selectedEntries); } if (method_exists($x,'setTitle')) { $x->setTitle(query2title($this->query)); } if (method_exists($x,'setQuery')) { $x->setQuery($this->query); } // should call method display() on $x $fun = $this->wrapper; $fun($x); $this->clearQuery(); } else { // we send a redirection for having the frameset // if some contents have already been sent, for instance if we are included // this means doing nothing if ( headers_sent() == false ) { /* to avoid sending an unnecessary frameset */ header("Location: ".$_SERVER['SCRIPT_NAME']."?frameset&bib=".$_GET[Q_FILE]); } } } /** clears the query string in $_GET so that bibtexbrowser can be called multiple times */ function clearQuery() { $params= array(Q_ALL,'rss', 'astext', Q_SEARCH, Q_EXCLUDE, Q_YEAR, EDITOR, Q_TAG, Q_AUTHOR, Q_TYPE, Q_ACADEMIC, Q_KEY); foreach($params as $p) { unset($_GET[$p]); } } function all() { $this->query[Q_ALL]=1; } function display() { $this->displayer=$_GET['display']; } function rss() { $this->displayer='RSSDisplay'; $this->wrapper='NoWrapper'; } function astext() { $this->displayer='BibtexDisplay'; $this->wrapper='NoWrapper'; } function search() { if (preg_match('/utf-?8/i',OUTPUT_ENCODING)) { $_GET[Q_SEARCH] = urldecode($_GET[Q_SEARCH]); } $this->query[Q_SEARCH]=$_GET[Q_SEARCH]; } function exclude() { $this->query[Q_EXCLUDE]=$_GET[Q_EXCLUDE]; } function year() { // we may want the latest if ($_GET[Q_YEAR]=='latest') { $years = $this->getDB()->yearIndex(); $_GET[Q_YEAR]=array_shift($years); } $this->query[Q_YEAR]=$_GET[Q_YEAR]; } function editor() { $this->query[EDITOR]=$_GET[EDITOR]; } function keywords() { $this->query[Q_TAG]=$_GET[Q_TAG]; } function author() { // Friday, October 29 2010 // changed from 'author' to '_author' // in order to search at the same time "Joe Dupont" an "Dupont, Joe" $this->query[Q_INNER_AUTHOR]=$_GET[Q_AUTHOR]; } function type() { $this->query[Q_TYPE]= $_GET[Q_TYPE]; } /** * Allow the user to search for a range of dates * * The query string can comprise several elements separated by commas and * optionally white-space. * Each element can either be one number (a year) or two numbers * (a range of years) separated by anything non-numerical. * */ function range() { $ranges = explode(',', $_GET[Q_RANGE]); $result = array(); $nextYear = 1 + (int) date('Y'); $nextYear2D = $nextYear % 100; $thisCentury = $nextYear - $nextYear2D; foreach ($ranges as $range) { $range = trim($range); preg_match('/([0-9]*)([^0-9]*)([0-9]*)/', $range, $matches); array_shift($matches); // If the number is empty, leave it empty - dont put it to 0 // If the number is two-digit, assume it to be within the last century or next year if ($matches[0] === "") { $lower = ""; } else if ($matches[0] < 100) { if ($matches[0] > $nextYear2D) { $lower = $thisCentury + $matches[0] - 100; } else { $lower = $thisCentury + $matches[0]; } } else { $lower = $matches[0]; } // If no separator to indicate a range of years was supplied, // the upper and lower boundaries are the same. // // Otherwise, again: // If the number is empty, leave it empty - dont put it to 0 // If the number is two-digit, assume it to be within the last century or next year if ($matches[1] === "") $upper = $lower; else { if ($matches[2] === "") { $upper = ""; } else if ($matches[2] < 100) { if ($matches[2] > $nextYear2D) { $upper = $thisCentury + $matches[2] - 100; } else { $upper = $thisCentury + $matches[2]; } } else { $upper = $matches[2]; } } $result[] = array($lower, $upper); } $this->query[Q_RANGE] = $result; } function menu() { $menu = createMenuManager(); $menu->setDB($this->getDB()); $fun = $this->wrapper; $fun($menu); return 'END_DISPATCH'; } /** the academic keyword in URLs switch from a year based viey to a publication type based view */ function academic() { $this->displayer='AcademicDisplay'; // backward compatibility with old GET API // this is deprecated // instead of academic=Martin+Monperrus // you should use author=Martin+Monperrus&academic // be careful of the semantics of === and !== // 'foo bar' == true is true // 123 == true is true (and whatever number different from 0 // 0 == true is true // '1'!=1 is **false** if(!isset($_GET[Q_AUTHOR]) && $_GET[Q_ACADEMIC]!==true && $_GET[Q_ACADEMIC]!=='true' && $_GET[Q_ACADEMIC]!=1 && $_GET[Q_ACADEMIC]!='') { $_GET[Q_AUTHOR]=$_GET[Q_ACADEMIC]; $this->query[Q_AUTHOR]=$_GET[Q_ACADEMIC]; } } function key() { $entries = array(); // case 1: this is a single key if ($this->getDB()->contains($_GET[Q_KEY])) { $entries[] = $this->getDB()->getEntryByKey($_GET[Q_KEY]); if (isset($_GET['astext'])) { $bibdisplay = new BibtexDisplay(); $bibdisplay->setEntries($entries); $bibdisplay->display(); } else { $bibdisplay = createBibEntryDisplay(); $bibdisplay->setEntries($entries); $fun = $this->wrapper; $fun($bibdisplay); } return 'END_DISPATCH'; } // case two: multiple keys if (preg_match('/[|,]/',$_GET[Q_KEY])) { $this->query[Q_SEARCH]=str_replace(',','|',$_GET[Q_KEY]); } else { nonExistentBibEntryError(); } } function keys() { // Create array from list of bibtex entries if (get_magic_quotes_gpc()) { $_GET[Q_KEYS] = stripslashes($_GET[Q_KEYS]); } $_GET[Q_KEYS] = (array) json_decode(urldecode($_GET[Q_KEYS])); // decode and cast the object into an (associative) array // Make the array 1-based (keeps the string keys unchanged) array_unshift($_GET[Q_KEYS],"__DUMMY__"); unset($_GET[Q_KEYS][0]); // Keep a flipped version for efficient search in getRawAbbrv() $_GET[Q_INNER_KEYS_INDEX] = array_flip($_GET[Q_KEYS]); $this->query[Q_KEYS]=$_GET[Q_KEYS]; } /** is used to remotely analyzed a situation */ function diagnosis() { header('Content-type: text/plain'); echo "php version: ".phpversion()."\n"; echo "bibtexbrowser version: 5e1ec86e21e72094a034cedf5dd013f9b01ad0cc\n"; echo "dir: ".decoct(fileperms(dirname(__FILE__)))."\n"; echo "bibtex file: ".decoct(fileperms($_GET[Q_FILE]))."\n"; exit; } function frameset() { ?> You are browsing <?php echo htmlentities($_GET[Q_FILE], ENT_QUOTES); ?> with bibtexbrowser load($arguments[1]); $current_entry=NULL; $current_field=NULL; for ($i=2;$igetEntryByKey($arguments[$i+1]); $i=$i+1; } if (preg_match('/^--set-(.*)/',$arg,$matches)) { $current_entry->setField($matches[1],$arguments[$i+1]); $i=$i+1; } } file_put_contents($arguments[1],$db->toBibtex()); } } // end if (!defined('BIBTEXBROWSER')) @include(preg_replace('/\.php$/','.after.php',__FILE__)); $class = BIBTEXBROWSER_MAIN;// extension point $main = new $class(); $main->main(); ?> data0000777121240400251540000000000013654765100014510 2../../data-rw/ddiustar grillenbmi_agddinew.php0000770121240400251540000002137413670163227012520 0ustar grillenbmi_agddi DDI-Publikationen: NEU
Format bitte unbedingt einhalten: Nachname 1, Vorname 1; Nachname 2, Vorname 2; ... (Journal- bzw. Proceedingstitel, falls zutreffend) (Herausgeber von Proceedings, falls zutreffend, Namensformat siehe oben)
$_POST["type"], "year" => $_POST["year"], "url" => $_POST["url"], "publisher" => $_POST["publisher"], "title" => $_POST["title"], "in" => $_POST["in"], "issue" => $_POST["issue"], "vol" => $_POST["vol"], "author" => str_replace(";", " and", $_POST["author"]), "editors" => str_replace(";", " and", $_POST["editors"]), "key" => hash("crc32", $_POST["title"]), ); $res = ""; if($data["type"] == "inproceedings") { $res = " @inproceedings{".$data["key"].", ".insertBib("Author", $data["author"])." ".insertBib("Booktitle", $data["in"])." ".insertBib("Editor", $data["editors"])." ".insertBib("Publisher", $data["publisher"])." ".insertBib("Title", $data["title"])." ".insertBib("Url", $data["url"])." ".insertBib("Year", $data["year"], false)." } "; } if($data["type"] == "article") { $res = " @article{".$data["key"].", ".insertBib("Author", $data["author"])." ".insertBib("Journal", $data["in"])." ".insertBib("Number", $data["issue"])." ".insertBib("Title", $data["title"])." ".insertBib("Volume", $data["volume"])." ".insertBib("Year", $data["year"], false)." } "; } if($data["type"] == "misc") { $res = " @misc{".$data["key"].", ".insertBib("Author", $data["author"])." ".insertBib("Booktitle", $data["in"])." ".insertBib("Editor", $data["editors"])." ".insertBib("Publisher", $data["publisher"])." ".insertBib("Title", $data["title"])." ".insertBib("Url", $data["url"])." ".insertBib("Year", $data["year"])." ".insertBib("Number", $data["issue"])." ".insertBib("Volume", $data["volume"], false)." } "; } if($data["type"] == "book") { $res = " @book{".$data["key"].", ".insertBib("Author", $data["author"])." ".insertBib("Editor", $data["editors"])." ".insertBib("Publisher", $data["publisher"])." ".insertBib("Title", $data["title"])." ".insertBib("Url", $data["url"])." ".insertBib("Year", $data["year"], false)." } "; } error_reporting(E_ALL); ini_set("display_errors", 1); file_put_contents("data/biblio.bib", $res, FILE_APPEND); echo "Fertig."; endif; function insertBib($key, $val, $comma = true) { if($val != "") return $key . " = {" . $val . "}" . ($comma ? "," : "") . "\r\n"; return ""; } ?> publications.php0000770121240400251540000001167214165631737014431 0ustar grillenbmi_agddi "Andreas Grillenberger", "Michaeli, Tilman" => "Tilman Michaeli", "Riel, Manuel" => "Manuel Riel", "Romeike, Ralf" => "Ralf Romeike", "Seegerer, Stefan" => "Stefan Seegerer", ); $authorsExt = array( "Jatzlau, Sven" => "Sven Jatzlau", "Kastl, Petra" => "Petra Kastl", "Przybylla, Mareen" => "Mareen Przybylla", ); $firstYear = 2006; $bibFile = "data/biblio.bib"; ///web/page.mi.fu-berlin.de/data-rw/grillenb/biblio.bib"; // End of configuration $_GET['bib'] = $bibFile; $_GET['all'] = 1; function printYearLinks($firstYear) { $lastYear = date("Y"); $y = $lastYear; while($y >= $firstYear) { if(isset($_GET["year"]) && $_GET["year"]==$y) print($y); else print("".$y.""); if($y < $lastYear) print(" | "); $y--; } } function printYearOptions($firstYear) { $lastYear = date("Y"); $y = $lastYear; print(""); while($y >= $firstYear) { print(""); $y--; } } function printAuthorLinks($authors) { $ct = count($authors); foreach($authors as $k=>$v) { if(isset($_GET["author"]) && $_GET["author"] == $k) print($v); else print("".$v.""); if($ct-- > 1) { print(" | "); } } } function printAuthorOptions($authorsFU, $authorsExt = "") { $ct = count($authorsFU) + count($authorsExt); print(""); print(""); print(""); foreach($authorsFU as $k=>$v) { print(""); } print(""); print(""); foreach($authorsExt as $k=>$v) { print(""); } } function printFilters() { $filters = ""; if(isset($_GET["year"]) && $_GET["year"] != "") { $filters .= "
- Jahr: ".htmlspecialchars($_GET["year"]); } if(isset($_GET["author"]) && $_GET["author"] != "") { $filters .= "
- Autor: ".htmlspecialchars($_GET["author"]); } if(strlen($filters) > 1) $filters .= "
zurücksetzen"; else $filters = "keine Filter angewendet"; print($filters); } ?> DDI-Publikationen

Publikationen

Publications

Filter:


" />
-->
Physical computing and its scope - towards a constructionist computer science curriculum with physical computing
by Przybylla, Mareen and Romeike, Ralf
Abstract:
Physical computing covers the design and realization of interactive objects and instal-lations and allows students to develop concrete, tangible products of the real world, which arise from the learners' imagination. This can be used in computer science education to provide students with interesting and motivating access to the different topic areas of the subject in construction-ist and creative learning environments. To make many existing activities and examples of such project ideas available for classroom use and to expand the topic areas suitable for learning in such environments beyond introductory to programming, a physical computing syllabus for computer science courses in general education schools has been developed. In this paper the methods and different perspectives that were taken into account are presented. The resulting syllabus can be used to develop a constructionist computer science curriculum with physical computing.
Reference:
Przybylla, Mareen and Romeike, Ralf: Physical computing and its scope - towards a constructionist computer science curriculum with physical computing, In: Informatics in Education, volume 13, 2014.
Bibtex Code:
@article{INFEDU14,
	Abstract = {Physical computing covers the design and realization of interactive objects and instal-lations and allows students to develop concrete, tangible products of the real world, which arise from the learners' imagination. This can be used in computer science education to provide students with interesting and motivating access to the different topic areas of the subject in construction-ist and creative learning environments. To make many existing activities and examples of such project ideas available for classroom use and to expand the topic areas suitable for learning in such environments beyond introductory to programming, a physical computing syllabus for computer science courses in general education schools has been developed. In this paper the methods and different perspectives that were taken into account are presented. The resulting syllabus can be used to develop a constructionist computer science curriculum with physical computing.},
	Addendum = {Reprint},
	Author = {Przybylla, Mareen and Romeike, Ralf},
	Date-Added = {2018-06-28 14:00:23 +0000},
	Date-Modified = {2018-11-03 12:03:14 +0100},
	Doi = {10.15388/infedu.2014.05 Titel anhand dieser DOI in Citavi-Projekt übernehmen},
	Isbn = {16485831},
	Issn = {16485831},
	Journal = {Informatics in Education},
	Keywords = {Dissertation,2014,Computer science education,Constructionist learning,Physical computing,Syllabus},
	Number = {2},
	Pages = {241--254},
	Pmid = {99720626},
	Title = {{Physical computing and its scope - towards a constructionist computer science curriculum with physical computing}},
	Volume = {13},
	Year = {2014},
	Bdsk-Url-1 = {https://dx.doi.org/10.15388/infedu.2014.05}}

back to publication list

Powered by bibtexbrowser