--- joko/doc/SampleTasks/joko_2003-01.html 2003/01/23 19:38:19 1.1 +++ joko/doc/SampleTasks/joko_2003-01.html 2003/01/25 03:03:25 1.28 @@ -1,3 +1,8 @@ + + + +
+
 joko@netfrag.org - sample stack:
 
   o [task by joko] introduced "dispatchmail" to add mail2news-functionality to "recieveMail" (collector@netfrag.org)
@@ -29,7 +34,7 @@
   x seems to make an external web-based newsreader unneccessary!!!
 
 o tie together mail, news and html
-   o write mini-howto
+   c write mini-howto
 
 o link with erfrakon
 
@@ -60,63 +65,24 @@
 
 o check out from cvs-repository:
   o joko/doc -> /home/joko/public_html/computing/overview/topics/
-  o leaded to (A):
-    o write mini-howto: "howto use, document and enhance the '.cvslink'-symlinking-mechanism"
-    o introduce command to 'tiki-workflow|tiki-publish'
-    x introduced '.cvs'-interface (directory-style)
-      x now directly accessible (but hidden) via http://netfrag.org/~joko/computing/overview/topics/.cvs/
-      x here: made public by adding a "README.html" (or "HEADER.html") which either:
-        x includes a html-link (a-tag) to './.cvs'
-        o makes a redirect via meta-tags or javascript
-  o leads to (B):
-    o start 'home2web':
-      x begin with having an overview of the recent topics stored in cvs
-      x continue by expanding this topic-list through more details
-         x use mechanisms delivered from Apache
-            x HEADER.html, README.html
-            x php: http-redirect
-      o add more links!
-        o fix proposals of how links should be expanded (maybe post RFC to news.netfrag.org first? -> create newsgroup 'nfo.rfc')
-          x manually? no! (hmmm, grrrr......)
-          o pod? for now!
-          o DocBook? not yet!
-          o some wiki? why not?
-        o add links to internal tools (e.g. TUTOS, chora, etc.)
-        o add external links
-      o add co-worker topics
-  o leads to (C):
-    o write mini-howto: web publishing with cvs
-       - write in pod
-       - commit to cvs
-       - checkout from cvs
-       - build html from pod
-       - publish html
-  x do that regularly / in interval: use cron!
-      su joko
-      cd ~
-      nano .cronrc-hourly
-      add line(s): [...]  cvs update topics  [...]
-      crontab -e
-      add line: * 1 * * * ~/.cronrc-hourly
-  o post message "About" (this) to announce@news.netfrag.org
-
-
-adduser: collector/col§$
-
-
-some sample items occoured 2003-01-17 until 2003-01-26.
-
-what to do with that?
-  o have all items stored in other applications conveniently.
-  o be able to have items or references to them *archived* centrally
-  o be able to access informations via *one* interface.
-     actually *multiple* interfaces should be possible 
-       - the aim here is to get everything together (INTEGRATE!) (mnoGoSearch first! Torus::Archive later?)
-
-sysadmin tasks:
+  o leaded to (A, B and C): see home2web
 
-joko's tasks:
+o added user@netfrag.org:
+  x adduser: collector/col§$
 
+o about: some sample items occoured 2003-01-17 until 2003-01-26.
+  what to do with that?
+    o have all items stored in other applications conveniently.
+    o be able to have items or references to them *archived* centrally
+    o be able to access informations via *one* interface.
+       actually *multiple* interfaces should be possible 
+         - the aim here is to get everything together (INTEGRATE!) (mnoGoSearch first! Torus::Archive later?)
+
+o refactor topics:
+  o make global-accessible@netfrag.org
+  o introduce subtopics
+    o sysadmin tasks
+    o janosch's, jonen's and joko's tasks
 
 o start project "admintools" @ nfo/perl/scripts - including
    o getip.pl
@@ -158,3 +124,462 @@
 
 o rename "thread" to "newsgroup" in all scripts!
 
+o what about: 
+  Torus::Xyz - solution to reuse concepts of Apache 2 and Cyrus 2!!! (and OpenLDAP???) for building an open collaboration server?
+
+o word-search: "identify" and "search" for
+
+o establish global "logs/" - like at http://moose.qx.net/logs/
+
+o add redirecting page when someone wants to access
+   o http://netfrag.org/~joko/phpChoPro/ or
+   o http://netfrag.org/~joko/w2hfax/
+
+o update mail-dispatching-rules - aim: a more flat structure!!!
+  o look at ilo.de/Inbox
+    o marked message to Spam? Newsletters?
+  x move: logs/cvs/quepasa.netfrag.org -> logs/netfrag.org
+  x look at netfrag.org/Inbox
+    x if subject matches "Cron " set target "logs/netfrag.org/joko/cron" [push over cron]
+      x mkdir Mail/SORTED/netfrag.org/joko
+      x touch Mail/SORTED/netfrag.org/joko/cron
+    x if subject matches "quepasa daily usenet report" at begin set target "logs/netfrag.org/system/applications" [push over inn]
+    x if subject matches "[CVS" at begin set target "logs/netfrag.org/cvs" [push over CVSSpam]
+    x if mail is from myself set target "me2myself"
+    x moved some folders
+      x move already existing file to folder
+        x mv logs/netfrag.org/system logs/netfrag.org/system.tmp
+        x mkdir logs/netfrag.org/system
+        x mv logs/netfrag.org/system.tmp logs/netfrag.org/system/applications
+      x mv netfrag.org/Status/h1.service.netfrag.org logs/netfrag.org/system/
+      x mv netfrag.org/Status/TWikiChanges logs/twiki.org/ChangeLog
+        x mkdir logs/twiki.org
+        x do changes in .dispatchmailrc  -  always - ;-)
+      x mv netfrag.org/Status/quepasa.netfrag.org logs/netfrag.org/system/
+      x blocked email-partition   *partition*! - email-partition(!) -> WordFinder
+        x mkdir ../FILTERED
+        x mv netfrag.org/Status/Spam ../FILTERED
+        x mv netfrag.org/Status/Test misc/
+      x mv netfrag.org/Status/Postmaster\ Routing misc/Postmaster
+      x rmdir netfrag.org/Status/
+  x look at netfrag.org/Inbox - again
+        
+      
+  o look at quepasa.netfrag.org/Inbox
+    o [Multisync-users]
+    o [Kroupware]
+  x tested the rules from above
+    x echo This is a testmail. Please ignore it. | mail -s "[CVS hello]" joko
+o move old mails to MailHistory
+    
+  o write parser and engine to handle above declaration: Mail::Audit::Dispatch::Interface::Script
+  o add "X-"-field (X-Dispatched-By: dispatchmail-0.06 - http://netfrag.org/~joko/computing/dispatchmail/)
+    
+o release mail from above from joko - introduce another email-address
+  - e.g. work@netfrag.org, event@netfrag.org or tracker@netfrag.org (like collector@netfrag.org)
+
+o Multisync & SyncML
+  o post something to mailing-list...!?
+
+o the '.cvslink'-mechanism:
+  o type: ln -s /home/joko/public_html/_web/_cvs.php .
+
+o LinkContainer
+  - insert via drag & drop
+  - shows links hierarchically
+
+o (Self)Info - mails to yourself  
+  o convert all "(Self)Info" mails to 
+  news-messages - use "formail" and ...?
+
+o h1.service.netfrag.org
+  o base os-upgrade: suse X -> debian 3.0
+  
+o dispatchmail
+  o are Mail-Headers already added?
+
+o workflow (PostThisLink)
+  o drag link from done google-search ...
+  o ... to container (at the current Task)
+  o a news-post is created automagically
+    o use this:
+      [smtp-header-fields]
+      From: expanded email-address resolved from Name|Nickname in Addressbook (via LDAP!)
+      Subject: googled for ""
+      [body]
+      o include into mime-part if not already included
+        o fetch from web on demand
+
+o ssl/tls for inn?
+
+o dispatchmail
+  o re-link as sub-/module-project under Torus::Content::Gateway (mail2news, mail2fax)
+  o -> Torus::Content - a content delivery engine
+  o -> additional idea: Torus::Content::Gateway is "just" the API to "Torus::Item::Router" in this case
+    o 'Torus::Content::Gateway' would then route 'Torus::Item::RFC822'-objects using 'Torus::Item::Router'
+  o look at sieve - jonen posted to nfo.links.computing: [r:Message-ID: ]
+  o re-link as sub-/module-project under Torus::Virtual (mail2folder, mail2mail)
+    o here it acts as a dispatcher from incoming mails - TARGET gets resolved via ldap-resolvement
+    o make possible: MAIL-IN -> mail2mail (via ldap-query) -> mail2fax|mail2news
+  o mail2news
+    x the "via-fetchmail"-solution
+    x su collector
+    x cd ~
+    x chmod og-rwx .fetchmailrc
+
+o finally: do actually establish 'Torus' at 'nfo/perl/libs'
+
+o pod: checkout how to make references which expand to html-urls
+  o does pod handle this or do we need external link-expansion for this task?
+  o how to make references to news-messages?
+      e.g.:
+      o Message-ID: 
+      o news://news.netfrag.org/nfo.links.computing
+   o proposal(s) for "news2http" (Torus::Content::Gateway/Torus::Item::???):
+      o http://news.netfrag.org/id=b0ppj7$7gv$1@quepasa.netfrag.org
+      o http://news.netfrag.org/nfo.links.computing/subject=FilteringMailWithSieve of wiki
+      o http://news.netfrag.org/nfo.links.computing/id=b0ppj7$7gv$1@quepasa.netfrag.org
+
+o what about the '.nws'-files on ms? (for news-messages)
+
+o display-mode: everything strictly hierarchical to get maximum overview!!!
+
+x Inventory: cleaned up local and master code repositories
+
+o add "last-updated" to "README.html"
+
+o search.netfrag.org
+
+o tool for the "DoThis", "DoHere", "DoAll" - series
+  o FaxThis (joko/ToolBox/Windows/FaxThis)
+  o tool "WinSync": (WinSync All)
+    x RsyncHere
+    o Contacts2Ldap
+
+o statistics-page:
+  o for cvs.netfrag.org: cvs-statistics (activeness, ...), sloccount
+
+x home2web
+  x finally - added complete /home/joko/ to cvs-repository in order to get a revisioned ".dispatchmailrc"
+    x ~/.bashrc - added line: export CVSROOT=/var/lib/cvs
+    x relogin: logout/login
+    x cd ~
+    x joko@quepasa:~$ cvs checkout -d . joko     (Fri Jan 24 00:43:18 CET 2003)
+    x cvs add TODO 
+    x cvs add .bashrc .cronrc-hourly .forward
+  x added /home/joko/virtual/joko_mail
+    [as joko]
+    x cvs add virtual
+    x chmod g+w virtual/CVS/*
+    [as joko_mail
+  o shortcut for (e.g.): cvs commit  -m "initial check-in" .bashrc .cronrc-hourly .forward
+      o cvsadd      
+  o add /home/root (and maybe include there some other things "lying around")
+
+o alternative to all that Cyrus-stuff: just use the very "normal" imapd together with kerberos
+
+o make screenshots of log-output of dispatchmail when it's ready
+
+o base logging of 'dispatchmail' on DesignPattern::Object::Logger
+
+o dispatchmail-mail2folder: add feature to create folders recursively
+
+x archive mails
+  x su joko_mail
+  x cd ~
+  x mv ilo.de/Inbox ~/MailHistory/ARCHIVED/ilo.de/2002-05-30\ -\ 2003-01-24
+  x mkdir ~/MailHistory/ARCHIVED/netfrag.org/2003-01
+  x mv netfrag.org/Info ~/MailHistory/ARCHIVED/netfrag.org/2003-01/
+    x changed rule which formerly targeted to 'netfrag.org/Info' into 'me2myself'
+  x mv netfrag.org/Inbox ~/MailHistory/ARCHIVED/netfrag.org/2003-01/
+  x mkdir ~/MailHistory/ARCHIVED/netfrag.org/2003-01/Status
+    x mv netfrag.org/Status/cashew.netfrag.org ~/MailHistory/ARCHIVED/netfrag.org/2003-01/Status/
+    x mv netfrag.org/Status/h1.service.netfrag.org ~/MailHistory/ARCHIVED/netfrag.org/2003-01/Status/
+  x mv Sent ~/MailHistory/ARCHIVED/Sent/Sent_2002-11-13_-_2003-01-24
+  
+
+o investigate LDAP-entry "mailForwardingAddress"
+
+o establish "Mini-HowTo"
+
+o search (allover): /^.*\.netfrag\.org/  => find all hostnames to register 
+   (they are scattered around in to-be-installed (web-)applications)
+
+o Mail::Audit::Dispatch::Lookup (csv-file, ::NetLDAP, => Data::Storage::Handler::Xyz => Data::Map)
+
+x switched mailing completely in outlook
+  o Evolution!
+  x now talking to 'wu-imapd' via ssl, too! - thanks to jonen!
+    Jan 24 04:55:17 quepasa imapd[11508]: connect from 217.231.123.57
+    Jan 24 04:55:17 quepasa imapd[11508]: imaps SSL service init from 217.231.123.57
+    Jan 24 04:55:18 quepasa imapd[11508]: Login user=joko_mail host=pD9E77B39.dip.t-dialin.net [217.231.123.57]
+  x now my outlook sends via 'mail.netfrag.org' using 'TLS' - thanks to jonen!
+    Jan 24 04:53:09 quepasa sm-mta[11499]: STARTTLS=server, relay=pD9E77B39.dip.t-dialin.net [217.231.123.57], version=TLSv1/SSLv3, verify=NO, cipher=RC4-MD5, bits=128/128
+    Jan 24 04:53:10 quepasa sm-mta[11499]: h0O3r91D011499: from=, size=435, class=0, nrcpts=1, msgid=<008c01c2c35c$5701d2a0$240aa8c0@grasshopper>, proto=ESMTP, daemon=MTA, relay=pD9E77B39.dip.t-dialin.net [217.231.123.57]
+
+o use IMAPFilter!!!
+
+o refactor old TODOs using 'home2web'
+
+o webgate (like dispatchmail)
+
+o zeit anhalten! (alle grauen männer umbringen!)
+
+o add to cvs:
+   o /home/service/
+   o /home/service/virtual/collector
+   o /home/service/virtual/tracker
+   o /home/service/virtual/fetcher
+   o /home/service/virtual/archiver
+
+o use 'wCron' to automagically do a 'cvs commit -m "+ updated/added content" joko/doc'
+  x mkdir -p C:\Programme\WCron
+  x unzip -j "C:\home\amo\develop\netfrag.org\rabit\wCron\releases\WCron-0.62-pre.zip" -d C:\Programme\WCron
+  o win2000: change/check permissions: right-click/Properties/Security Settings/Read, Execute = enabled
+  x run it
+  x add task
+    x implement shortcut-script: joko/Scripts/shortcuts/cvs_commit_joko-doc.bat
+      x add lines:
+        x cd C:\home\amo\develop\netfrag.org\joko
+        x cvs commit -m "+ updated/added content" doc      
+
+
+o on Windows it's called "QuickLaunch" ....
+
+o plugins for nautilus/gnome/kde:
+  show arbitrary data-structures (from anywhere): here we may get the drag & drop - functionality "on-the-fly"
+
+o new user "gateway":
+  x adduser --home /home/service/virtual/gateway gateway  (pass: gw%R%)
+  x mkdir /var/lib/cvs/gateway
+  x chown -R gateway.gateway /var/lib/cvs/gateway
+  x su gateway
+  x cvs -d /var/lib/cvs checkout -d ~ gateway
+  
+x error on quepasa:
+    Jan 24 19:00:09 quepasa sm-mta[17960]: STARTTLS=server, relay=pD9E77B39.dip.t-dialin.net [217.231.123.57], version=TLSv1/SSLv3, verify=NO, cipher=RC4-MD5, bits=128/128
+    Jan 24 19:00:09 quepasa sm-mta[17960]: h0OI081D017960: ruleset=check_rcpt, arg1=, relay=pD9E77B39.dip.t-dialin.net [217.231.123.57], reject=550 5.7.1 ... Relaying denied. Proper authentication required.
+  x add to /etc/mail/default-auth-info
+    sendmail
+    sendmail
+    sendmailpwd
+    quepasa.netfrag.org
+  x /etc/init.d/sendmail restart
+
+o Torus::Publish::Research::Web
+   o googling for something automagically opens a new task
+   o all links directly or indirectly coming out of this are sorted below this task
+   o the user can end this task on demand: timetracking is done automagically as well
+   
+o register tutos.netfrag.org
+
+o qpopper with tls, sasl and kerberos5?
+
+o off realtime! the only thing that happens at realtime is MailMiltering.
+   x cvs checkout of joko/doc is done via cron
+   x mail2news-dispatching is now done via cron (would be possible "in realtime" via '.forward'ing the mail *directly* to dispatchmail)
+
+o ctlinnd newgroup nfo.csm (Collaborative System Management)
+
+o make possible:
+  o after "cvs update" make question: "Found new items in "" while scanning. Should i add them to the repository?"
+  o drag & drop arbitrary items out of outlook (.msg, .nws, etc.) - search for them while scanning the fs and sync them 
+     against *original* source. (e.g. 'Message-ID: ')
+
+x CVSSpam -> nfo.log.cvs
+  x su root
+  x cd /etc/mail
+  x nano virtusertable
+  x add line:
+    x cvs-log@netfrag.org             gateway
+  x make virtusertable
+  x su gateway
+  x cd ~
+  x nano .dispatchmailrc
+    x add lines:
+      $self->copy('Newsgate', 'nfo.log.cvs')
+        if $to =~ m/cvs-log/;
+  x exit   (to logout)
+  x cvs update CVSROOT/loginfo
+  x add to CVSROOT/loginfo (to the end of the line starting with '^nfo '):
+    --to cvs-log@netfrag.org
+  x cvs commit -m "+ added new notification target: 'cvs-log@netfrag.org'" CVSROOT/loginfo
+  x tested with some mini-howto
+  x removed '--to joko@netfrag.org --to jonen@netfrag.org --to bareface@netfrag.org --to janosch@netfrag.org '
+     from CVSROOT/loginfo for module 'nfo'
+  x announce this
+    x added to '/etc/news/nnrp.access': 
+      *:Read Post:bareface:bareface:*
+    x /etc/init.d/inn reload
+
+x add 'gateways'-repository to chora
+  x nano /data/www/doc/horde/chora/config/cvsroots.php
+  x add lines:
+    # 2003-01-24, joko
+    $cvsroots['gateway'] = array(
+        'name' => 'gateway',
+        'location' => '/var/lib/cvs/gateway',
+        'title' => "$titlePrefix gateway's CVS Repository",
+        'cvsusers' => $cvsusers,
+    );
+
+x configured Apache for serving news.netfrag.org
+   x cleaned up /data/www/virtual/netfrag/conf/httpd.conf
+      x ./test.conf
+      x comments
+   x /etc/init.d/apache reload
+   x test: http://news.netfrag.org/
+   
+   
+
+o new module for cvs-repository?
+   o nfo/layouts/fs/skel/data2
+   o checkout to /data on quepasa.netfrag.org
+   x done:
+      x su root
+      x cd /var/lib/cvs
+      x mkdir -p nfo/layouts/fs/skel/data
+      x mkdir -p nfo/layouts/fs/skel/data2
+      x mkdir -p nfo/hosts/quepasa.netfrag.org/data
+      x cvs -d /var/lib/cvs checkout -d /data nfo/hosts/quepasa.netfrag.org/data
+        x *mungle everything and commit!*  look at the repository!
+      x add special group with access to this repository: 'rootsrc'
+        x groupadd rootsrc
+        x usermod -G src,staff,rootsrc joko
+        x usermod -G src,staff,rootsrc jonen
+        x usermod -G rootsrc root
+        x change permissions
+          x cd /var/lib/cvs/nfo/
+          x chown -R .rootsrc hosts
+          x chmod -R g+w hosts
+
+    
+x add to system-conf-repository:
+  x /etc/mail
+  x php: cvs-redirect
+  x 
+  
+o extend WCron
+   x show (per-task) if it's currently running or not: provide buttons to (start, stop, pause, resume or cancel a task...)
+   x use as a frontend for administering nfo/libs/perl/ - backend - tasks(???)
+   
+x install Horde/Troll
+   x install troll
+     x cd /home/service/download
+     x mkdir horde
+     x cd horde
+     x wget ftp://ftp.horde.org/pub/troll/troll-0.0.2.tar.gz
+     x tar -xzf troll-0.0.2.tar.gz --directory=/data/www/doc/horde/
+   x configure horde
+     x cd /data/www/doc/horde/
+     x nano config/registry.php
+        x add lines:
+         $this->applications['troll'] = array(
+             'fileroot' => dirname(__FILE__) . '/../troll',
+             'webroot' => $this->applications['horde']['webroot'] . '/troll',
+             'icon' => $this->applications['horde']['webroot'] . '/troll/graphics/troll.gif',
+             'name' => _("News"),
+             'allow_guests' => true,
+             'show' => true
+         );
+      x configure Troll
+        x cd troll/config
+        x conf.php
+          x cp conf.php.dist conf.php
+          x nano conf.php
+          x edit:
+            x $conf['news']['server'] = 'news.netfrag.org';
+            x $conf['news']['mailserver'] = 'mail.netfrag.org';
+        x servers.php
+          x cp servers.php.dist servers.php
+          x add:
+            $servers['netfrag.org'] = array(
+                'name' => 'news.netfrag.org',
+                'server' => 'news.netfrag.org',
+                'port' => 119,
+            );
+        x prefs.php
+          x cp prefs.php.dist prefs.php
+        x html.php
+          x cp html.php.dist html.php
+        x permissions
+          x chmod o+r *.php
+          
+        
+      x test: http://netfrag.org/horde/
+        o another (more bright) skin for horde@netfrag.org!!!
+        
+o Warum nicht überall Horde? Sondern TUTOS?
+   o Horde ist sehr breit angelegt, dafür fehlt es jedoch an vielen Stellen noch ein wenig im Detail.
+   o mittlerweile: mit Hermes & Co.? nochmal ansehen!
+
+o just do automated operations (like cvs commit) only if system is idle
+
+o automagically redirect http://netfrag.org/horde/ to https://netfrag.org/horde/
+  o with an Apache - rewrite-rule?
+  
+x how to map TUTOS-groups to newsgroups?
+  x ctlinnd newgroup nfo.tutos.sysadmin
+  x add dispatching for sysadmin@netfrag.org
+    x add to /home/service/virtual/gateway/.dispatchmailrc
+      $self->copy('Newsgate', 'nfo.tutos.sysadmin') if $to =~ m/sysadmin/;
+    x add to /etc/mail/virtusertable:
+      # --- news.netfrag.org - joko, 2003-01-24
+      sysadmin@netfrag.org            gateway
+      make virtusertable!
+    x write welcome-mail
+      root@quepasa:~$ mail sysadmin@netfrag.org
+      Subject: Welcome to the sysadmin-newsgroup at netfrag.org!
+      Have fun!
+      greets, joko.
+      
+      .
+      Cc:
+    x test: do "refresh newsgroups" at your favourite news-reader
+  x this has been refactored to: [news:id=b0shbj$l9s$1@quepasa.netfrag.org]
+    x HEADERS:
+      x Message-ID: 
+      x Subject: Re: Welcome to the sysadmin-newsgroup at netfrag.org!
+    o newsgate
+      o http://news.netfrag.org/nfo.tutos.sysadmin/id/b0shbj$l9s$1@quepasa.netfrag.org
+      o http://news.netfrag.org/nfo.tutos.sysadmin/subject/Re: Welcome to the sysadmin-newsgroup at netfrag.org!
+
+o Erkenntnis aus UML (Kernel 2.4): schwierig mit gleichzeitigem Zugriff
+
+o gave up trying to get Troll running
+
+x setup alternatives to Horde for public access
+  o viewcvs
+    x apt-get install libapache-mod-python
+    
+  o WebNewsViewer
+  
+o release the user from having to send email-messages to actually post urls with content (e.g. "FirstPage")
+
+o parse .url-files!
+
+o have newsgroup-structure backed in ldap-container (ou) somehow (Data::Map!)
+
+x new email-addresses@netfrag.org:
+  x sysadmin@netfrag.org
+  x faq@netfrag.org
+  
+x setup newsportal (by Florian Amrhein)
+  x url: http://florian-amrhein.de/newsportal/
+  x cd /home/service/download
+  x mkdir newsportal
+  x cd newsportal
+  x wget http://florian-amrhein.de/newsportal/download/newsportal-0.24.tar.gz
+  x mkdir -p /data/www/virtual/netfrag/sites/news/apps/newsportal/
+  x tar -xzf newsportal-0.24.tar.gz --directory=/data/www/virtual/netfrag/sites/news/apps/newsportal/
+
+o rework apache-layout - check into repository as something root is responsible for!
+
+
+
+ +
+$Id: joko_2003-01.html,v 1.28 2003/01/25 03:03:25 joko Exp $ + + +