Июн 07

MySQL и foreign key constraint fails

Cannot add or update a child row: a foreign key constraint fails
Такое случается, если включена проверка InnoDB foreign key, но ссылается ключ на таблицу не InnoDB (например MyISAM)
лечится:

  • конвертированием всех таблиц в InnoDB
  • конвертирование всех таблиц в MyISAM
  • или отключением проверки:
DATABASES = {
'default': {
    ...         
    'OPTIONS': {
         "init_command": "SET foreign_key_checks = 0;",
    },
 }
}

Статейка про InnoDB

Июн 03

Откат iOS8 beta

После того, как все поигрались, потеряли сеть итд, хочется обратно нормальной стабильной работы.
Откатывать как обычно:

  1. Подключаем к компьютеру
  2. Вводим телефон в режим DFU: удерживаем Home+Power 10 секунд (экран отключится), отпускаем Power, и ждем еще 10 секунд, отпускаем Home
  3. iTunes найдет телефон в режиме восстановления и предложит поставить на него текущий релиз iOS (на сейчас это 7.1.1) — устанавливаем
  4. После завершения установки, будет предложено восстановить из резервной копии (вы ведь сделали её?)
  5. Ждем более стабильной беты
Апр 26

Плеер в iOS

Music player

 
 
//Тут лежит MPNowPlayingInfoCenter и прочие MP*    
#import <mediaplayer /MediaPlayer.h>
 
 
 
 NSString * path = [[NSBundle mainBundle]pathForResource:@"some_track" ofType:@"mp3"];
 NSURL *url = [NSURL fileURLWithPath:path];
//Создаем плеер
 
AVAudioPlayer * player;
player  = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
//Задаем громкость
player.volume = 1.0f;
//Загружаем файл в буффер 
[player prepareToPlay];	
//Разрешаем играть в фоне
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback  error:nil];
 
//Загружаем обложку
UIImage * artwork = [UIImage imageNamed:@"Artwork.jpg"];
//Создаем словарь с параметрами now playing
NSDictionary * info = @{MPMediaItemPropertyAlbumTitle: @"Astronimia",
                        MPMediaItemPropertyArtist: @"TONY IGY",
                        MPMediaItemPropertyArtwork: [[MPMediaItemArtwork alloc] initWithImage:artwork]
                        };
//Отправляем созданное в куда следует
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = info;
 
 
// Управление, со шторки, наушников, экрана блокировки
 
//Начинаем принимать события
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
//Заканчиваем принимать события
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
 
//Обработчик событий
-(void) remoteControlReceivedWithEvent:(UIEvent *)event {
    if(event.type == UIEventTypeRemoteControl){
        switch (event.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
            case UIEventSubtypeRemoteControlPlay:
            case UIEventSubtypeRemoteControlPause:
                [self togglePlayPause];
                break;
            default:
                break;
        }
    }
}
</mediaplayer>

Янв 21

Apache mod_wsgi и SQLite база

Если вдруг внезапно unable to open database file — это апачу не хватает прав на запись в папку с базой. Ну это если других косяков нет

Янв 19

Переезд =(

В связи с трагической гибелью веб-сервера переезжаем.. Некоторые ресурсы недоступны

Июл 15

Логи на удаленный syslog-ng

А все просто, стандартный модуль logging вполне справляется с этим:

import logging
from logging.handlers import SysLogHandler
log = logging.getLogger('loggername')
log.addHandler(SysLogHandler(address=('localhost', 514)))
log.setLever(logging.INFO)
log.info('Log test')

Крайне рекомендуется прочесть logging-cookbook

Июл 14

Как использовать Django из внешнего скрипта

Для асинхронной задачи можно создать команду (django management command), или подключить джагну к своему сприпту:

import sys
sys.path.append('/path/to/django/projectname')
from projectname import settings
from django.core.management import setup_environ
setup_environ(settings)
#Получаем настроенную среду django:
from main.models import Model1
print Model1.objects.all()
Июн 01

OpenOCD & OSX & FTDI-CoLink

Если установлены драйвера FTDI VCP (Virtual Com Port) OpenOCD к Colink не подцепится — канал A уже используется.
Или выгрузить кекст или поправить
/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist
на предмет комментирования секции подключения канала А:

                <key>FT2232C_A</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>
                        <key>IOClass</key>
                        <string>FTDIUSBSerialDriver</string>
                        <key>IOProviderClass</key>
                        <string>IOUSBInterface</string>
                        <key>bConfigurationValue</key>
                        <integer>1</integer>
                        <key>bInterfaceNumber</key>
                        <integer>0</integer>
                        <key>idProduct</key>
                        <integer>24592</integer>
                        <key>idVendor</key>
                        <integer>1027</integer>
                </dict>

ну и перезагрузить кекст.

Апр 23

Админка по-умолчанию для всех моделей

В процессе разработки часто требуется по-быстрому зарегистрировать в админке все модели,
на мой взгляд, самый простой и быстрый способ:
добавить в admin.py:

from django.contrib import admin
import models
 
#Функция возвращающая список моделей в модуле
def list_models(module):
    import inspect
    from django.db import models
    classes = []
    for name, obj in inspect.getmembers(module):
        if inspect.isclass(obj) and issubclass(obj, models.Model):
            classes.append(obj)
    return classes
 
#Регистрируем все модели
for model in list_models(models):
    admin.site.register(model, admin.ModelAdmin)