пятница, 13 апреля 2012 г.

GRE/ipip туннель между Cisco и Linux Server

Имеем:
  • серевер с выделенным ip 22.22.22.22 и Cisco с внешним ip 11.11.11.11
  • На Cisco есть два сетевых интерфейса: один внешний с ip 11.11.11.11 и внутренний с ip 10.10.0.1

Хотим:

  • быстро и при помощи встроенных средств связать сервер в единую инфраструктуру с Cisco и ее подсетью (10.10.0.0/24)


суббота, 7 апреля 2012 г.

Fedora 16 и VirtualBox

Возможны два случая:

  1. Fedora 16 в качестве хостовой машины
  2. Fedora 16 в качестве виртуалки
В принципе, последовательность действий будет схожа.

Рассмотрим первый случай: Fedora 16 в качестве хостовой машины

Прежде всего нам надо скачать сам VirtualBox. Это можно сделать либо с официального сайта, либо при помощи yum, но при условии, что репозитории VirtualBox добавлены в конфиги yum'a.

Итак, скачаиваем дистрибутив отсюда: https://www.virtualbox.org/wiki/Linux_Downloads

Теперь надо настроить саму Fedora. Дело в том, что VirtualBox использует для поддержки виртуализации DKMS, а в федоре по-умолчанию эта система не поднята. Поэтому нужно ее завести. Эта штука позволяет создавать и динамически подключать модули ядра. Но чтобы все работало должным образом необходимо иметь kernel-devel и kernel-headers текущего ядра. И вот тут нюанс: в репозитории федоры лежат хедеры только самого последнего ядра! Поэтому мы просто вынуждены обновить ядро!
  1. sudo yum update
  2. sudo yum install kernel-headers kernel-devel gcc
  3. sudo yum install dkms
  4. После этого можно смело запускать установщик VirtualBox.
  5. Затем нужно добавить текущего пользователя(то есть себя) в группу vboxusers.
Вот и все. Теперь можно смело создавать виртуальные машины и устанавливать GuestAdditions.

Теперь рассмотрим второй случай:

Тут тоже не обойтись без DKMS, но теперь это необходимо для установки GuestAdditions.
Итак:

  1. sudo yum update
  2. sudo yum install kernel-headers kernel-devel gcc
  3. sudo yum install dkms
  4. Монтируем VBoxGuestAdditions.iso и переходим в него
  5. Запускаем VBoxLinuxAdditions: sudo ./VBoxLinuxAdditions.run
Если будет чего-то не хватать, то вам об этом сообщат. Но все должно быть тип-топ!

Удачи!

четверг, 5 апреля 2012 г.

Делаем поиск в UITableView с помощью UISearchBar

Для начала надо подготовить основной контроллер вьюхи для работы с UISearchBar:


@interface MyViewController : UITableViewController <UISearchDisplayDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource{
    
    // For Search!
    NSArray *searchResults;
    IBOutlet UISearchDisplayController *searchController;
}


@property(nonatomic, copy) NSArray *searchResults;
@property(nonatomic, retain) IBOutlet UISearchDisplayController *searchController;

@end

Затем добавить во вьюху Search Display Controller и правильно соединить его с аутлетами! В качестве делегата естественно назначить FileOwner.

Удаление ячеек в UITableView


// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        
        // At first delete data
        // delete address from address list
        [userDataController removeAddress:indexPath.row];
        
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    //else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    //}   
}

UIAlertView с TextField как в AppStore


- (void)mySuperMethodWithAlert
{
 // ... bla bla bla

 // создаем и показывем UIAlertView
 //

 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: @"Who are you?"     
                                                        message:@"Give your full name" 
                                                       delegate:self  cancelButtonTitle:@"Cancel"   
                                              otherButtonTitles:@"OK", nil]; 
    // Adds a username Field
    //
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 50.0, 260.0, 25.0)]; 
    textField.placeholder = @"Username";
    [textField setBackgroundColor:[UIColor whiteColor]]; 
    [alertView addSubview:textField];

    [alertView show];
    [alertView release];
    [textField release];

 // ... bla bla bla
}

// Обрабатываем нажатие кнопки
//
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    // the user clicked one of the OK/Cancel buttons
    if (buttonIndex == 0)
    {
        UITextField *field = (UITextField *)[[alertView subviews] lastObject];
        NSLog (@"%@", field.text);
    }
    else
    {
        //NSLog(@"cancel");
    }
}


суббота, 31 марта 2012 г.

Доступные шрифты в iphone sdk

Данный вопрос почему-то слабо освещен в документации Apple, но всегда есть выход.
Вот код, который напечатает в dbg-console все доступные шрифты:

    // List all fonts on iPhone
    NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
    NSArray *fontNames;
    NSInteger indFamily, indFont;
    for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
    {
        NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
        fontNames = [[NSArray alloc] initWithArray:
                     [UIFont fontNamesForFamilyName:
                      [familyNames objectAtIndex:indFamily]]];
        for (indFont=0; indFont<[fontNames count]; ++indFont)
        {
            NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
        }
        [fontNames release];
    }
    [familyNames release];

А вот вывод в XCode 4 IPhone SDK 5.0:

Редактируем шрифт, его цвет и прочие прибамбасы в TabBar

for (UIViewController *tab in rootController.viewControllers)
    {
      [tab.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
        [UIColor blackColor], UITextAttributeTextColor,
         [NSValue valueWithUIOffset:UIOffsetMake(0,0)], UITextAttributeTextShadowOffset,
        [UIFont fontWithName:@"Noteworthy-Light" size:13.0], UITextAttributeFont, nil]
          forState:UIControlStateNormal];
     //
    [tab.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
        [UIColor whiteColor], UITextAttributeTextColor, nil]
          forState:UIControlStateSelected];
    }