[iOS Dev] Blinkende Buttons beim Setzen des Titels

Ich habe heute mehrere Minuten mit der Suche nach der Ursache für folgendes Problem verbracht. Damit ihr nicht ewig suchen müsst gibts hier die Lösung gleich parat:

1. Buttontyp in dem Layoutfile von System auf Custom stellen!
2. Folgendes Snippet als Wrapper für euren Code benutzen:

[UIView setAnimationsEnabled:NO];
[_button setTitle:@"title" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

Weiterführende Infos: Link

[PHP] Hex-Unicode in PHP-String konvertieren

Hier ist mein Lösungsvorschlag, um Hex-Unicode (bswp. \u00F6) in lesbaren Text (hier: ö) zu konvertieren:

/**
 * Convert hex-unicode to text
 * Bsp.: \u00F6 => ö
 * @param string|array $string
 * @return string|array
 */
function fixHexUnicode($string)
{
    $json = json_encode($string);
    $json = str_replace('\\\\u',  '\\u', $json);
    $string  = json_decode($json);

    return $string;
}

[PHP] Ermitteln des letzten Samstags im Monat

Ich war im Netz auf der Suche nach der Funktionalität „letzter Samstag im Monat“. Das folgende Script/Funktion konnte mein Anliegen lösen.

/**
 * @param string $initial Timestamp des Ausgangsdatums
 * @param string $select Startdatum im Format "first saturday" bzw "last sunday",
 *                       mögliche Optionen sind "first, second, third, fourth, fifth, last"
 * @return array|mixed  Timestamp des gewünschten Datums
 */
function calculateWeekdays($initial = '', $select = '') {
    if(empty($select))$select   = array();
    if(empty($initial)) $initial    = time();

    $target        = array('first'    => 0,
        'second'=> 1,
        'third'    => 2,
        'fourth'=> 3,
        'fifth'    => 4,
        'last'    => 5);

    $s2long        = array('sunday'    => 'sun',
        'monday'    => 'mon',
        'tuesday'    => 'tue',
        'wednesday'    => 'wed',
        'thursday'    => 'thu',
        'friday'    => 'fri',
        'saturday'    => 'sat');

    $pattern    = array('0'    => 'sun',
        '1'    => 'mon',
        '2'    => 'tue',
        '3'    => 'wed',
        '4'    => 'thu',
        '5'    => 'fri',
        '6'    => 'sat');

    $weekdays = array();
    for($i=1;$i<=date('t', $initial);$i++) {
        $temp    = date('Y', $initial).'-'.date('m', $initial).'-'.$i;
        $date    = strtotime($temp);
        for($d=0;$d<7;$d++) {
            if(date('w', $date) == $d) {
                $weekdays[$pattern[$d]][]    =     $date;
            }
        }
    }

    $select    = explode(' ', $select);
    if(count($select)<2) return array();
    $key    = $s2long[strtolower($select[1])];

    $key2    = $target[$select[0]];
    $return    = ($key2 == 5) ? end($weekdays[$key]):$weekdays[$key][$key2];

    if(empty($select)) return $weekdays;

    return $return;
}

Source: Berechnen von Wochentagen

PHP Errors und Zend_Log incl. Mail verheiraten

Über die Bootstrap hab ich mir meinen Logger konfiguriert und in die Registry abgelegt. Ungefähr so:

public function _initLogger()
{        
    $configIni = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', $this->getEnvironment());

    // Konsolenlog initialisieren
    $writerStream = new Zend_Log_Writer_Stream('php://output');
    $writerStream->addFilter((int) $configIni->log->console->level);

    // Mail-Logging initialisieren
    $configMail = array(
        'auth'      => 'login',
        'username'  => $configIni->mail->smtp->user,
        'password'  => $configIni->mail->smtp->pass,
        'ssl'       => 'tls',
        'port'      => $configIni->mail->smtp->port
    );

    $smtp = new Zend_Mail_Transport_Smtp($configIni->mail->smtp->host, $configMail);
    $mail = new Zend_Mail('utf-8');
    $mail->setFrom($configIni->log->mail->from)
         ->addTo($configIni->log->mail->to)
         ->addCc($configIni->log->mail->cc)
         ->setSubject('Fehlermeldungen:')
         ->setDefaultTransport($smtp);

    $writerMail = new Zend_Log_Writer_Mail($mail);
    $writerMail->addFilter((int) $configIni->log->mail->level);

    // Writer zum Logger hinzufügen
    $logger = new Zend_Log();
    $logger->addWriter($writerStream);
    $logger->addWriter($writerMail);
    Zend_Registry::set('logger', $logger);
}

Das entsprechende PHP Script required die index.php und bootstrapped so das Zend Framework. Das Script soll im Fehler bzw. Abbruchfall einen Fehler in den Logger schreiben und ebenfalls die Logger-Mail versenden.

require_once __DIR__ . '/index.php';
declare(ticks=1);

function shutdown()
{
    if ($error = error_get_last()) {
        if (isset($error['type']) && ($error['type'] == E_ERROR ||
                $error['type'] == E_PARSE ||
                $error['type'] == E_COMPILE_ERROR)
        ) {
            ob_end_clean();

            $message = 'Es ist ein Fehler aufgetreten: ' . "\n"
                . 'Message: ' . $error['message'] . "\n"
                . 'File: ' . $error['file'] . "\n"
                . 'Line: ' . $error['line'];
            /* @var $logger Zend_Log */
            $logger = Zend_Registry::get('logger');
            $logger->log($message, Zend_Log::CRIT);
            $logger->__destruct();
        }
    }
}

//// signal handler function
function sig_handler($signo)
{
    switch ($signo) {
        case SIGTERM:
        case SIGINT:
        case SIGHUP:
        case SIGUSR1:
            $message = 'Es ist ein Fehler aufgetreten';
            /* @var $logger Zend_Log */
            $logger = Zend_Registry::get('logger');
            $logger->log($message, Zend_Log::CRIT);
            $logger->__destruct();
            exit;
        default:
            // handle all other signals
    }
}

register_shutdown_function('shutdown');

Hervorzuheben und wichtig sind hier die Zeilen declare(ticks=1); sowie $logger->__destruct();. Mit dem Destruktor vom Logger initialisiert ihr das Versenden der Mail, da das Script selber nicht korrekt beendet wurde und die destruct-Funktion vom Logger somit auch nicht aufgerufen wurde.

[LibreOffice] Text nicht über Zellenrand + fixe Kopfzeile

Zwei Probleme, die mich bei der Suche in LibreOffice zu viel Zeit gekostet haben:

Problem 1: Fixe Kopfzeile, die beim Runterscrollen fest oben stehen bleibt
Lösung: Erste Zeile nach der Überschrift markieren. Fenster -> Fixieren

Problem 2: Text bei nachfolgender leerer Zelle nicht über den Zellenrand hinaus erscheinen bzw. geschrieben werden
Lösung: Strg+A (Markieren aller Daten) -> Format -> Zellen -> Reiter „Ausrichtung“ -> Horizontal -> Ausgefüllt -> OK