DishLATINO For United States Spanish Speaking People

Is your mother tongue Spanish? Do you live in the United States? If the answer to these two questions is a YES, you surely must miss watching Spanish films and programs on television. Seems you are lucky, because DISH Network has come up with the DishLATINO packages; this is good news for all those of you speak Spanish and belong to the Latino community and are living in the United States.

What do subscribers get? You may have this question lingering in your mind. Well, subscribers to DISH Networks DishLATINO packages can watch several movies in Spanish; these movies may be dubbed as well as be original. Movies is not all, subscribers also get to watch soap operas or as it is known in Spanish, telenovelas. Sports and news are also on the list of items that subscribers can watch.

If your family has Spanish speaking people, then DISH Network guarantees that its DsihLATINO packages will suit the tastes of all members regardless of age.

DishLATINO Packages Select the one thats for you

DISH Network offers the Latino community living in the United States several packages to take their pick on. Read on to know which one you need.

DishLATINO Clsico: If you are looking for the best Latino programming package for you and your family, get this package. It has more than 105 channels and enables you to watch movies, novelas or soap operas, sports, music channels and entertainment programs. You can also watch with your family the local channels that are available in your area. You get DishLATINO Clsico package at the promotional price of $22.99 per month and then onwards at a regular price of $32.99 per month.

DishLATINO Dos: Here comes a package that offers you the luxury to watch more than 210 channels; 25 of which are high-definition channels. This is good if you have both Spanish and English speaking people in your family, as the package gives you programming in both languages. Local channels available in your area are also provided. Enjoy bilingual programming for a promotional price of $29.99 per month and then onwards for a regular price of $44.99 per month.

DishLATINO Max: If you want to watch both DishLATINO Clsico and DishLATINO Dos, then this is the ideal pack for you. It offers you both of those packages as well as several other entertaining channels. Watch over 255 DISH channels, which include over 40 channels in high-definition format. Also watch the local channels available in your region. This is yours for a promotional price of $42.99 per month and for a regular price of $57.99.

DishMXICO: If you select this DISH Network package for you and your family, you will have access to over 55 channels that you can watch both in Spanish and English. Enjoy programming from Mexico for a regular price of $19.99 every month.

All the DISH Network package prices that have been provided will be in effect from February 1, 2011. Enjoy watching programs in DishLATINO packages; DISH Network promises all Spanish speaking people in the United States that they will not miss their hometown.

Custom Camera Applications Development Using Iphone Sdk

iPhone contains many useful features. One of them is build-in camera and Camera application system for making photos. It looks great but what about camera usage with native applications? iPhone SDK provides the capability of using camera through UIImagePickerController class. That’s great but there is a small disadvantage – you cannot create a full-screen persistent “live” camera view like the Camera application does. Instead of that you should use UIImagePickerController only in modal mode – show the pop-up modal view when you need a photo and close the view after the photo is made. You have to reopen this view again to take the next one.

Moreover, that modal view contains additional panels and controls that overlay the camera view. Another disadvantage is – you cannot take a photo in one touch; you need to touch the Shoot button to take a picture and preview it, and then you need to touch the Save button to get the photo for processing. Probably it’s the best practice but I don’t like it and I hope you think the same way.

What about using the UIImagePickerController as an ordinal non-modal view controller under the navigation controller the same way as we use the other view controllers? Try it and you will found that it works! The camera view works and looks as it should. You can assign a delegate and process UIImagePickerControllerDelegate events to get and save the photo. Ok, touch the Shoot button, touch the Save button – great, you’ve got the photo! But just look at this – the Retake and Save buttons stay above the camera view, and they don’t work now when they are touched… This is because you cannot reset the view to take another photo after taking one and touching the Save button, the view is freezed and the buttons are disabled. It seems you need to fully recreate the UIImagePickerController instance to take another photo. That’s not so simple and not so good. And you still need to use the panels and buttons that overlay the camera view…

Now I have an idea! When we touch Shoot, the view stops refreshing and displays single image from the camera; then we have to touch Retake or Save button. Can we get that image and save it without using the UIImagePickerControllerDelegate and then touch the Retake button programmatically to reset the view and get another photo? Sure we can! If you explore the camera views hierarchy after touching Shoot you will find that there is a hidden view of ImageView type. This class is not described in the SDK, but we can explore its’ methods using Objective-C capabilities. We can see that the class contains a method called imageRef. Let’s try this… Yes, it returns CGImage object! And the image size is 1200 x 1600 – it’s definitely the camera picture!

Ok, now we know we can get the photo without UIImagePickerControllerDelegate. But in what moment should we do this? Can we catch the user touches on the Shoot button to start processing? It’s possible but not so good. Do you remember our main purpose – creating the persistent full-screen camera view like system Camera application does? It’s time to do it! When we explored the views hierarchy, we’ve found that there are number of views above the camera view. We can try to hide these views and create our own button below the camera view to take the photo in one touch. But how can we force the camera view to make the photo? It’s very simple – we can get the corresponding selector from the Shoot button and call it from our action handler!

Ok, we’ve forced getting the image. But it takes us few seconds. How can we detect that the image is ready? It occurred when the Cancel and Shoot buttons are replaced by Retake and Save ones. The simplest way to detect this is starting a timer with short interval and checking the buttons. And then we can get and save the photo, using the corresponding selector from the Retake button and calling it to reset the camera view and prepare it for making a new one. Here is the code:

// Shot button on the toolbar touched. Make the photo.
– (void)shotAction:(id)sender {
[self enableInterface:NO];
// Simulate touch on the Image Picker’s Shot button
UIControl *camBtn = [self getCamShutButton];
[camBtn sendActionsForControlEvents:UIControlEventTouchUpInside];

// Set up timer to check the camera controls to detect when the image
// from the camera will be prepared.
// Image Picker’s Shot button is passed as userInfo to compare with current button.
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(savePhotoTimerFireMethod:) userInfo:camBtn repeats:NO];
}

// Return Image Picker’s Shoot button (the button that makes the photo).
– (UIControl*) getCamShutButton {

UIView *topView = [self findCamControlsLayerView:self.view];
UIView *buttonsBar = [topView.subviews objectAtIndex:2];
UIControl *btn = [buttonsBar.subviews objectAtIndex:1];

return btn;
}

// Return Image Picker’s Retake button that appears after the user pressed Shoot.
– (UIControl*) getCamRetakeButton {

UIView *topView = [self findCamControlsLayerView:self.view];
UIView *buttonsBar = [topView.subviews objectAtIndex:2];
UIControl *btn = [buttonsBar.subviews objectAtIndex:0];

return btn;
}

// Find the view that contains the camera controls (buttons)
– (UIView*)findCamControlsLayerView:(UIView*)view {

Class cl = [view class];
NSString *desc = [cl description];
if ([desc compare:@”PLCropOverlay”] == NSOrderedSame)
return view;

for (NSUInteger i = 0; i
{
UIView *subView = [view.subviews objectAtIndex:i];
subView = [self findCamControlsLayerView:subView];
if (subView)
return subView;
}

return nil;
}

// Called by the timer. Check the camera controls to detect that the image is ready.
– (void)savePhotoTimerFireMethod:(NSTimer*)theTimer {

// Compare current Image Picker’s Shot button with passed.
UIControl *camBtn = [self getCamShutButton];
if (camBtn != [theTimer userInfo])
{
// The button replaced by Save button – the image is ready.
[self saveImageFromImageView];

// Simulate touch on Retake button to continue working; the camera is ready to take new photo.
camBtn = [self getCamRetakeButton];
[camBtn sendActionsForControlEvents:UIControlEventTouchUpInside];

[self enableInterface:YES];
}
else
{
NSTimeInterval interval = [theTimer timeInterval];
[NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(savePhotoTimerFireMethod:) userInfo:camBtn repeats:NO];
}
}

// Save taken image from hidden image view.
– (BOOL)saveImageFromImageView {

UIView *cameraView = [self.view.subviews objectAtIndex:0];
if ([self enumSubviewsToFindImageViewAndSavePhoto:cameraView])
return YES;

return NO;
}

// Recursive enumerate subviews to find hidden image view and save photo
– (BOOL)enumSubviewsToFindImageViewAndSavePhoto:(UIView*)view {

Class cl = [view class];
NSString *desc = [cl description];
if ([desc compare:@”ImageView”] == NSOrderedSame)
return [self grabPictureFromImageView:view];

for (int i = 0; i = 4)
{
for (int i = 2; i
{
UIView *v = [cameraView.subviews objectAtIndex:i];
v.hidden = YES;
}
}
}
}
else
{
// Subclass UIView and replace addSubview to hide the camera view controls on fly.
[RootViewController exchangeAddSubViewFor:self.view];
}
}

// Exchange addSubview: of UIView class; set our own myAddSubview instead
+ (void)exchangeAddSubViewFor:(UIView*)view {

SEL addSubviewSel = @selector(addSubview:);
Method originalAddSubviewMethod = class_getInstanceMethod([view class], addSubviewSel);

SEL myAddSubviewSel = @selector(myAddSubview:);
Method replacedAddSubviewMethod = class_getInstanceMethod([self class], myAddSubviewSel);

method_exchangeImplementations(originalAddSubviewMethod, replacedAddSubviewMethod);
}

// Add the subview to view; “self” points to the parent view.
// Set “hidden” to YES if the subview is the camera controls view.
– (void) myAddSubview:(UIView*)view {

UIView *parent = (UIView*)self;

BOOL done = NO;
Class cl = [view class];
NSString *desc = [cl description];

if ([desc compare:@”PLCropOverlay”] == NSOrderedSame)
{
for (NSUInteger i = 0; i
{
UIView *v = [view.subviews objectAtIndex:i];
v.hidden = YES;
}

done = YES;
}

[RootViewController exchangeAddSubViewFor:parent];

[parent addSubview:view];

if (!done)
[RootViewController exchangeAddSubViewFor:parent];
}

The technique described above was used in iUniqable application available from Apple App Store (Social Networking section). Feel free to use.