Mimis Blog

07.09.2010
00:54

Black & White

 

 

Nach zahlreichen (meist ergebnislosen) Versuchen, vernünftige SW-Umwandlung mit Photoshop hinzukriegen, hier mal wieder eins frisch aus Lightroom (warum kann nicht alles so einfach sein?!?). Wollte es mal klar Schwarz und Weiß haben...

02.09.2010
00:26

ExtBase Cookbook #11 - Using ExtBase Controller as Subcontroller

During the past couple of days, we thought about how to use an ExtBase Controller as a sub controller. What we wanted to achieve was using a Controller inside another controller to process a certain action. In our project, we work on a extension rendering lists. If you want to use a list inside your plugin, it would be nice to simply call the list controller inside your plugin controller and make it render some domain objects for example. So here is how we wanted the whole thing to work:

 

 

  1. /**
  2.  * Action that is run, whenever a list of galleries should be displayed
  3.  *
  4.  * @return string The rendered index action
  5.  */
  6. public function indexAction() {
  7. $subcontrollerFactory =
  8. Tx_PtExtlist_Controller_SubcontrollerFactory::getInstanceByListId('gallery_list');
  9. $subcontroller = $subcontrollerFactory->createSubcontroller('list');
  10. $renderedList = $subcontroller->listAction();
  11. $this->view->assign('galleries_list', $renderedList);
  12. }

 

 

After a little while we discovered some ugly side-effects that did not make it that easy as we first thought to simply use a controller as sub-controller. Most of the problems reside inside the Dispatcher and the mechanism of how requests are dispatched and what happens, whenever a redirect or forward is triggered. So we came up with the following solution which is not quite finished yet but seems to work fine.

 

First of all, we do not use the controller class itself as subcontroller but generate a wrapper for the controller that handles all dispatching and gives as the way of calling a controller action described above, no matter whether we have forwards or things like that:

 

 

  1. <?php
  2. /***************************************************************
  3. * Copyright notice
  4. *
  5. * (c) 2010 Daniel Lienert <lienert@punkt.de>, Michael Knoll <knoll@punkt.de>
  6. * All rights reserved
  7. *
  8. *
  9. * This script is part of the TYPO3 project. The TYPO3 project is
  10. * free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; either version 2 of the License, or
  13. * (at your option) any later version.
  14. *
  15. * The GNU General Public License can be found at
  16. * http://www.gnu.org/copyleft/gpl.html.
  17. *
  18. * This script is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * This copyright notice MUST APPEAR in all copies of the script!
  24. ***************************************************************/
  25.  
  26. /**
  27.  * Wrapper class for subcontroller. Handles requests for subcontrollers
  28.  * and emulates dispatching functionality like forwarding etc.
  29.  *
  30.  * @author Michael Knoll <knoll@punkt.de>
  31.  * @package TYPO3
  32.  * @subpackage pt_extlist
  33.  */
  34. class Tx_PtExtlist_Controller_SubcontrollerWrapper extends
  35. Tx_PtExtlist_Controller_AbstractController {
  36.  
  37. /**
  38. * Holds a reference of the controller to be used as subcontroller
  39. *
  40. * @var Tx_PtExtlist_Controller_AbstractController
  41. */
  42. protected $subcontroller;
  43.  
  44.  
  45.  
  46. /**
  47. * Holds an instance of subcontroller factory to create
  48. * instances of subcontrollers for forwardings etc.
  49. *
  50. * @var Tx_PtExtlist_Controller_SubcontrollerFactory
  51. */
  52. protected $subcontrollerFactory;
  53.  
  54.  
  55.  
  56. /**
  57. * Holds an instance of current request that has to be processed by subcontroller
  58. *
  59. * @var Tx_Extbase_MVC_Web_Request
  60. */
  61. protected $request;
  62.  
  63.  
  64.  
  65. /**
  66. * Holds an instance of current response that is manipulated by subcontroller
  67. *
  68. * @var Tx_Extbase_MVC_Web_Response
  69. */
  70. protected $response;
  71.  
  72.  
  73.  
  74. /**
  75. * Injector for request
  76. *
  77. * @param Tx_Extbase_MVC_Web_Request $request
  78. */
  79. public function injectRequest(Tx_Extbase_MVC_Web_Request $request) {
  80. $this->request = $request;
  81. }
  82.  
  83.  
  84.  
  85. /**
  86. * Injector for response
  87. *
  88. * @param Tx_Extbase_MVC_Web_Response $response
  89. */
  90. public function injectResponse(Tx_Extbase_MVC_Web_Response $response) {
  91. $this->response = $response;
  92. }
  93.  
  94.  
  95.  
  96. /**
  97. * Injector for subcontroller
  98. *
  99. * @param Tx_PtExtlist_Controller_AbstractController $subcontroller
  100. */
  101. public function injectSubcontroller
  102. (Tx_PtExtlist_Controller_AbstractController $subcontroller) {
  103. $this->subcontroller = $subcontroller;
  104. }
  105.  
  106.  
  107.  
  108. /**
  109. * Injector for subcontroller factory
  110. *
  111. * @param Tx_PtExtlist_Controller_SubcontrollerFactory $subcontrollerFactory
  112. */
  113. public function injectSubcontrollerFactory
  114. (Tx_PtExtlist_Controller_SubcontrollerFactory $subcontrollerFactory) {
  115. $this->subcontrollerFactory = $subcontrollerFactory;
  116. }
  117.  
  118.  
  119.  
  120. /**
  121. * Magic function that handles action-calls on subcontroller wrapper.
  122. * Checks whether given method name is a correct action and whether action exists in controller
  123. *
  124. * @param string $method Method name to be called on subcontroller
  125. * @param array $args Arguments delivered for action to be called
  126. */
  127. public function __call($method, $args) {
  128. $matches = array();
  129. if (!preg_match('/(.+?)Action/', $method, $matches)) {
  130. throw new Exception
  131. ('Given method name is not a correct action name: '.
  132. $method . ' 1283351947');
  133. }
  134. tx_pttools_assert::isNotEmptyString($matches[1],
  135. array('message' => 'No action name could be parsed from ' . $method . '
  136. 1283351949'));
  137. $controllerActionname = $matches[1];
  138. if (!method_exists($this->subcontroller, $method)) {
  139. throw new Exception('Trying to call action ' . $method . ' on ' .
  140. get_class($this->subcontroller) . ' which does not exist!
  141. 1283351948');
  142. }
  143. return $this->processAction($controllerActionname, $args);
  144. }
  145.  
  146.  
  147.  
  148. /**
  149.   * Processes action called on subcontroller
  150.   *
  151.   * @param string $controllerActionName
  152.   * @param array $args
  153.   * @return string HTML source: the rendered action
  154.   */
  155. protected function processAction($controllerActionName, $args) {
  156. $dispatchLoopCount = 0;
  157. // TODO insert arguments into request!
  158. // Perhaps this works like that: $this->request->setArguments();
  159. $this->request->setControllerActionName($controllerActionName);
  160.  
  161. while (!$this->request->isDispatched()) {
  162. if ($dispatchLoopCount > 0) {
  163. $this->subController = $this->subcontrollerFactory->
  164. getPreparedSubController($this->request);
  165. }
  166. if ($dispatchLoopCount++ > 99) throw new
  167. Tx_Extbase_MVC_Exception_InfiniteLoop
  168. ('Could not ultimately dispatch the request after ' .
  169. $dispatchLoopCount . ' iterations.', 1283351950);
  170. try {
  171. $this->subcontroller->processRequest
  172. ($this->request, $this->response);
  173. } catch (Tx_Extbase_MVC_Exception_StopAction $ignoredException) {
  174. }
  175. }
  176.  
  177. return $this->response->getContent();
  178. }
  179.  
  180.  
  181. }

 

 

The next part is the factory that creates this subcontroller wrapper. What you can see here is rather some kind of a prototype... we have to fix some things. First of all, we have to make this thing generic, at the moment it only fits our needs in the context of the list plugin. But I hope you get the idea...

 

 

  1. <?php
  2. /***************************************************************
  3. * Copyright notice
  4. *
  5. * (c) 2010 Daniel Lienert <lienert@punkt.de>, Michael Knoll <knoll@punkt.de>
  6. * All rights reserved
  7. *
  8. *
  9. * This script is part of the TYPO3 project. The TYPO3 project is
  10. * free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; either version 2 of the License, or
  13. * (at your option) any later version.
  14. *
  15. * The GNU General Public License can be found at
  16. * http://www.gnu.org/copyleft/gpl.html.
  17. *
  18. * This script is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * This copyright notice MUST APPEAR in all copies of the script!
  24. ***************************************************************/
  25.  
  26. /**
  27.  * Factory for creating instances of pt_extlist controllers to be used as subcontrollers
  28.  *
  29.  * @author Michael Knoll <knoll@punkt.de>
  30.  * @author Daniel Lienert <lienert@punkt.de>
  31.  * @package TYPO3
  32.  * @subpackage pt_extlist
  33.  */
  34. class Tx_PtExtlist_Controller_SubcontrollerFactory extends
  35. Tx_Extbase_Dispatcher {
  36.  
  37. /**
  38. * Holds associative array of instances listIdentifier => factoryInstance
  39. *
  40. * @var array
  41. */
  42. protected static $instancesArray = array();
  43.  
  44.  
  45.  
  46. /**
  47. * Holds identifier of list, this factory creates controllers for
  48. *
  49. * @var string
  50. */
  51. protected $listIdentifier;
  52.  
  53.  
  54.  
  55.  
  56. /**
  57. * Factory method for subcontrollerFactory
  58. *
  59. * @param string $listIdentifier
  60. * @return Tx_PtExtlist_Controller_SubcontrollerFactory
  61. */
  62. public static function getInstanceByListIdentifier($listIdentifier) {
  63. tx_pttools_assert::isNotEmptyString($listIdentifier,
  64. array('message' => 'Cannot instantiate subcontroller factory with
  65. empty list identifier! 1283254996'));
  66.  
  67. if(self::$instancesArray[$listIdentifier] === NULL) {
  68. self::$instancesArray[$listIdentifier] =
  69. new Tx_PtExtlist_Controller_SubcontrollerFactory($listIdentifier);
  70. }
  71.  
  72. return self::$instancesArray[$listIdentifier];
  73. }
  74.  
  75.  
  76.  
  77. /**
  78. * Constructor for subcontroller factory
  79. *
  80. * @param string $listIdentifier Identifier of list, factory should create subcontrollers for
  81. */
  82. public function __construct($listIdentifier) {
  83. $this->cObj = $GLOBALS['TSFE']->cObj;
  84. parent::__construct();
  85. $this->listIdentifier = $listIdentifier;
  86. }
  87.  
  88.  
  89.  
  90. /**
  91. * Creates a controller object for list controller
  92. *
  93. * // TODO make this generic for all controllers (--> how to get dynamic TS config for plugin?)
  94. *
  95. * @param unknown_type $config
  96. * @return unknown
  97. */
  98. public function createListController($config = array()) {
  99. $configuration = array(
  100. "userFunc"=> "tx_extbase_dispatcher->dispatch",
  101. "pluginName"=> "pi1",
  102. "extensionName"=> "PtExtlist",
  103. "controller"=> "List",
  104. "action"=> "list",
  105. "switchableControllerActions."=> array (
  106. "1."=> array (
  107. "controller"=> "List",
  108. "actions"=> "list,sort"
  109. ),
  110. "2."=> array (
  111. "controller"=> "Filterbox",
  112. "actions"=> "show,submit,reset"
  113. ),
  114. "3."=> array (
  115. "controller"=> "Pager",
  116. "actions"=> "show,submit"
  117. ),
  118. "4."=> array (
  119. "controller"=> "Bookmarks",
  120. "actions"=> "show,edit,update,delete,create"
  121. ),
  122. ),
  123. "settings" => "< plugin.tx_ptextlist.settings",
  124. "persistence"=> "< plugin.tx_ptextlist.persistence",
  125. "view"=> "< plugin.tx_ptextlist.view",
  126. "_LOCAL_LANG"=> "< plugin.tx_ptextlist._LOCAL_LANG"
  127. );
  128.  
  129. $this->initializeConfigurationManagerAndFrameworkConfiguration($configuration);
  130.  
  131. // TODO fake request!
  132. try {
  133. $requestBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_RequestBuilder');
  134. $request = $requestBuilder->initialize(self::$extbaseFrameworkConfiguration);
  135. $request = $requestBuilder->build();
  136. } catch(Exception $e) {
  137. /* TODO this is done for being testable in CLI environment! */
  138. $actionNames = $configuration['switchableControllerActions.']['1.']['actions'];
  139. $actions = explode(',', $actionNames);
  140.  
  141. $request = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Request');
  142. $request->setPluginName($configuration['pluginName']);
  143. $request->setControllerExtensionName($configuration['extensionName']);
  144. $request->setControllerName($configuration['controller']);
  145. $request->setControllerActionName($actions[0]);
  146. $request->setRequestURI('http://fakeuri.com');
  147. $request->setBaseURI('http://fakeuri.com');
  148. $request->setMethod('HTTP');
  149. }
  150.  
  151. // Remind setting list identifier in TS! plugin.tx_ptextlist.settings.listIdentifier = <listIdentifier>
  152. self::$extbaseFrameworkConfiguration = t3lib_div::array_merge_recursive_overrule(
  153. self::$extbaseFrameworkConfiguration,
  154. $config
  155. );
  156.  
  157. if (isset($this->cObj->data) && is_array($this->cObj->data)) {
  158. // we need to check the above conditions as cObj is not available in Backend.
  159. $request->setContentObjectData($this->cObj->data);
  160. $request->setIsCached($this->cObj->getUserObjectType() == tslib_cObj::OBJECTTYPE_USER);
  161. }
  162.  
  163. $response = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Response');
  164.  
  165. // Request hash service
  166. $requestHashService = t3lib_div::makeInstance('Tx_Extbase_Security_Channel_RequestHashService'); // singleton
  167. $requestHashService->verifyRequest($request);
  168.  
  169. $persistenceManager = self::getPersistenceManager();
  170.  
  171. $subcontroller = $this->getPreparedController($request);
  172.  
  173. $subcontrollerWrapper = new Tx_PtExtlist_Controller_SubcontrollerWrapper();
  174. $subcontrollerWrapper->injectSubcontroller($subcontroller);
  175. $subcontrollerWrapper->injectSubcontrollerFactory($this);
  176. $subcontrollerWrapper->injectRequest($request);
  177. $subcontrollerWrapper->injectResponse($response);
  178.  
  179. return $subcontrollerWrapper;
  180. }
  181.  
  182.  
  183.  
  184.  
  185. /**
  186. * Returns current subcontroller
  187. *
  188. * @param Tx_Extbase_MVC_Web_Request $request
  189. * @return Tx_Extbase_MVC_Controller_ControllerInterface
  190. */
  191. public function getPreparedSubController(Tx_Extbase_MVC_Web_Request $request) {
  192. return $this->getPreparedController($request);
  193. }
  194.  
  195. }

 

 

Please understand this as a request for comment. It would be interesting to gather some ideas on how to make this feature run smooth together with ExtBase as you a have a really powerful utility here. I'm looking forward to your comments!

30.08.2010
19:04

ExtBase Cookbook #10 - Changing Storage PID for repositories

Today I had the problem of how to change the storage pid for a single query in an ExtBase repository. Thanks to the mailinglist, I got the following solution, which I want to share with you:

 

 

  1. // Inside your repository:
  2. public function findAllRecordsInPid($pid) {
  3. $query = $this->createQuery();
  4. $query->getQuerySettings()->setRespectStoragePage(FALSE);
  5. $query->matching($query->equals('pid', $pid));
  6. return $query->execute();
  7. }

 

Just to make this article a little more complete, I want to add some information that has been given to me on the mailinglist:

 

Steffen Ritter wrote: as a "read" list, i give a full list with all my folders where records should belong to...

for writing I use the following configuration to ensure that every object is created in the correct folder

    Tx_Rsmyext_Domain_Model_Donation {
        newRecordStoragePid = 37
    }

 

Sebastian Kurfürst added: one more addition; If you want to *move* records from one sysfolder to another, just give them a "pid" property and modify this property as wanted.

 

Thanks for all your help! I hope, this might be helpful for someone!

23.08.2010
13:04

Piz Badile - Nordkante

Eigentlich sollte es ja die Cassin werden… vielleicht war das auch schon das Einzige, was an diesem Wochenende nicht perfekt war. Aber der Reihe nach. Seit wir vor ca. 9 Jahren das erste Mal vom Piz Badile und seiner Nordkante gehört hatten, wollten wir an diesen Berg. Zuerst an eben diese Nordkante, später war dann die Via Cassin in der Nord-Ostwand unser großer Traum. Jahr für Jahr versuchten wir jeweils im Sommer ins Bergell zu kommen und die Route zu klettern. Und jedes Jahr kam irgendwas dazwischen. Auch dieses Jahr sah es nach zweieinhalb verregneten Wochen wieder so aus, als wäre es das gewesen. Denn was bei uns in Form von Nass vom Himmel kam, fiel am Badile bereits in seiner gefrorenen Form - will heissen als Schnee. Dann endlich gutes Wetter in Sicht. Mit gemischten Gefühlen machten wir uns am Freitag in aller Früh über Bad Waldsee auf den Weg ins Bergell. Ein Telefonat am Vortag mit dem Hüttenwirt der Sasc-Furä Hütte ließ nichts Gutes hoffen: Betten gab es keine mehr und die Tour sollte nass sein. Nun, nach einem Ausweichziel mussten wir nicht lange suchen, schließlich blieb ja noch die Nordkante, welche wir auch bei nässeren Bedingungen geklettert wären.

 

 

 

 

Schon von der Maloja-Pass-Straße aus kann man die wilden Granitzacken der Sciora-Gruppe sehen. Nachdem die Topos schon seit 6 Jahren bei mir daheim rumlagen konnte ich fast jeden Zacken benennen, ohne jemals in der Ecke des Bergell gewesen zu sein. Neben viel Granit sahen wir aber vor allem eins: Schnee… Guten Mutes machten wir uns an den steilen Aufstieg vom Ende der Mautstraße hinauf zur Sasc Furä Hütte. Immer steiler geht es zuerst über einen Bach und dann im Wald in Serpentinen nach oben. Kaum legt sich der Weg wieder etwas zurück, ist man auch schon an der malerischen Hütte hoch über Bondo angekommen. Sehr gerne wären wir dort geblieben, aber die Aussicht auf ein Bett war quasi gleich Null und das Biwak-Zeug hatten wir ja eh schon dabei. David aus Neuseeland, der auf der Hütte arbeitet, berichtete uns von seiner Begehung der Cassin und dass sie auch dort etwas nass war und dass sie das wohl auch im Moment sein wird. Uns verlässt mehr und mehr der Mut. Nach einer guten Stunde Rast gehen wir weiter in Richtung Biwakplatz. Das Wetter sieht zu diesem Zeitpunkt so aus, als würde es jeden Moment aus Kübeln gießen. Wer die wilden Wolkenformationen zur Mittagszeit im Bergell nicht kennt, glaubt fest daran, dass jeden Moment die Welt zusammenbricht, wenn er sowas sieht.

 

 

 

 

Nach einer Dreiviertelstunde erreichen wir den ersten guten überdachten Biwakplatz. Geräumig für mindestens 3 Leute. Wir lassen unsere Rucksäcke dort und gehen weiter zum Einstieg der Nordkante. Trotz dichter werdendem Nebel hoffen wir wenigstens einen Blick in die Nordostwand werfen zu können. Nach einer weiteren halben Stunde, in der wir immer wieder anhalten und die atemberaubende Landschaft um uns herum genießen, erreichen wir den kleinen Sattel, von dem aus es in Richtung Einstieg der Nordwandrouten geht. Schon der Weg dort hinunter wirkt im Nebel so gespenstisch, dass wir immer kleiner werden. Angesichts der 800m hohen Wand kommt man sich sowieso schon wie ein Zwerg vor, das bedrohliche Wetter tut sein übriges dazu. Wir sehen einige Seilschaften in der Nachbartour "Another Day in Paradise" - heute war's wohl eher "Another Day in the Clous". Das Abseilen über die trockenen Platten sieht vielversprechend aus. Dort wo wir allerdings den Verlauf der Cassin vermuten meinen wir einen größeren Wasserfall in der Wand ausmachen zu können. Am nächsten Tag erfahren wir, dass die Route rechts daneben verlief. Das konnten wir aber am Abend davor nicht ahnen, so entscheiden wir uns nach langem Hin- und Her wohl doch die Kante zu klettern.

 

 

 

 

Immerhin finden wir 10 Minuten unterhalb des Einstiegs in die Nordkante einen schönen Platz zum Biwakieren und holen nach kurzer Pause unsere Rucksäcke nach oben. Biwakplätze gibt es zwischen Hütte und Nordkante wie Sand am Meer. Viel schwerer ist es, an Wasser zu kommen. Es hatte noch einzelne Schneefelder - wir aber hatten keinen Kocher - und das, was aus den Schneefeldern abgelaufen ist, reichte nicht wirklich um aufgefangen werden zu können. Ein paar Meter unterhalb unseres Platzes lief Wasser über einen Platte und wir konnten es in unsere Flaschen "umlenken".

 

Inzwischen haben sich die Wolken verzogen und wir erleben einen wunderschönen Sonnenuntergang weit über den Dörfern an der Passstrasse. Als das letzte Sonnenlicht langsam verschwindet und im Tal die Licht der Häuser sichtbar werden, kuscheln wir uns in die Schlafsäcke und verbringen eine laue Nacht unter sternklarem Himmel.


Mitten in der Nacht bemerken wir Stirnlampen-Licht an der Nordkante. Jetzt fällt uns wieder ein, dass wir mittags noch eine sehr langsame Seilschaft bemerkt hatten, die um 6 Uhr abends erst im unteren Drittel der Kante waren und eine weitere Seilschaft von oben abgeseilt kam. Eine von beiden Seilschaften war wohl noch in der Wand und verbrachte dort eine glücklicherweise nicht zu kalte Nacht.

 

 

 

 

Der nächste Morgen ist dann doch kalt. Nur langsam kommen wir um kurz vor vier Uhr aus den Schlafsäcken, packen unsere Sachen zusammen und kraxeln in stockdunkler Nacht über 3er Gelände hinauf zum Einstieg der Tour. Im Sattel angekommen gehen wir noch ca. 50m ohne Seil weiter in Richtung vermutetem Einstieg (wir sehen immer noch nur das, was im Schein unserer Stirnlampen auftaucht). An der ersten steileren Stelle ziehen wir die Kletterschuhe an und binden uns ein. Wir wollen am laufenden Seil gehen und binden das 60m Seil dazu auf ca. 40m Länge ab. Dies ermöglicht uns, ohne viel Zeit für Standplätze zu verlieren parallel zu klettern. Schnell finden wir auch in totaler Dunkelheit den ersten Stand in Form eines Munirings, legen einen TiBloc und gehen weiter. Gute 3 Seillängen schaffen wir so am Stück, bevor die Sonne langsam die Stirnlampen unnötig macht. Am eigentlichen Grat angekommen dämmert es schon leicht und wir können weitere Seilschaften sehen, die nach und nach in die Tour einsteigen. Bis wir am Gipfel ankommen werden es etwa 15 - 20 Seilschaften sein, die sich wie Perlen auf einer Schnur entlang der Kante aufreihen. Doch bis dahin ist es noch ein weiter weg… ca. 20 Seillängen trennen uns bei Tagesanbruch noch vom Gipfel.

 

 

 

 

Wir behalten das Gehen am langen Seil bis zur ersten schweren Stelle unterhalb des sogenannten Ziegenrückens bei und überklettern jeweils ca. 3 - 4 Standplätze "am Stück". Trotz allem werden wir von zwei italienischen Seilschaften eingeholt, die scheinbar gar nicht sichern, sondern das Seil mehr oder weniger zum Spaß mittragen… gerne lassen wir diese passieren, während wir eine längere Pause machen und das verpasste Frühstück nachholen.

 

 

 

 

Die einzige "schwere" Stelle der Tour ist ein etwas kleingriffige 5 er Platte, in der im Abstand von eineinhalb Meter jeweils ein Haken steckt. Hier werden wir von einem Bergführer überholt, der zwei Kunden nachzieht. Im weiteren Verlauf bremst uns diese Seilschaft stark aus, weil wir nicht mehr vernünftig fliegend gehen können und immer wieder lange warten müssen. An der Stelle, an der die Route die Kante verlässt und nach rechts durch eine Verschneidung quert, kommt es zum Stau durch eine Seilschaft, die in er Wand biwakiert hat und nur sehr langsam vorankommt. Es kommt zu wilden Überhol- und Ineinanderklettermanövern und die Wartezeit scheint nicht enden zu wollen. Erst nachdem wir diese Seilschaft hinter uns lassen können, geht es am fliegenden Seil in einem Rutsch bis zum Gipfel. Inzwischen haben wir uns so gut an das Gelände gewöhnt, dass wir quasi ohne Zwischensicherungen klettern. Lediglich einen TiBloc pro 40m versuchen wir zu legen, um im Falle eines Sturzes des Nachsteigers nicht den Vorsteiger aus der Wand zu reissen.

 

 

 

 

Nach 6 Stunden und 1200m Kletterstrecke kommen wir gegen 12 Uhr gut gelaunt am Gipfel des Badile an. Das Wetter hat die ganze Zeit gehalten, erst nach einer halben Stunde Gipfelpause ziehen einzelne Wolken auf. Wir lassen es jetzt sehr gemütlich angehen und verbringen über eine Stunde auf dem Gipfel. Immer wieder schweift der Blick über die umliegenden Gipfel… Cengalo, Gemelli, Ago di Sciora… weit unter uns liegt auf der einen Seite die Sasc-Furä Hütte, auf der anderen Seite das Rifugio Gianetti. Auch die Bernina und St. Moritz sieht man immer wieder durch die dichter werdenden Mittagswolken. Erst nachdem ca. 6 weitere Seilschaften den Gipfel erreichen, machen wir uns langsam an den Abstieg. Dieser sollte noch einige unangenehme Überraschungen für uns bereit halten.

 

 

 

 

Zuerst folgen wir einem markanten Pfad, immer wieder durch rutschigen Schnee, der mit unseren leichten Zustiegsschuhen alles andere als angenehm ist. Dann benutzen wir auf der in Abstiegsrichtung rechten Seite drei Muniringe an denen wir uns jeweils zuerst ablassen und dann abseilen. So dürfte es weitergehen. Es folgt wieder ein kurzes Stück Fußabstieg, dann bekommen wir nochmals zwei Muniringe zu Gesicht, an denen wir ebenfalls abseilen. Am Ende der zweiten Abseilstrecke machen wir wohl den entscheidenden Fehler und queren erst zu weit unten nach rechts. Steinmänner und rote Farbe machen uns aber glaubend, dass dies der richtige Weg sei. Nach einigen Metern Querung und einem kurzen Abstieg in einer Verschneidung durchquert man eine Art Tunnel, das durch einen liegenden Block gebildet wird. Danach geht es sehr steil nach unten (zu steil zum Abklettern). Am Block sind einige Schlingen verknotet - anscheinend sind wir nicht die ersten, denen an dieser Stelle nach Abseilen zumute ist. Zuerst nehmen wir einen einzelnen Seilstrang doppelt und hoffen, dass es danach wieder zu Fuß weitergeht. Das reicht nur bis zu einem sehr fragwürdigen Stand an einem gebrochenen Block, der mit einer 10m langen Repschnur an einem dritten Haken hintersichert ist. Hier wollen wir nicht weiter! Wir nehmen das zweite Halbseil dazu und seilen weiter ab in eine steile Schlucht, deren Ende wir noch nicht einsehen. Hier hängt alles voll mit Seilen und Hilfsständen. Scheinbar hat schon so manche Seilschaft hier improvisieren müssen. Unser letzter Abseilstand besteht aus zwei miserablen Haken und einem dahintergeschaltenen Keil. Wir hintersichern den ersten Mann noch mit einem Friend, dann geht's die letzten 40m aufs Schneefeld nach unten. Insgesamt eine sehr nervenaufreibende Sache. Es bleibt die Frage, warum man einen so vielbegangenen Abstieg wie diesen nicht vernünftig mit Abseilringen ausstattet beziehungsweise so schlecht kennzeichnet (Laut Göbses Informationen wäre es oberhalb des kleinen Blocks, unter dem wir durchgekrabbelt sind nach rechts weggegangen bis zu einem Kreuz, von dem aus man bequem abseilen kann. Wer also wie wir bei dem Tunnel rauskommt weiß, dass er zu weit unten ist).

 

 

 

 

Der Abstieg zum Rifugio Gianetti ist zwar durch die großen Granitblöcke etwas mühsam aber einfach. Wir erreichen die Hütte gegen 17 Uhr und machen abermals großzügig Pause. Erst gegen halb 7 gehen wir weiter in Richtung Val Masino. Ein sehr schöner Weg, erst durch die Wiesen unterhalb der Hütte, dann an einem Bach entlang und schließlich durch einen Bergwald führt uns nach Bagni del Masino. Hier gönnen wir uns in einem schicken Restaurant eine Pizza und Mineralwasser. Die Nacht verbringen wir auf einer Wiese am Ortsausgang unter freiem Himmel. Meine größte Sorge ist die Vorstellung, dass der Bauer früh am Morgen die Kühe auf diese Wiese lässt - dem war nicht so :-)

 

 

 

Die Rückreise gestaltet sich kniffliger als geplant. Den ersten Bus erreichen wir um 9:30 noch nach Plan. In Morbegna ist allerdings Schienenersatzverkehr und bis wir das kapieren (das Schild war freilich auf italienisch), war der erste Bus auch schon weg. Der zweite kommt erst zwei Stunden später. Wir gönnen uns ein ausgiebiges Frühstück. In Colico angekommen fährt der Zug nach Chiavenna am Sonntag erst eineinhalb Stunden später. Eine Stunde lang versuchen wir ein Auto anzuhalten - keine Chance. Der erst Anschluss nach Plan klappt für uns in Chiavenna, der Bus kommt ca. 20min nach dem Zug und soll uns in Richtung Bondo bringen. Bondo kennt allerdings der Busfahrer nicht. Mit Hilfe der Landkarte erklären wir ihm, wo wir gerne aussteigen würden. Unser Reisepech endet glücklich, als wir am Parkplatz der Mautstraße ankommen und zwei Engländer gerade nach oben wollen. Wir bezahlen ihnen die Hälfte der Maut, dafür darf Philipp mit und steht ca. 20min später mit unserem Auto vor mir. Die Heimreise wird lang und anstrengend, erst um 22:30 erreichen wir schließlich Stuttgart.

 

Es war ein wunderschönes Wochenende mit vielen Impressionen. Noch im Auto haben wir daran zu knabbern, dass es "nur" die Nordkante war. Aber wir kommen wieder - versprochen!

 

 

 

 

Zur Nordkante ist zu sagen, dass es wohl in den Alpen wenig beeindruckendere Klettereien in diesem Schwierigkeitsgrad gibt. Die landschaftliche Lage ist vermutlich einmalig und man kann sich nicht sattsehen. Wer im 5. Grad solide unterwegs ist, sollte klettertechnisch keine Schwierigkeiten haben. Man kann sich auch auf der Kante böse verklettern und die Wegfindung ist nicht schwer aber kann einen ziemlich ausbremsen. Ein Biwak in der Kante ist ganz lustig, solange kein Wettersturz kommt, dann hat man einfach verloren. Das Gehen am langen Seil bringt einen enormen Geschwindigkeitsgewinn, wenn man weiß, wie's geht. Seilhänger und Seilzug sprechen dagegen und können mindestens soviel Zeit kosten, wie normal zu sichern, wenn man mit dieser Sicherungstechnik nicht vertraut ist. Man sollte das vorher ausgiebig geübt haben. Wenn man ein Halbseil benutzt, muss ein Strang etwas kürzer aufgenommen werden als der andere und der TiBloc in den kürzeren Strang eingehängt werden. Ansonsten kann es trotz TiBloc dazu kommen, dass der stürzende Nachsteiger den Vorsteiger aus der Wand reisst. Die Kletterzeit ist mit 6 - 10h einzuplanen, je nach Andrang. Der Abstieg zur Gianetti Hütte ist mit 3h Stunden nicht zu knapp bemessen. Ein Verhauer lässt das schnell mal länger werden. Von der Gianetti Hütte runter ins Tal sind es nochmal gute 3h, wenn man nicht rennt.

< < September 2010 > >
S M T W T F S
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Kategorien

  • [-](J)DAV(28)
  • [-]Bergsteigen(30)
  • [-]Computer & Informatik(63)
    • PHP(2)
    • [-]Typo3(54)
  • [-]Fotografie(47)
  • Kaktusteam(3)
  • [-]Laufen(4)
  • Musik & Filme(3)
  • [-]Radfahren(0)
  • [-]Reisen(11)
  • Sonstiges...(4)
  • Studium...(6)

Letzte Kommentare

Using Extbase Controller and Action in TemplaVoila TS Lib
26.08.2010 22:02
insert in TS
26.08.2010 11:27
Gut geschildert
23.08.2010 22:05
Good Timing
21.08.2010 01:59

Archiv

Kopieren Sie diesen Link in Ihren RSS Reader

RSS 0.91Posts
RSS 2.0Posts

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information