From a4389c03c8e1dc91e11750433fcfcf4f8dc638cb Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Thu, 20 Oct 2011 00:19:23 +0530 Subject: Add first Asia trip blends talk (fork of Vietnam trip blends talk. --- blends/talk.mdwn | 7 + blends/talk/Makefile | 11 + blends/talk/khammam.mkd | 272 ++++++++++++++++++++++ blends/talk/khammam/index.html | 339 ++++++++++++++++++++++++++++ blends/talk/slidy.css | 401 +++++++++++++++++++++++++++++++++ blends/talk/slidy.js | 501 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1531 insertions(+) create mode 100644 blends/talk.mdwn create mode 100644 blends/talk/Makefile create mode 100644 blends/talk/khammam.mkd create mode 100644 blends/talk/khammam/index.html create mode 100644 blends/talk/slidy.css create mode 100644 blends/talk/slidy.js (limited to 'blends') diff --git a/blends/talk.mdwn b/blends/talk.mdwn new file mode 100644 index 0000000..3f5676e --- /dev/null +++ b/blends/talk.mdwn @@ -0,0 +1,7 @@ +# Talks about Debian Pure Blends + +[[!tag talk]] + +## Talks presented during Asia trip, fall 2011 + + * [Khammam] diff --git a/blends/talk/Makefile b/blends/talk/Makefile new file mode 100644 index 0000000..e37108e --- /dev/null +++ b/blends/talk/Makefile @@ -0,0 +1,11 @@ +pandoc_sources := $(wildcard *.mkd) +presentations = $(pandoc_sources:%.mkd=%/index.html) +#aux = slidy.css + +all: $(presentations) + +# TODO: use --offline when working with Debian packaging of Pandoc +$(presentations): %/index.html : %.mkd + mkdir -p $(dir $@) + pandoc --from Markdown --to Slidy -o $@ -s $< + perl -i -pe 's{http://www.w3.org/Talks/Tools/Slidy2/(?:styles|scripts)/(slidy.(?:css|js))(?:\.gz)?}{../$$1}g' $@ diff --git a/blends/talk/khammam.mkd b/blends/talk/khammam.mkd new file mode 100644 index 0000000..cc7dc14 --- /dev/null +++ b/blends/talk/khammam.mkd @@ -0,0 +1,272 @@ +% Debian Pure Blends +% Jonas Smedegaard +% Khammam, October 20th, 2011 + +# Overview + + * Debian is generic - Blends are specific + * Purity: all is Debian + * Why bother? + * Technical details + * Team, community, users + * Future + +# Debian - the universal Operating System + + * Stable + * Flexible + +Debian is the universal Operating System. + +Goal + : Usable everywhere + +# Debian - very flexible... + +> * Flexible: good + * Very flexible: very good + +# Debian - **too** flexible! + + * Flexible: good + * ~~Very flexible: very good~~ + * Very flexible: very confusing! + +Debian is too flexible: confusing and to some even scary! + +# Debian - ways to simplify + + 1. Keep things as-is - educate users instead + 1. Remove choice + 1. Provide multiple defaults + +# Debian - simple if generic defaults are ok + + * Mainstream (but not too new) hardware + * GNOME desktop + * Iceweasel web browser + * Exim MTA + * Apache web server + * MySQL database server + +Debian *is* simple - if you happen to like its defaults. + +# Debian Pure Blend - Debian for a specific purpose + +Debian Pure Blend (in short DDD): a subset of Debian configured to +support a particular target group out-of-the-box. + +Goal 1 + : Turn Debian into the distribution of choice for a specific target + group +Goal 2 + : Advertise this fact to the world to attract users and developers + +# Debian Pure Blend - technical parts + + * package selection(s) + * customizations + +The concrete work to include as packages with official Debian. + +# Debian Pure Blend - reality parts + + * goals & noise about progress + * package health + encourage additional software packaging + * passion & patience + * good relations with Debian package maintainers, competitors, and upstream authors + * good relations with users + +Surrounding work making a Blend relevant. + +# Debian Pure Blend - current blending projects + + * Debian Jr + * Debian Med + * Debian Edu + * Debian Science + * Debian EzGo + * BrDesktop + * Debian Accessibility + * Debian Lex + * DebiChem + * Debian GIS + * Debian Multimedia + +Projects working on Blends - some pure, some not (yet)... + +# Debian Pure Blends - all Debian + + * **D**ebian packages - selections (e.g. for tasksel to pick up) + * **D**ebian configuration - use of policy-compliant package-provided interfaces + * **D**ebian distribution media - installing via Debian itself + +DDD + : **Debian** packages **Debian** configured from **Debian** distribution + +# Debian Pure Blends - why bother? + +Nice on paper with ideals and priciples, but... + +What's in it for me?!? + +# Debian Pure Blends - downsides + + * **annoying** - Debian package maintainers may not like proposed changes + * **slow** - stable distribution is released infrequently + * **rigid** - all contributions must match Debian Free Software Guidelines + * **complex** - packages must obey Debian Policy + +# Debian Pure Blends - Benefits + + * backed by Debian - help, bug tracking, translations, etc. + * teamwork - others might help you refine and maintain your setups + * common structures - others might take over if you loose interest + +# Tech - Debian support overloading choices + + * Debian installer + * tasksel + * debconf + * aptitude + +# Tech - examples of non-pure blending + + * include non-Debian packages or non-packaged stuff + * include Debian packages from different Debian suite + * configure system other than via Debian package installation + * install using non-Debian media + +You don't own your system - you provide one for others to own. + +So don't refine it like a (sloppy) user: Handle it like a Debian developer! + +# Tech - Debian, generic setup + + * select package profile(s) + * install + +# Tech - Debian, hand-tuned + + * select package profile(s) + * select additional packages + * install + * (re)configure packages + +# Tech - Debian, auto-tuned + + * pre-seed package selection + * pre-seed package configurations + * install + * (re)configure non-debconf packages + +# Tech - Debian Pure Blend = generic + + * select blend profile + * install + +# Tech - tasks involved + + * extra software → into Debian officially + * manual configurations → preseeding + * maybe create temporary dirty hacks + * maybe use/create reusable tweaks + * eliminate dirty hacks and tweaks + * convince others in Debian to add as tasksel task + +# Tech - blends-dev + +Tool to help maintain package lists and prospective packages. + +Example: + +# Tech - dirty tricks + +Avoid configuration files... + + * config.d folders + * databases + * networked data + +# Tech - tweaks + +Reusable scripts compatible with one or more of... + + * FAI + * hands-off at http://hands.com/d-i/ + * CFengine + * Puppet + +# Tech - good style + + * Aptitude + * debconf + * Config::Model + +# Tech - When is it "Pure"? + +When all is in Debian, with no dirty tricks: + + * package selection(s) + * customizations + * installation + +# Team - getting involved + + * identify and isolate tweaks at your own system + * register missing software - on wiki page or (better!) in Debian BTS + * write documentation + * write the dream of how things ought to work + * wite how details work now + * discuss downstream (i.e. with users and subdistros) how things work / + should work + * discuss upstream (i.e. with authors) what is possible now / soon + +# Team - getting involved II + + * write intro for peer enthusiasts + * decide and document ideal formats - translations, graphics etc. + * prioritize pending tasks - of various kinds to encourage many + different contributions + * document where it is ok to ask beginners' questions + * document if beginners can ask for a mentor + +# Team - getting involved III + + * make illustration + * make screendumps + * make fan graphics + * make desktop backgrounds, CD covers, stickers, etc. + * Register the project as a DOAP file, and maybe at Ohloh and Freshmeat + etc. + * Register and maintain relevant Debtags + +# Team - getting involved IV + + * Translate package descriptions + * Translate debconf dialogs + * Translate upstream code + +# Team - getting involved V + + * Help integrate contributions from graphics artists, translators and + others + * document decision processes of the team (and Debian and upstreams?) + * document workflows in teams + * insist on transparency - not only for code! + +# Team - Continuous status checks + + * Ask users about their needs - you will forget over time! + * Ask teams about their tasks - each participant has slightly different + perception of the common vision and status + * Ask upstreams about use: perhaps potentials are missed, or code or + persons feel as being abused + +# Debian Pure Blends - Future + + * debconf dontcare vs. explicit choice of default option + * debconf query mechanism (and fill buffer from live system) + * APT explicit choice of alternate dependency/recommendation + * APT dontcare vs. explicit choice of default dependency/recommendation + * Config::Model - semantic configfile handling diff --git a/blends/talk/khammam/index.html b/blends/talk/khammam/index.html new file mode 100644 index 0000000..9a215b3 --- /dev/null +++ b/blends/talk/khammam/index.html @@ -0,0 +1,339 @@ + + + + + + + + + + + + +
+

Debian Pure Blends

+

+Jonas Smedegaard +

+

Khammam, October 20th, 2011

+
+
+

Overview

+
    +
  • Debian is generic - Blends are specific
  • +
  • Purity: all is Debian
  • +
  • Why bother?
  • +
  • Technical details
  • +
  • Team, community, users
  • +
  • Future
  • +
+
+
+

Debian - the universal Operating System

+
    +
  • Stable
  • +
  • Flexible
  • +
+

Debian is the universal Operating System.

+
+
Goal
+
Usable everywhere +
+
+
+
+

Debian - very flexible...

+
    +
  • Flexible: good
  • +
  • Very flexible: very good
  • +
+
+
+

Debian - too flexible!

+
    +
  • Flexible: good
  • +
  • Very flexible: very good
  • +
  • Very flexible: very confusing!
  • +
+

Debian is too flexible: confusing and to some even scary!

+
+
+

Debian - ways to simplify

+
    +
  1. Keep things as-is - educate users instead
  2. +
  3. Remove choice
  4. +
  5. Provide multiple defaults
  6. +
+
+
+

Debian - simple if generic defaults are ok

+
    +
  • Mainstream (but not too new) hardware
  • +
  • GNOME desktop
  • +
  • Iceweasel web browser
  • +
  • Exim MTA
  • +
  • Apache web server
  • +
  • MySQL database server
  • +
+

Debian is simple - if you happen to like its defaults.

+
+
+

Debian Pure Blend - Debian for a specific purpose

+

Debian Pure Blend (in short DDD): a subset of Debian configured to support a particular target group out-of-the-box.

+
+
Goal 1
+
Turn Debian into the distribution of choice for a specific target group +
+
Goal 2
+
Advertise this fact to the world to attract users and developers +
+
+
+
+

Debian Pure Blend - technical parts

+
    +
  • package selection(s)
  • +
  • customizations
  • +
+

The concrete work to include as packages with official Debian.

+
+
+

Debian Pure Blend - reality parts

+
    +
  • goals & noise about progress
  • +
  • package health + encourage additional software packaging
  • +
  • passion & patience
  • +
  • good relations with Debian package maintainers, competitors, and upstream authors
  • +
  • good relations with users
  • +
+

Surrounding work making a Blend relevant.

+
+
+

Debian Pure Blend - current blending projects

+
    +
  • Debian Jr
  • +
  • Debian Med
  • +
  • Debian Edu
  • +
  • Debian Science
  • +
  • Debian EzGo
  • +
  • BrDesktop
  • +
  • Debian Accessibility
  • +
  • Debian Lex
  • +
  • DebiChem
  • +
  • Debian GIS
  • +
  • Debian Multimedia
  • +
+

Projects working on Blends - some pure, some not (yet)...

+
+
+

Debian Pure Blends - all Debian

+
    +
  • Debian packages - selections (e.g. for tasksel to pick up)
  • +
  • Debian configuration - use of policy-compliant package-provided interfaces
  • +
  • Debian distribution media - installing via Debian itself
  • +
+
+
DDD
+
Debian packages Debian configured from Debian distribution +
+
+
+
+

Debian Pure Blends - why bother?

+

Nice on paper with ideals and priciples, but...

+

What's in it for me?!?

+
+
+

Debian Pure Blends - downsides

+
    +
  • annoying - Debian package maintainers may not like proposed changes
  • +
  • slow - stable distribution is released infrequently
  • +
  • rigid - all contributions must match Debian Free Software Guidelines
  • +
  • complex - packages must obey Debian Policy
  • +
+
+
+

Debian Pure Blends - Benefits

+
    +
  • backed by Debian - help, bug tracking, translations, etc.
  • +
  • teamwork - others might help you refine and maintain your setups
  • +
  • common structures - others might take over if you loose interest
  • +
+
+
+

Tech - Debian support overloading choices

+
    +
  • Debian installer
  • +
  • tasksel
  • +
  • debconf
  • +
  • aptitude
  • +
+
+
+

Tech - examples of non-pure blending

+
    +
  • include non-Debian packages or non-packaged stuff
  • +
  • include Debian packages from different Debian suite
  • +
  • configure system other than via Debian package installation
  • +
  • install using non-Debian media
  • +
+

You don't own your system - you provide one for others to own.

+

So don't refine it like a (sloppy) user: Handle it like a Debian developer!

+
+
+

Tech - Debian, generic setup

+
    +
  • select package profile(s)
  • +
  • install
  • +
+
+
+

Tech - Debian, hand-tuned

+
    +
  • select package profile(s)
  • +
  • select additional packages
  • +
  • install
  • +
  • (re)configure packages
  • +
+
+
+

Tech - Debian, auto-tuned

+
    +
  • pre-seed package selection
  • +
  • pre-seed package configurations
  • +
  • install
  • +
  • (re)configure non-debconf packages
  • +
+
+
+

Tech - Debian Pure Blend = generic

+
    +
  • select blend profile
  • +
  • install
  • +
+
+
+

Tech - tasks involved

+
    +
  • extra software → into Debian officially
  • +
  • manual configurations → preseeding
  • +
  • maybe create temporary dirty hacks
  • +
  • maybe use/create reusable tweaks
  • +
  • eliminate dirty hacks and tweaks
  • +
  • convince others in Debian to add as tasksel task
  • +
+
+
+

Tech - blends-dev

+

Tool to help maintain package lists and prospective packages.

+

Example: http://debian-med.alioth.debian.org/tasks/psychology

+
+
+

Tech - dirty tricks

+

Avoid configuration files...

+
    +
  • config.d folders
  • +
  • databases
  • +
  • networked data
  • +
+
+
+

Tech - tweaks

+

Reusable scripts compatible with one or more of...

+
    +
  • FAI
  • +
  • hands-off at http://hands.com/d-i/
  • +
  • CFengine
  • +
  • Puppet
  • +
+
+
+

Tech - good style

+
    +
  • Aptitude
  • +
  • debconf
  • +
  • Config::Model
  • +
+
+
+

Tech - When is it "Pure"?

+

When all is in Debian, with no dirty tricks:

+
    +
  • package selection(s)
  • +
  • customizations
  • +
  • installation
  • +
+
+
+

Team - getting involved

+
    +
  • identify and isolate tweaks at your own system
  • +
  • register missing software - on wiki page or (better!) in Debian BTS
  • +
  • write documentation
  • +
  • write the dream of how things ought to work
  • +
  • wite how details work now
  • +
  • discuss downstream (i.e. with users and subdistros) how things work / should work
  • +
  • discuss upstream (i.e. with authors) what is possible now / soon
  • +
+
+
+

Team - getting involved II

+
    +
  • write intro for peer enthusiasts
  • +
  • decide and document ideal formats - translations, graphics etc.
  • +
  • prioritize pending tasks - of various kinds to encourage many different contributions
  • +
  • document where it is ok to ask beginners' questions
  • +
  • document if beginners can ask for a mentor
  • +
+
+
+

Team - getting involved III

+
    +
  • make illustration
  • +
  • make screendumps
  • +
  • make fan graphics
  • +
  • make desktop backgrounds, CD covers, stickers, etc.
  • +
  • Register the project as a DOAP file, and maybe at Ohloh and Freshmeat etc.
  • +
  • Register and maintain relevant Debtags
  • +
+
+
+

Team - getting involved IV

+
    +
  • Translate package descriptions
  • +
  • Translate debconf dialogs
  • +
  • Translate upstream code
  • +
+
+
+

Team - getting involved V

+
    +
  • Help integrate contributions from graphics artists, translators and others
  • +
  • document decision processes of the team (and Debian and upstreams?)
  • +
  • document workflows in teams
  • +
  • insist on transparency - not only for code!
  • +
+
+
+

Team - Continuous status checks

+
    +
  • Ask users about their needs - you will forget over time!
  • +
  • Ask teams about their tasks - each participant has slightly different perception of the common vision and status
  • +
  • Ask upstreams about use: perhaps potentials are missed, or code or persons feel as being abused
  • +
+
+
+

Debian Pure Blends - Future

+
    +
  • debconf dontcare vs. explicit choice of default option
  • +
  • debconf query mechanism (and fill buffer from live system)
  • +
  • APT explicit choice of alternate dependency/recommendation
  • +
  • APT dontcare vs. explicit choice of default dependency/recommendation
  • +
  • Config::Model - semantic configfile handling
  • +
+
+ + diff --git a/blends/talk/slidy.css b/blends/talk/slidy.css new file mode 100644 index 0000000..96e3da7 --- /dev/null +++ b/blends/talk/slidy.css @@ -0,0 +1,401 @@ +/* slidy.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; + font-size: 14pt; +} + +div.toolbar { + position: fixed; z-index: 200; + top: auto; bottom: 0; left: 0; right: 0; + height: 1.2em; text-align: right; + padding-left: 1em; + padding-right: 1em; + font-size: 60%; + color: red; + background-color: rgb(240,240,240); + border-top: solid 1px rgb(180,180,180); +} + +div.toolbar span.copyright { + color: black; + margin-left: 0.5em; +} + +div.initial_prompt { + position: absolute; + z-index: 1000; + bottom: 1.2em; + width: 100%; + background-color: rgb(200,200,200); + opacity: 0.35; + background-color: rgb(200,200,200, 0.35); + cursor: pointer; +} + +div.initial_prompt p.help { + text-align: center; +} + +div.initial_prompt p.close { + text-align: right; + font-style: italic; +} + +div.slidy_toc { + position: absolute; + z-index: 300; + width: 60%; + max-width: 30em; + height: 30em; + overflow: auto; + top: auto; + right: auto; + left: 4em; + bottom: 4em; + padding: 1em; + background: rgb(240,240,240); + border-style: solid; + border-width: 2px; + font-size: 60%; +} + +div.slidy_toc .toc_heading { + text-align: center; + width: 100%; + margin: 0; + margin-bottom: 1em; + border-bottom-style: solid; + border-bottom-color: rgb(180,180,180); + border-bottom-width: 1px; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 20px; + padding-right: 20px; + border-width: 0; + clear: both; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 10%; + margin-right: 0; +} + +div.slide h1 { + padding-left: 0; + padding-right: 20pt; + padding-top: 4pt; + padding-bottom: 4pt; + margin-top: 0; + margin-left: 0; + margin-right: 60pt; + margin-bottom: 0.5em; + display: block; + font-size: 160%; + line-height: 1.2em; + background: transparent; +} + +div.toc { + position: absolute; + top: auto; + bottom: 4em; + left: 4em; + right: auto; + width: 60%; + max-width: 30em; + height: 30em; + border: solid thin black; + padding: 1em; + background: rgb(240,240,240); + color: black; + z-index: 300; + overflow: auto; + display: block; + visibility: visible; +} + +div.toc-heading { + width: 100%; + border-bottom: solid 1px rgb(180,180,180); + margin-bottom: 1em; + text-align: center; +} + +pre { + font-size: 80%; + font-weight: bold; + line-height: 120%; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-left: 1em; + padding-right: 1em; + border-style: solid; + border-left-width: 1em; + border-top-width: thin; + border-right-width: thin; + border-bottom-width: thin; + border-color: #95ABD0; + color: #00428C; + background-color: #E4E5E7; +} + +li pre { margin-left: 0; } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +.smaller { font-size: smaller } +.bigger { font-size: 130% } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } + +ul li { + list-style: square; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 0; + line-height: 140%; +} + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; + list-style-type: decimal; +} + +li ul li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li ul li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li ul li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +li ol li { + list-style-type: decimal; +} + + +li li ol li { + list-style-type: decimal; +} + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +/* for slides with class "title" in table of contents */ +a.titleslide { font-weight: bold; font-style: italic } + +/* + hide images for work around for save as bug + where browsers fail to save images used by CSS +*/ +img.hidden { display: none; visibility: hidden } +div.initial_prompt { display: none; visibility: hidden } + + div.slide { + visibility: visible; + position: inherit; + } + div.handout { + border-top-style: solid; + border-top-width: thin; + border-top-color: black; + } + +@media screen { + .hidden { display: none; visibility: visible } + + div.slide.hidden { display: block; visibility: visible } + div.handout.hidden { display: block; visibility: visible } + div.background { display: none; visibility: hidden } + body.single_slide div.initial_prompt { display: block; visibility: visible } + body.single_slide div.background { display: block; visibility: visible } + body.single_slide div.background.hidden { display: none; visibility: hidden } + body.single_slide .invisible { visibility: hidden } + body.single_slide .hidden { display: none; visibility: hidden } + body.single_slide div.slide { position: absolute } + body.single_slide div.handout { display: none; visibility: hidden } +} + +@media print { + .hidden { display: block; visibility: visible } + + div.slide pre { font-size: 60%; padding-left: 0.5em; } + div.toolbar { display: none; visibility: hidden; } + div.slidy_toc { display: none; visibility: hidden; } + div.background { display: none; visibility: hidden; } + div.slide { page-break-before: always } + /* :first-child isn't reliable for print media */ + div.slide.first-slide { page-break-before: avoid } +} + diff --git a/blends/talk/slidy.js b/blends/talk/slidy.js new file mode 100644 index 0000000..9c6d7b1 --- /dev/null +++ b/blends/talk/slidy.js @@ -0,0 +1,501 @@ + +var w3c_slidy={ns_pos:(typeof window.pageYOffset!='undefined'),khtml:((navigator.userAgent).indexOf("KHTML")>=0?true:false),opera:((navigator.userAgent).indexOf("Opera")>=0?true:false),ipad:((navigator.userAgent).indexOf("iPad")>=0?true:false),iphone:((navigator.userAgent).indexOf("iPhone")>=0?true:false),android:((navigator.userAgent).indexOf("Android")>=0?true:false),ie:(typeof document.all!="undefined"&&!this.opera),ie6:(!this.ns_pos&&navigator.userAgent.indexOf("MSIE 6")!=-1),ie7:(!this.ns_pos&&navigator.userAgent.indexOf("MSIE 7")!=-1),ie8:(!this.ns_pos&&navigator.userAgent.indexOf("MSIE 8")!=-1),ie9:(!this.ns_pos&&navigator.userAgent.indexOf("MSIE 9")!=-1),last_tap:0,prev_tap:0,start_x:0,start_y:0,delta_x:0,delta_y:0,is_xhtml:/xml/.test(document.contentType),slide_number:0,slide_number_element:null,slides:[],notes:[],backgrounds:[],toolbar:null,title:null,last_shown:null,eos:null,toc:null,outline:null,selected_text_len:0,view_all:0,want_toolbar:true,mouse_click_enabled:true,scroll_hack:0,disable_slide_click:false,lang:"en",help_anchor:null,help_page:"http://www.w3.org/Talks/Tools/Slidy2/help/help.html",help_text:"Navigate with mouse click, space bar, Cursor Left/Right, "+"or Pg Up and Pg Dn. Use S and B to change font size.",size_index:0,size_adjustment:0,sizes:new Array("10pt","12pt","14pt","16pt","18pt","20pt","22pt","24pt","26pt","28pt","30pt","32pt"),last_width:0,last_height:0,objects:[],set_up:function(){var init=function(){w3c_slidy.init();};if(typeof window.addEventListener!="undefined") +window.addEventListener("load",init,false);else +window.attachEvent("onload",init);},hide_slides:function(){if(document.body&&!w3c_slidy.initialized) +document.body.style.visibility="hidden";else +setTimeout(w3c_slidy.hide_slides,50);},ie_hack:function(){window.resizeBy(0,-1);window.resizeBy(0,1);},init:function(){document.body.style.visibility="visible";this.init_localization();this.add_toolbar();this.wrap_implicit_slides();this.collect_slides();this.collect_notes();this.collect_backgrounds();this.objects=document.body.getElementsByTagName("object");this.patch_anchors();this.slide_number=this.find_slide_number(location.href);window.offscreenbuffering=true;this.size_adjustment=this.find_size_adjust();this.time_left=this.find_duration();this.hide_image_toolbar();this.init_outliner();this.title=document.title;this.keyboardless=(this.ipad||this.iphone||this.android);if(this.keyboardless) +{w3c_slidy.remove_class(w3c_slidy.toolbar,"hidden") +this.want_toolbar=0;} +this.is_xhtml=(document.body.tagName=="BODY"?false:true);if(this.slides.length>0) +{var slide=this.slides[this.slide_number];if(this.slide_number>0) +{this.set_visibility_all_incremental("visible");this.last_shown=this.previous_incremental_item(null);this.set_eos_status(true);} +else +{this.last_shown=null;this.set_visibility_all_incremental("hidden");this.set_eos_status(!this.next_incremental_item(this.last_shown));} +this.set_location();this.add_class(this.slides[0],"first-slide");w3c_slidy.show_slide(slide);} +this.toc=this.table_of_contents();this.add_initial_prompt();if(!this.keyboardless) +this.add_listener(document.body,"click",this.mouse_button_click);this.add_listener(document,"keydown",this.key_down);this.add_listener(document,"keypress",this.key_press);this.add_listener(window,"resize",this.resized);this.add_listener(window,"scroll",this.scrolled);this.add_listener(window,"unload",this.unloaded);this.add_listener(document,"touchstart",this.touchstart);this.add_listener(document,"touchmove",this.touchmove);this.add_listener(document,"touchend",this.touchend);this.single_slide_view();this.resized();if(this.ie7) +setTimeout(w3c_slidy.ie_hack,100);this.show_toolbar();setInterval(function(){w3c_slidy.check_location();},200);w3c_slidy.initialized=true;},table_of_contents:function(){var toc=this.create_element("div");this.add_class(toc,"slidy_toc hidden");var heading=this.create_element("div");this.add_class(heading,"toc-heading");heading.innerHTML=this.localize("Table of Contents");toc.appendChild(heading);var previous=null;for(var i=0;i100||abs_dy>100)) +{if(abs_dx>0.5*abs_dy) +{if(dx>0) +w3c_slidy.next_slide(true);else +w3c_slidy.previous_slide(true);} +else if(abs_dy>2*abs_dx) +{w3c_slidy.toggle_table_of_contents();}}},before_print:function(){this.show_all_slides();this.hide_toolbar();alert("before print");},after_print:function(){if(!this.view_all) +{this.single_slide_view();this.show_toolbar();} +alert("after print");},print_slides:function(){this.before_print();window.print();this.after_print();},toggle_view:function(){if(this.view_all) +{this.single_slide_view();this.show_toolbar();this.view_all=0;} +else +{this.show_all_slides();this.hide_toolbar();this.view_all=1;}},show_all_slides:function(){this.remove_class(document.body,"single_slide");this.set_visibility_all_incremental("visible");},single_slide_view:function(){this.add_class(document.body,"single_slide");this.set_visibility_all_incremental("visible");this.last_shown=this.previous_incremental_item(null);},hide_image_toolbar:function(){if(!this.ns_pos) +{var images=document.getElementsByTagName("IMG");for(var i=0;i=0?true:false);},slide_name:function(index){var name=null;var slide=this.slides[index];var heading=this.find_heading(slide);if(heading) +name=this.extract_text(heading);if(!name) +name=this.title+"("+(index+1)+")";name.replace(/\&/g,"&");name.replace(/\/g,">");return name;},find_heading:function(node){if(!node||node.nodeType!=1) +return null;if(node.nodeName=="H1"||node.nodeName=="h1") +return node;var child=node.firstChild;while(child) +{node=this.find_heading(child);if(node) +return node;child=child.nextSibling;} +return null;},extract_text:function(node){if(!node) +return"";if(node.nodeType==3) +return node.nodeValue;if(node.nodeType==1) +{node=node.firstChild;var text="";while(node) +{text=text+this.extract_text(node);node=node.nextSibling;} +return text;} +return"";},find_copyright:function(){var name,content;var meta=document.getElementsByTagName("meta");for(var i=0;i0&&(hash==""||hash=="#")) +w3c_slidy.goto_slide(0);else if(hash.length>2&&hash!="#("+(w3c_slidy.slide_number+1)+")") +{var num=parseInt(location.hash.substr(2));if(!isNaN(num)) +w3c_slidy.goto_slide(num-1);} +if(w3c_slidy.time_left&&w3c_slidy.slide_number>0) +{w3c_slidy.show_slide_number();if(w3c_slidy.time_left>0) +w3c_slidy.time_left-=200;}},get_timer:function(){var timer="";if(w3c_slidy.time_left) +{var mins,secs;secs=Math.floor(w3c_slidy.time_left/1000);mins=Math.floor(secs/60);secs=secs%60;timer=(mins?mins+"m":"")+secs+"s ";} +return timer;},set_location:function(){var uri=w3c_slidy.page_address(location.href);var hash="#("+(w3c_slidy.slide_number+1)+")";if(w3c_slidy.slide_number>=0) +uri=uri+hash;if(w3c_slidy.ie&&(w3c_slidy.ie6||w3c_slidy.ie7)) +w3c_slidy.push_hash(hash);if(uri!=location.href) +location.href=uri;if(this.khtml) +hash="("+(w3c_slidy.slide_number+1)+")";if(!this.ie&&location.hash!=hash&&location.hash!="") +location.hash=hash;document.title=w3c_slidy.title+" ("+(w3c_slidy.slide_number+1)+")";w3c_slidy.show_slide_number();},page_address:function(uri){var i=uri.indexOf("#");if(i<0) +i=uri.indexOf("%23");if(i<0) +return uri;return uri.substr(0,i);},on_frame_loaded:function(hash){location.hash=hash;var uri=w3c_slidy.page_address(location.href);location.href=uri+hash;},push_hash:function(hash){if(hash=="")hash="#(1)";window.location.hash=hash;var doc=document.getElementById("historyFrame").contentWindow.document;doc.open("javascript:''");doc.write("hello mum");doc.close();},find_slide_number:function(uri){var i=uri.indexOf("#");if(i<0) +return 0;var anchor=unescape(uri.substr(i+1));var target=document.getElementById(anchor);if(!target) +{var re=/\((\d)+\)/;if(anchor.match(re)) +{var num=parseInt(anchor.substring(1,anchor.length-1));if(num>this.slides.length) +num=1;if(--num<0) +num=0;return num;} +re=/\[(\d)+\]/;if(anchor.match(re)) +{var num=parseInt(anchor.substring(1,anchor.length-1));if(num>this.slides.length) +num=1;if(--num<0) +num=0;return num;} +return 0;} +while(true) +{if(target.nodeName.toLowerCase()=="div"&&this.has_class(target,"slide")) +{break;} +target=target.parentNode;if(!target) +{return 0;}};for(i=0;i0) +{slide=w3c_slidy.slides[w3c_slidy.slide_number];w3c_slidy.hide_slide(slide);w3c_slidy.slide_number=w3c_slidy.slide_number-1;slide=w3c_slidy.slides[w3c_slidy.slide_number];w3c_slidy.set_visibility_all_incremental("visible");w3c_slidy.last_shown=w3c_slidy.previous_incremental_item(null);w3c_slidy.set_eos_status(true);w3c_slidy.show_slide(slide);} +w3c_slidy.set_location();if(!w3c_slidy.ns_pos) +w3c_slidy.refresh_toolbar(200);}},next_slide:function(incremental){if(!w3c_slidy.view_all) +{var slide,last=w3c_slidy.last_shown;if(incremental||w3c_slidy.slide_number==w3c_slidy.slides.length-1) +w3c_slidy.last_shown=w3c_slidy.reveal_next_item(w3c_slidy.last_shown);if((!incremental||w3c_slidy.last_shown==null)&&w3c_slidy.slide_number=0||bgColor.indexOf("opacity")>=0) +{var slideClass=this.get_class_list(slide);for(var i=0;i1.05*1024/768)) +{width=height*1024.0/768;} +if(width!=w3c_slidy.last_width||height!=w3c_slidy.last_height) +{if(width>=1100) +w3c_slidy.size_index=5;else if(width>=1000) +w3c_slidy.size_index=4;else if(width>=800) +w3c_slidy.size_index=3;else if(width>=600) +w3c_slidy.size_index=2;else if(width) +w3c_slidy.size_index=0;if(0<=w3c_slidy.size_index+w3c_slidy.size_adjustment&&w3c_slidy.size_index+w3c_slidy.size_adjustmentoh?sh:oh);} +return 0;},smaller:function(){if(w3c_slidy.size_index>0) +{--w3c_slidy.size_index;} +w3c_slidy.toolbar.style.display="none";document.body.style.fontSize=w3c_slidy.sizes[w3c_slidy.size_index];var slide=w3c_slidy.slides[w3c_slidy.slide_number];w3c_slidy.hide_slide(slide);w3c_slidy.show_slide(slide);setTimeout(function(){w3c_slidy.show_toolbar();},50);},bigger:function(){if(w3c_slidy.size_index0) +{var range=selection.getRangeAt(0);range.collapse(false);}} +else +{var textRange=document.selection.createRange();textRange.collapse(false);}},get_selected_text:function(){try +{if(window.getSelection) +return window.getSelection().toString();if(document.getSelection) +return document.getSelection().toString();if(document.selection) +return document.selection.createRange().text;} +catch(e) +{} +return"";},mouse_button_up:function(e){w3c_slidy.selected_text_len=w3c_slidy.get_selected_text().length;},mouse_button_click:function(e){var rightclick=false;var leftclick=false;var middleclick=false;var target;if(!e) +var e=window.event;if(e.target) +target=e.target;else if(e.srcElement) +target=e.srcElement;if(target.nodeType==3) +target=target.parentNode;if(e.which) +{leftclick=(e.which==1);middleclick=(e.which==2);rightclick=(e.which==3);} +else if(e.button) +{if(e.button==4) +middleclick=true;rightclick=(e.button==2);} +else +leftclick=true;if(w3c_slidy.selected_text_len>0) +{w3c_slidy.stop_propagation(e);e.cancel=true;e.returnValue=false;return false;} +w3c_slidy.hide_table_of_contents(false);var tag=target.nodeName.toLowerCase();if(w3c_slidy.mouse_click_enabled&&leftclick&&!w3c_slidy.special_element(target)&&!target.onclick) +{w3c_slidy.next_slide(true);w3c_slidy.stop_propagation(e);e.cancel=true;e.returnValue=false;return false;} +return true;},special_element:function(e){var tag=e.nodeName.toLowerCase();return e.onkeydown||e.onclick||tag=="a"||tag=="embed"||tag=="object"||tag=="video"||tag=="audio"||tag=="input"||tag=="textarea"||tag=="select"||tag=="option";},slidy_chrome:function(el){while(el) +{if(el==w3c_slidy.toc||el==w3c_slidy.toolbar||w3c_slidy.has_class(el,"outline")) +return true;el=el.parentNode;} +return false;},get_key:function(e) +{var key;if(typeof window.event!="undefined") +key=window.event.keyCode;else if(e.which) +key=e.which;return key;},get_target:function(e){var target;if(!e) +e=window.event;if(e.target) +target=e.target;else if(e.srcElement) +target=e.srcElement;if(target.nodeType!=1) +target=target.parentNode;return target;},is_block:function(elem){var tag=elem.nodeName.toLowerCase();return tag=="ol"||tag=="ul"||tag=="p"||tag=="li"||tag=="table"||tag=="pre"||tag=="h1"||tag=="h2"||tag=="h3"||tag=="h4"||tag=="h5"||tag=="h6"||tag=="blockquote"||tag=="address";},add_listener:function(element,event,handler){if(window.addEventListener) +element.addEventListener(event,handler,false);else +element.attachEvent("on"+event,handler);},stop_propagation:function(event){event=event?event:window.event;event.cancelBubble=true;if(event.stopPropagation) +event.stopPropagation();return true;},cancel:function(event){if(event) +{event.cancel=true;event.returnValue=false;if(event.preventDefault) +event.preventDefault();} +w3c_slidy.key_wanted=false;return false;},strings_es:{"slide":"pág.","help?":"Ayuda","contents?":"Índice","table of contents":"tabla de contenidos","Table of Contents":"Tabla de Contenidos","restart presentation":"Reiniciar presentación","restart?":"Inicio"},help_es:"Utilice el ratón, barra espaciadora, teclas Izda/Dcha, "+"o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",strings_ca:{"slide":"pàg..","help?":"Ajuda","contents?":"Índex","table of contents":"taula de continguts","Table of Contents":"Taula de Continguts","restart presentation":"Reiniciar presentació","restart?":"Inici"},help_ca:"Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. "+"o Re pàg y Av pàg. Usi S i B per canviar grandària de font.",strings_cs:{"slide":"snímek","help?":"nápověda","contents?":"obsah","table of contents":"obsah prezentace","Table of Contents":"Obsah prezentace","restart presentation":"znovu spustit prezentaci","restart?":"restart"},help_cs:"Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, "+"šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se "+"dá zvětšit a zmenšit pomocí kláves B a S.",strings_nl:{"slide":"pagina","help?":"Help?","contents?":"Inhoud?","table of contents":"inhoudsopgave","Table of Contents":"Inhoudsopgave","restart presentation":"herstart presentatie","restart?":"Herstart?"},help_nl:"Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, "+"of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.",strings_de:{"slide":"Seite","help?":"Hilfe","contents?":"Übersicht","table of contents":"Inhaltsverzeichnis","Table of Contents":"Inhaltsverzeichnis","restart presentation":"Präsentation neu starten","restart?":"Neustart"},help_de:"Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder "+"Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.",strings_pl:{"slide":"slajd","help?":"pomoc?","contents?":"spis treści?","table of contents":"spis treści","Table of Contents":"Spis Treści","restart presentation":"Restartuj prezentację","restart?":"restart?"},help_pl:"Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo"+"lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.",strings_fr:{"slide":"page","help?":"Aide","contents?":"Index","table of contents":"table des matières","Table of Contents":"Table des matières","restart presentation":"Recommencer l'exposé","restart?":"Début"},help_fr:"Naviguez avec la souris, la barre d'espace, les flèches "+"gauche/droite ou les touches Pg Up, Pg Dn. Utilisez "+"les touches S et B pour modifier la taille de la police.",strings_hu:{"slide":"oldal","help?":"segítség","contents?":"tartalom","table of contents":"tartalomjegyzék","Table of Contents":"Tartalomjegyzék","restart presentation":"bemutató újraindítása","restart?":"újraindítás"},help_hu:"Az oldalak közti lépkedéshez kattintson az egérrel, vagy "+"használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, "+"Page Up billentyűket. Az S és a B billentyűkkel változtathatja "+"a szöveg méretét.",strings_it:{"slide":"pag.","help?":"Aiuto","contents?":"Indice","table of contents":"indice","Table of Contents":"Indice","restart presentation":"Ricominciare la presentazione","restart?":"Inizio"},help_it:"Navigare con mouse, barra spazio, frecce sinistra/destra o "+"PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.",strings_el:{"slide":"σελίδα","help?":"βοήθεια;","contents?":"περιεχόμενα;","table of contents":"πίνακας περιεχομένων","Table of Contents":"Πίνακας Περιεχομένων","restart presentation":"επανεκκίνηση παρουσίασης","restart?":"επανεκκίνηση;"},help_el:"Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, "+"ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε "+"το μέγεθος της γραμματοσειράς.",strings_ja:{"slide":"スライド","help?":"ヘルプ","contents?":"目次","table of contents":"目次を表示","Table of Contents":"目次","restart presentation":"最初から再生","restart?":"最初から"},help_ja:"マウス左クリック ・ スペース ・ 左右キー "+"または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更",strings_zh:{"slide":"幻灯片","help?":"帮助?","contents?":"内容?","table of contents":"目录","Table of Contents":"目录","restart presentation":"重新启动展示","restart?":"重新启动?"},help_zh:"用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. "+"用 S, B 改变字体大小.",strings_ru:{"slide":"слайд","help?":"помощь?","contents?":"содержание?","table of contents":"оглавление","Table of Contents":"Оглавление","restart presentation":"перезапустить презентацию","restart?":"перезапуск?"},help_ru:"Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки"+"влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.",strings_sv:{"slide":"sida","help?":"hjälp","contents?":"innehåll","table of contents":"innehållsförteckning","Table of Contents":"Innehållsförteckning","restart presentation":"visa presentationen från början","restart?":"börja om"},help_sv:"Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, "+"vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. "+"Använd tangenterna S och B för att ändra textens storlek.",strings:{},localize:function(src){if(src=="") +return src;var s,lookup=w3c_slidy.strings[w3c_slidy.lang];if(lookup) +{s=lookup[src];if(s) +return s;} +var lg=w3c_slidy.lang.split("-");if(lg.length>1) +{lookup=w3c_slidy.strings[lg[0]];if(lookup) +{s=lookup[src];if(s) +return s;}} +return src;},init_localization:function(){var i18n=w3c_slidy;var help_text=w3c_slidy.help_text;this.strings={"es":this.strings_es,"ca":this.strings_ca,"cs":this.strings_cs,"nl":this.strings_nl,"de":this.strings_de,"pl":this.strings_pl,"fr":this.strings_fr,"hu":this.strings_hu,"it":this.strings_it,"el":this.strings_el,"jp":this.strings_ja,"zh":this.strings_zh,"ru":this.strings_ru,"sv":this.strings_sv},i18n.strings_es[help_text]=i18n.help_es;i18n.strings_ca[help_text]=i18n.help_ca;i18n.strings_cs[help_text]=i18n.help_cs;i18n.strings_nl[help_text]=i18n.help_nl;i18n.strings_de[help_text]=i18n.help_de;i18n.strings_pl[help_text]=i18n.help_pl;i18n.strings_fr[help_text]=i18n.help_fr;i18n.strings_hu[help_text]=i18n.help_hu;i18n.strings_it[help_text]=i18n.help_it;i18n.strings_el[help_text]=i18n.help_el;i18n.strings_ja[help_text]=i18n.help_ja;i18n.strings_zh[help_text]=i18n.help_zh;i18n.strings_ru[help_text]=i18n.help_ru;i18n.strings_sv[help_text]=i18n.help_sv;w3c_slidy.lang=document.body.parentNode.getAttribute("lang");if(!w3c_slidy.lang) +w3c_slidy.lang=document.body.parentNode.getAttribute("xml:lang");if(!w3c_slidy.lang) +w3c_slidy.lang="en";}};if(w3c_slidy.ie6||w3c_slidy.ie7) +{document.write("");} +w3c_slidy.set_up();setTimeout(w3c_slidy.hide_slides,50); \ No newline at end of file -- cgit v1.2.3