Funções em swift introdução ao conceito

Nesse post vamos aprender a trabalhar com funções, usando suas principais variações, como por exemplo usando funções com retorno ou com múltiplos valores.

Primeiramente vamos explicar o que é uma função, quando temos um trecho que código que usamos em vários lugares de nosso projeto, nós podemos simplesmente copiar e colar ele, ou fazer algo mais decente, que seria criar uma função, a função não é nada mais que um trecho de código que precisa ser usado em vários pontos, podemos passar variáveis para serem usadas dentro de funções, ou trabalhar usando seu retorno (quando existir).

Nossa primeira função será uma simples, sem retorno, e sem parâmetros, uma função assim pode ser usada para por exemplo para fazer uma conta, ou realizar determinada ação, em swift nossa função mais simples é assim:

func minhaFuncaoSemRetornoParametro() {

println(“Nessa função não passamos nenhum parametro e tambem não temos retorno”)

}

Embora não seja muito usada ela pode ser útil, outra função que podemos utilizar é uma função com parâmetros, um parâmetros é uma variável que podemos usar em nossa função, por exemplo, nosso código precisa executar uma mesma equação em vários pontos diferentes do projeto, porém nem sempre esses valores serão os mesmos, para esse tipo de situação podemos simplesmente criar uma função que receba parâmetros, que por sua vez podem ser alterados a cada vez que chamamos nossa função.

func minhaFuncaoComParametro(stringPassada: String) {

println(“Essa função vai mostrar a String passada, e não tem retorno”)

println(\(stringPassada))

}

Nesta função quando a chamamos, podemos alterar o valor da variável “stringPassada”, quando alteramos esse valor nossa função passa a trabalhar com o valor passado para a variável.

Até aqui, tudo bem, porém e se precisarmos passar vários valores de uma única vez? Para isso temos funções com vários parâmetros.

func minhaFuncaoComMultiplosParametros(stringPassada: String, inteiroPassado: Int){

println(“A string passada foi \(stringPassada), o inteiro passado \(inteiroPassado))

}

nessa função podemos passar vários parâmetros de uma única vez.

Outro aspecto interessante sobre as funções é seu retorno, quando criamos uma função com retorno é como se o código passasse as variáveis para a função, e não se interessa pelo que acontece la dentro apenas se interessa no que a função vai retornar.

func minhaFuncaoComRetorno() -> (Int){

return 10

}

Nessa função temos uma estrutura um pouco diferente das anteriores temos nosso → (int) isso significa que nossa função terá um retorno do tipo inteiro (int) porém podemos usar vários outros tipos de variáveis como strings booleanos e afins.

Juntando tudo

Vamos criar agora uma função completa agora abordando tudo o que falamos nesse post.

func minhaFuncaoComRetornoComParametros(primeiroValor: Int, segundoValor: Int) -> (String) {

var variavel: Int

variavel = primeiroValor + segundoValor

return (“O valor Passado é \(variavel))

}

Nessa função agora passamos 2 parâmetros, do tipo inteiro, e retornamos uma string.

Mas como chamar nossas funções?

Para chamar nossa função é algo extremamente simples em swift, precisamos apenas escrever o nome dela (se a função estiver na mesma classe que você esta trabalhando), e para pegar apenas o retorno de nossa função? Como fazer?

println(\(minhaFuncaoComRetorno()))

É uma maneira simples de exemplificar como podemos trabalhar com o retorno das funções.

Por que abrir uma loja virtual?

Loja virtual é um site e-commerce que possibilita que os clientes façam a visualização e a escolha de produtos, lançando-os em um carrinho de compras, onde a confirmação da compra e pagamento são efetuados em um processo totalmente online e rápido.

O investimento inicial é menor em relação às que necessitam de um espaço físico e ainda assim funciona 24 horas por dia. Oferecem serviços personalizados conforme as características do consumidor. O mercado virtual aproxima oportunidades entre pequenas, médias e grandes empresas e permite melhor mensuração e gerenciamento das informações sobre o mercado consumidor.loja-virtual

Com as inovações tecnológicas, as lojas virtuais podem ter layouts personalizados, cuja função é despertar a atenção, o interesse e a identificação do cliente com a plataforma de e-commerce, uma vez que os layouts customizados tornam a loja diferenciada em relação às outras. Também existe a integração com as redes sociais, permitindo assim a participação de clientes através de blogs e mensagens instantâneas para a divulgação do sistema.

Com o constante crescimento do mercado virtual brasileiro e a ampliação no volume de e-consumidores, possuir uma loja virtual significa investir em um empreendimento duradouro, com grandes perspectivas de sucesso, sendo suas expectativas atingidas a cada ano.

 

E você já possui uma Loja Virtual?loja-virtual-aberta-24h

– Funcionamento 24 horas, 7 dias por semana, 365 dias por ano;
– Venda sem fronteiras: o cliente pode estar em qualquer lugar do mundo;
– Fortalecimento da marca da empresa
– Canal democrático: pequenas empresas podem competir de igual para igual com grandes corporações;

Veja mais alguns dados sobre a importância que uma loja virtual poderá ter para o seu negócio segundo a Cartilha do Sebrae. Se você acha que as pessoas têm receio de comprar pela internet, saiba que o comércio eletrônico cresce muito no Brasil:

– O Brasil movimentou R$ 15 bilhões no comércio online em 2010, 40% a mais que o ano anterior;
­ O Natal de 2010 movimentou R$ 2,2 bilhões em compras pela internet;
­ O valor médio das compras foi de R$ 370;
­ 70% dos internautas brasileiros que acessam a Web diariamente estão nas classes C e D;
– 94% dos internautas pesquisam sobre produtos e serviços antes de comprar. Se a sua empresa ou o seu produto não estiver presente na internet, há uma boa chance do seu cliente (ou potencial cliente) comprar do concorrente;

Ficou interessado? Solicite um Orçamento.

Introdução a mapKit com objective-C

Bom pessoal neste tutorial iremos ensinar a colocar uma annotation no mapa, basicamente iremos usar isso para definir algum ponto no mapa usando o componente mapKit.

Bom antes de começarmos nosso código propriamente dito precisaremos pedir permissão do usuário para acessar o mapa.

O requerimento das permissões mudou um pouco no IOS 8 para fazer o requerimento precisamos adicionar uma linha na aba “info” de nosso projeto.

mapkit-Foto1

NSLocationWhenInUseUsageDescription

Com esta linha nosso app irá perguntar para o usuário se ele pode fazer uso do mapa, caso o usuário concorde o aplicativo continuará o funcionamento.

Para usarmos o mapa marcando o ponto onde estamos precisaremos de duas bibliotecas a mapKit e CoreLocation.

mapkit-Foto2

Vamos para nossa viewController nossa tela será bem simples, vamos colocar apenas um mapa nela e ligar a nosso .h, nosso arquivo.h ainda precisa de 2 delegates o do mapkit e o userLocation, em nosso .h também precisamos criar um CLLocationManager que será nossa ferramenta para gerenciar a localização do usuário. No fim nosso arquivo viewController.h fica assim:

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

@interface ViewController : UIViewController <MKMapViewDelegate,CLLocationManagerDelegate>

@property (strong, nonatomic) CLLocationManager *gerenciadorDeGPS;

@property (weak, nonatomic) IBOutlet MKMapView *mapa;

@end

Agora precisamos partir para nosso ViewController.m onde vamos realmente trabalhar com nosso mapa, como estamos fazendo apenas um tutorial bem simples vamos criar o seguinte código dentro de nosso ViewDidLoad, precisaremos iniciar nosso gerenciadorDeGps requer de nosso usuário a permissão de usar sua localização e começar a “seguir” nosso usuário. Vamos também implementar nosso delegate, e mostrar a localização do usuário.

self.mapa.delegate = self;

self.mapa.showsUserLocation = YES;

// iniciando alocando nosso gerenciador que usaremos para pegar a poisção do usuário

self.gerenciadorDeGPS = [[CLLocationManager alloc]init];

[self.gerenciadorDeGPS requestWhenInUseAuthorization];

[self.gerenciadorDeGPS startUpdatingLocation];

Agora vamos dizer para nosso mapa qual a região nosso mapa vai representar para isso precisamos da latitude e da longitude em que nosso usuário está, por isso criamos nosso gerenciadorDeGPS.

self.mapa.region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude), 250, 250);

Com essa linha definimos a latitude e a longitude, e também nosso zoom (no caso usamos 250 por 250, porem você poderá brincar com ele a vontade dependendo da necessidade do app).

Vamos por fim fazer uma annotation que seria uma pequena anotação no mapa, ou uma marcação de um ponto especifico, também precisamos da latitude e da longitude do ponto a ser mostrado:

MKPointAnnotation *annotation =[[MKPointAnnotation alloc]init];

annotation.coordinate = CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude);

Bom para evitar estender muito o tutorial usei a mesma localização do ponto anterior porem você poderá escolher outra latitude e longitude.

Por fim vamos dar um titulo para nosso ponto e também colocar no mapa.

annotation.title = [NSString stringWithFormat:@”Onde Estou”];

[self.mapa addAnnotation:annotation];

No fim nosso método ViewDidLoad ficou assim:

– (void)viewDidLoad {

[super viewDidLoad];

self.mapa.delegate = self;

self.mapa.showsUserLocation = YES;

// iniciando alocando nosso gerenciador que usaremos para pegar a poisção do usuário

self.gerenciadorDeGPS = [[CLLocationManager alloc]init];

[self.gerenciadorDeGPS requestWhenInUseAuthorization];

[self.gerenciadorDeGPS startUpdatingLocation];

// iniciando nosso mapa na posição em que estamos

self.mapa.region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude), 250, 250);

MKPointAnnotation *annotation =[[MKPointAnnotation alloc]init];

annotation.coordinate = CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude);

annotation.title = [NSString stringWithFormat:@”Onde Estou”];

[self.mapa addAnnotation:annotation];

}

Bom pessoal por hoje é isso foi um tutorial bem rápido só para dar uma introdução a ferramenta, poderemos em outros tutorias continuando com a ferramenta.

Loja Virtual Magento

O Magento é uma plataforma CMS líder em lojas virtuais segundo dados recentes do Google Trends. Ela oferece recursos ótimos e flexíveis, administração intuitiva, facilidade na otimização para resultados de busca (SEO), gerenciamento de catálogos e conteúdo.

Projetado para ser totalmente escalável tanto backend e frontend para otimizar a venda online e aumentar a experiência de compras de seus clientes.

Customizamos e personalizamos temas Magento de acordo com a sua necessidade, por isso cada uma de nossas lojas possui características próprias, buscando atender o seu modelo de negócio.

A plataforma magento nos permite trabalhar com as mais variadas formas de pagamento existentes no mercado, como Intermediadores PagSeguro, Bcash e Gatways de pagamento Cielo e Moip.

Você poderá visualizar relatórios detalhados de toda sua operação e conseguir ter um acompanhamento de carrinhos abandonados, termos mais buscados, produtos mais acessados, estoque, pedidos entre outras ferramentas de marketing.

Tenha sua loja virtual com todo o potencial do Magento Responsivo em diversos dispositivos móveis como celulares e tablets. Assim todos poderão comprar seus produtos de qualquer lugar a qualquer momento.

Diferenciais Magento

– Criação de Loja Virtual Magento
– Otimização (Seo) Loja Virtual Magento
– Otimização de Desempenho Loja Virtual Magento
– Migração de Servidor Loja Virtual Magento
– Instalação de Loja Virtual Magento
– Instalação de Extensões e Módulos Magento

Ficou interessado? Solicite um Orçamento.

Lista de Redes Sociais ao redor do mundo

Hello people!  Tudo joinha? Então aqui vai um post quentinho do forno pra você que é sociável e adora se comunicar na internet.  Ok, confesso esse post é pouco pra que é da área de Marketing Digital e sabe bem que a lista é interminável.

A ideia principal é te apresentar algumas redes sociais e acrescentar novas sempre que possível, assim você poderá contribuir e ficar antenado nas Redes Sociais do seu gosto.

Por favor se você tem alguma e gostaria de compartilhar comente abaixo. Espero que esse material possa te ajudar nos estudos. Até mais! 😉

Lista de Redes Sociais

Músicos e amantes de Música <3

Blip.fm
Rede social com temática musical, onde seus usuários são tratados como DJs.

Last.fm
Rede social voltada para a música. Forte presença brasileira (mais de 30.000 usuários se declaram brasileiros).

MySpace
Geral.

Palco Principal
Rede social de música.

Purevolume
Estados Unidos da América.

ShareTheMusic
Plataforma virtual para a troca legal e gratuita de música.

Spotify
Serviço de música comercial em streaming.

Países

Bebo
Rede popular na Inglaterra.

Cyworld
Coreia do Sul.

Mixi
Apenas em japonês.

Netlog
Rede Social voltada para jovens adultos europeus, de idades entre 14 e 24 anos.

Mirtesnet
Rede Social 100% Brasileira criada em 2013.

Colecionadores

Colnect
Rede social de Colecionadores do Mundo Inteiro.

Viajantes

CouchSurfing
Rede social voltado a pessoas que gostam de viajar e que gostam de hospedar viajantes em suas casas.

Leitores

Skoob
Rede social para leitores.

Filmes e Séries

Filmow

Rede social com foco em filmes e séries.

Amantes de Fotografia

Flickr
Compartilhamento de fotografias.

Instagram
Rede social online de compartilhamento de foto e vídeo que permite aos seus usuários tirar fotos e vídeos, aplicar filtros digitais e compartilhá-los em uma variedade de serviços de redes sociais.

Pinterest
Rede social de compartilhamento de fotos.

Emprego

LinkedIn
É um site para busca de colegas e ex-colegas de profissão.

Questionários

Formspring
Rede social focada em perguntas.

Ask.fm
Rede social para perguntas e respostas entre seus usuários.

Geo Localização

Foursquare
Rede social e de microblogging com ênfase na geolocalização.

Waze
Rede social colaborativa, permite compartilhar informações sobre transito, se baseia em localização geográfica.

Neutra

Friendica
Rede social descentralizada com ênfase em segurança, privacidade e comunicação com outras redes e serviços.

Jogos

Gaia Online
Anime e Jogos.

Bichos de Estimação

GoPets
Bichos de estimação virtuais.

Idiomas

Kaveris
Rede social para quem fala português.

Friendster
Geral.

Microblogging

Twitter

Rede social de microblogging.

Tumblr
Rede social (Microblogging).

Projetos

Moovia
Rede Social colaborativa voltada para o desenvolvimento de projetos em equipes.

Relacionamento

Par Perfeito
Rede de Relacionamento.

Sonico
Possui Fórum/Galeria. Site de relacionamento voltado para os povos de língua portuguesa, espanhola e inglesa.

Temas

Skyscrapercity
Rede Social para discussão de temas.

Voluntários

V2V
Rede social que reúne voluntários de acordo com suas afinidades e disposições para agir.

História

YuBliss

Rede social para auto-avaliação através de mitos modernos e histórias.

Video

Stayfilm
Rede social que permite a produção e compartilhamento de filmes com fotos e vídeos do usuário. Produção automática online com trilha sonora, efeitos e qualidade de cinema.

Youtube
Rede social e compartilhamento de vídeo.

Geral

Blaving
Rede social da PMovil.

Facebook
Maior rede social do mundo.

Google+
Compartilhamento de Conteúdo.

Hi5
Geral.

imeem
Instant messaging.

Mingle
Geral.

LiveJournal
Blogging.

VK

Rede social.

Wallop
Rede social da Microsoft.

Ello
é uma rede social virtual anti-publicitária.

Enviando E-mail com Objective-C

Bom pessoal vamos começar mais um post, hoje vamos desenvolver uma ferramenta extremamente útil e simples, vamos enviar um e-mail sem precisar sair de nosso aplicativo.

Vamos começar

Vamos começar com uma sinlge View e vamos colocar 1 botão nela, e não precisamos de mais nada em nossa interface.

TelaEmail

Para enviar e-mail é necessário que importemos o framework MessageUI ele será o responsável por enviar nossos dados, com a classe importada precisamos agora criar um componente e vamos também importar nosso delegate, nosso arquivo .h está assim:

#import <UIKit/UIKit.h>

#import <MessageUI/MessageUI.h>

@interface ViewController : UIViewController <MFMailComposeViewControllerDelegate>{

MFMailComposeViewController *formularioEmail;

}

  • (IBAction)envia:(UIButton *)sender;

Criamos também a action do botão que fará o disparo do e-mail. Agora vamos para nosso .m onde implementaremos o resto de nosso código:

Dentro de nossa action vamos implementar o seguinte código.

// dentro de nossa action vamos colocar os dados para enviar

// pré defini destinatários (não é necessário)

// NSArray *destinatario = [[NSArray alloc]initWithObjects:@”contato@yesbr.com.br”, nil];

//

// [formularioEmail setToRecipients:destinatario];

formularioEmail = [[MFMailComposeViewController alloc]init];

formularioEmail.mailComposeDelegate = self;

// setSubject adiciona um assunto ao email

[formularioEmail setSubject:@”Email de teste”];

// temos agora o corpo da mensagem

[formularioEmail setMessageBody:@”Enviamos nossa mensagem” isHTML:NO];

[self presentModalViewController:formularioEmail animated:YES];

A vantagem de usar esses métodos que já temos tudo criado pelo celular apenas chamamos o formulário de e-mail, o que torna todo o processo muito mais simples, e intuitivo para o usuário.

Os comentários já deixam o código bem fácil de entender mas vamos explicar apenas a questão de destinatários, em algumas situações, o aplicativo tem que enviar e-mail para um destinatário específico por exemplo um formulário de contato enviará o e-mail para o contato, nessa situação podemos implementar o setToRecipents e colocamos os destinatários em um array para poder enviar o e-mail a vários usuários por vez.

Feito a implementação de nossa ação para envio vamos obter a resposta se nosso e-mail foi ou não enviado. Para isso vamos implementar o seguinte método nele com base na resposta celular mostra um alerta se o e-mail foi ou não enviado com sucesso.

-(void)mailComposeController:(MFMailComposeViewController *)controller

didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

UIAlertView *mensagem;

if (result) {

mensagem = [[UIAlertView alloc]initWithTitle:@”Enviado” message:@”Email enviado com sucesso” delegate:self cancelButtonTitle:@”ok” otherButtonTitles:nil, nil];

}

if (error) {

mensagem = [[UIAlertView alloc]initWithTitle:@”Erro” message:@”Erro ao enviar mensagem” delegate:self cancelButtonTitle:@”ok” otherButtonTitles:nil, nil];

}

[mensagem show];

[self dismissViewControllerAnimated:YES completion:nil];

}

Bom pessoal esse projeto foi extremamente simples, porém é bem interessante para implementar no seus apps.

Construindo o Canvas para Aplicativos

Canvas é uma metodologia eficiente que fornece uma visão sistêmica (holística) do negócio, dá direção, mas como um negócio é vivo, certamente mudanças deve fazer parte ao longo do desenvolvimento. Preocupe-se em Startar  a sua ideia!

“Não há um modelo de negócio único… Há realmente uma série de oportunidades e um monte de opções e nós só temos que descobrir todas elas.” Tim O’Reilly, CEO, O’Reilly

Agora vou lhe apresentar os blocos de construção do Canvas. Essa ferramenta se assemelha a tela de um pintor – pré-formatada com os nove blocos – que lhe permite pintar imagens de modelos de negócios novos ou existentes.

“Os empresários não só precisam entender melhor os designers; eles precisam se tornarem designers” Roger Martin, Dean, Rotman School of Management

Utilize sempre blocos adesivos (tipo post-it) que permitem que as ideias sejam adicionadas, movidas e descartadas. Busque em cada um dos 9 blocos a seguir um modelo inovador e que lhe garanta vantagens competitivas.

E não se esqueça que tudo não passa de uma série de hipóteses, então não tenha medo de acrescentar ideias ao quadro.

Os 9 Blocos de Construção do Modelo de Negócio

canvas

Estes blocos cobrem as quatro principais áreas de uma empresa: Clientes, Oferta, Infraestrutura e Viabilidade Financeira.

Segmentos de clientes: O bloco Segmentos de Clientes define os diferentes grupos de pessoas ou organizações que uma empresa pretende alcançar e servir.

Questões:
Para quem estamos criando valor?
Quem são nossos clientes mais importantes?

 

Tipos: Mercado de massa, Nicho de mercado, Segmentados, Diversificados, Plataformas multi-face (ou mercados multi-verso)


Proposições de Valor: Este bloco descreve o pacote de produtos e serviços que criam valor para um segmento de clientes específico.

Questões:

Qual o valor que nós entregamos para o cliente?
Quais os problemas dos nossos clientes que estamos ajudando a resolver?
Quais as necessidades dos clientes que estamos satisfazendo?
Que pacotes de produtos e serviços que estamos oferecendo para cada segmento de clientes?
Quais os diferenciais (características)?

Características: Novidade, Desempenho, Personalização, Fazer as coisas acontecerem, Design, Marca / Status, Preço, Redução de custos, Redução de riscos, Acessibilidade, Conveniência / Usabilidade

 


Canais: O bloco de construção Canais descreve como uma empresa se comunica com e alcança seus segmentos de clientes para oferecer uma Proposta de Valor.

Questões:

Através de que canais que nossos Segmentos de Clientes querem ser alcançados? Como é que vamos alcançá-los agora?

Como os nossos canais estão integrados?
Quais funcionam melhor?
Quais têm o melhor custo-benefício?
Como estamos integrando-os com as rotinas do cliente?

Questões sobre as fases:

Como aumentar a consciência sobre nossos produtos e serviços?
Como podemos ajudar os clientes a avaliar a Proposição de Valor da nossa organização?
Como podemos permitir que os clientes comprem produtos e serviços específicos?
Como é que vamos entregar uma Proposta de Valor para os clientes?
Como fornecer suporte pós-venda ao cliente?

Tipos: Força de vendas, Vendas pela Web, Lojas próprias, Lojas parceiras, Atacadista/Distribuidor

 

Fases: Conscientização, Avaliação, Compra, Entrega, Pós-venda

 


Relacionamento com Clientes: O bloco de construção Relacionamento com Clientes descreve os tipos de relacionamentos que uma empresa estabelece com segmentos específicos de clientes.

Questões:

Que tipo de relação que cada um dos nossos Segmentos de Clientes espera de nós para estabelecer e manter com eles?
Quais estão estabelecidos?
Quanto eles custam?
Como eles são integrados com o resto do nosso modelo de negócio?

Categorias: Assistência pessoal, Assistência pessoal dedicada, Auto-serviço, Serviços automatizados, Comunidades, Co-criação

 


Fontes de Receita: O bloco de construção Fontes de Receita representa o dinheiro que uma empresa gera a partir de cada Segmento de Clientes (custos devem ser subtraídos das receitas para criar lucros).

Questões:

Que valor os nossos clientes estão realmente dispostos a pagar?
Pelo que eles pagam atualmente?
Como eles estão pagando atualmente?
Como é que eles preferem pagar?
Quanto cada Fonte de Receita contribui para as receitas totais?

Tipos: Venda de ativos, Taxa de utilização, Assinaturas, Empréstimo / Locação / Leasing, Licenciamento, Taxas de corretagem, Publicidade

Preço Fixo: Lista de preços, Produto dependente de recurso, Dependente do segmento de clientes, Dependente de volume

Preço Dinâmico: Negociação (barganha), Gerenciamento de produção, Em tempo real de mercado, Leilões

 


Recursos-chave: O bloco de construção Recursos-chave descreve os ativos mais importantes necessários para fazer o modelo de negócio funcionar.

Questões:

Quais Recursos-chave nossas Proposições de Valor, Canais de Distribuição, Relacionamento com Clientes e Fontes de Receita exigem?

Tipos: Físicos, Intelectual, Pessoas, Financeiros

Atividades necessárias: O bloco de construção Atividades-chave descreve as coisas mais importantes que uma empresa deve fazer para seu modelo de negócio funcionar.

Questões:

Quais Atividades-chave nossas Proposições de Valor, Canais de Distribuição, Relacionamento com Clientes e Fontes de Receita exigem?

Categorias: Produção, Resolução de problemas, Plataforma / Rede

 


Parcerias: O bloco de construção Parcerias-chave descreve a rede de fornecedores e parceiros que fazem o modelo de negócio funcionar.

Questões:

Quem são os nossos Parceiros-chave?
Quem são os nossos principais fornecedores?
Que Recursos-chave nós estamos adquirindo dos parceiros?
Quais Atividades-chave os parceiros realizarão?

Tipos: Alianças estratégicas entre não concorrentes, Coopetition: parcerias estratégicas entre concorrentes, Joint ventures para desenvolver novos negócios, Relações fornecedor-comprador para garantir abastecimento confiável

Motivações: Otimização e economia de escala, Redução do risco e incerteza, Aquisição de recursos e atividades especiais

 


Custos: A Estrutura de Custos descreve todos os custos incorridos para operar um modelo de negócio.

Questões:

Quais são os custos mais importantes inerentes ao nosso modelo de negócio?
Quais Recursos-chave que são mais caros?
Que Atividades-chave são mais caras?

Classes: Dirigidos por custos, Baseados em valor

Características: Custos fixos, Custos variáveis, Economias de escala, Economias de escopo

Implementando um leitor QRCode em iOS

Bom pessoal vamos fazer mais um tutorial de objective C hoje vamos criar um leitor de QRCode ( caso você não saiba exatamente o que é um segue um link para dar uma introdução sobre o que são e como funcionam). OK vamos la nosso leitor será algo extremamente simples porem bem legal e não é tão complexo de se fazer, vamos começar com uma singleView.

Em nosso storyboard vamos inserir 1 View, 1 label e por fim 1 botão, nosso tela fica mais ou menos assim:

storyboard

Ainda em nosso storyboard já vamos criar as properties , e também uma ação para nosso botão:

@property (weak, nonatomic) IBOutlet UIView *CapturaDela;

@property (weak, nonatomic) IBOutlet UILabel *status;

@property (weak, nonatomic) IBOutlet UIButton *botaoLerCodigo;

  • (IBAction)lerCodigo:(UIButton *)sender;

Como em nosso projeto vamos precisar acessar alguns dados sobre a câmera, vamos importar a classe AVFoundation caso não tenha sido importada ainda , e importe também o protocolo AVCaptureMetadataOutputObjectsDelegate.

Partindo para nosso .m

Antes de mais nada vamos criar 4 properties dentro de @interface ViewController ()

@property (nonatomic, strong) AVCaptureSession *captureSession;

@property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;

@property (nonatomic, strong) AVAudioPlayer *audioPlayer;

@property (nonatomic) BOOL estaLendo;

Essas propertys serão as responsáveis por gravar as imagens, e também trabalham com o áudio.

Feito isso a próxima coisa a se fazer é importar nosso áudio, o beep.mp3 do download está aqui, com o nosso beep já dentro do projeto vamos desenvolver um método para que o som seja pré-carregado e que seja apenas executado quando necessário, vamos então criar nosso método preCarregarBeep, nosso método fica assim:

-(void)preCarregarBeep{

// neste metodo vai fazer o seguite, ele vai deixar nosso beep para ser executado na hora que precisar

// criamos a string que contem o nome do nosso arquivo e sua extensão

NSString *beepFilePath = [[NSBundle mainBundle] pathForResource:@”beep” ofType:@”mp3″];

// criamos agora uma NSURL usando nosso arquivo anterior

NSURL *beepURL = [NSURL URLWithString:beepFilePath];

// vamos fazer um tratamento de erros, caso não tenhamos erro com nosso arquivo vamos deixar nosso beep pronto para ser executado

NSError *error;

_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:beepURL error:&error];

if (error) {

NSLog(@”Erro ao abrir o som”);

NSLog(@”%@”, [error localizedDescription]);

}

else{

[_audioPlayer prepareToPlay];

}

O próximo método que vamos criar é o comecarALer esse método será disparado quando o usuário clicar no botão para começar a verificar o código.

-(BOOL)comecarALer{

NSError *error;

// criamos nossas instancias de captura de imagem

AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];

if (!input) {

// Se acontecer algum erro vai dar um log no erro

NSLog(@”%@”, [error localizedDescription]);

return NO;

}

// inicia a captura de imagem

self.captureSession = [[AVCaptureSession alloc] init];

[self.captureSession addInput:input];

AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];

[self.captureSession addOutput:captureMetadataOutput];

// Create um novo serial dispatch queue.

dispatch_queue_t dispatchQueue;

dispatchQueue = dispatch_queue_create(“myQueue”, NULL);

[captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];

[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];

//inicia o video preview e atribui ele a nossa view.

_videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];

[_videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

[_videoPreviewLayer setFrame:self.CapturaDela.layer.bounds];

[self.CapturaDela.layer addSublayer:_videoPreviewLayer];

// começa a captura de tela

[self.captureSession startRunning];

return YES;

}

Criamos um método do tipo booleano pois vamos nos basear na resposta do método para determinar se o código conseguiu ou não executar a leitura.

Bom já temos o método que executa nosso beep, e já temos a leitura do código o que ainda falta? Ainda precisamos que pare a leitura do código afinal se não fecharmos o acesso a camera ela ficaria ainda funcionando, então vamos la vamos criar o método parandoLeitura.

-(void)parandoLeitura{

// para a captura de video

[self.captureSession stopRunning];

self.captureSession = nil;

// Remove o preview do video da view

[self.videoPreviewLayer removeFromSuperlayer];

}

Estamos quase lá aguentem só mais um pouco, vamos ao nosso último método, e esse é o responsável por fazer a mágica, ele realiza a ligação entre o que a câmera está registrando e o que aparecerá na view.

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{

// esse metodo é onde “ligamos” nossa camera para fazer a leitura

// checa se o metadataObjects array não é vazio, e que contem ao menos 1 objeto

if (metadataObjects != nil && [metadataObjects count] > 0) {

AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];

if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {

[self.status performSelectorOnMainThread:@selector(setText:) withObject:[metadataObj stringValue] waitUntilDone:NO];

[self performSelectorOnMainThread:@selector(parandoLeitura) withObject:nil waitUntilDone:NO];

[self.botaoLerCodigo performSelectorOnMainThread:@selector(setTitle:) withObject:@”Start!” waitUntilDone:NO];

self.estaLendo = NO;

// lembra do primeiro metodo que criamos, então agora que utilizamo ele

// verifica se nosso audio não for nil executa o som

if (_audioPlayer) {

[_audioPlayer play];

}

}

}

}

Bom pessoal é isso, já temos todos os métodos criados, vamos “chama-los”, lembram da action que criamos no início do projeto dentro dele chamaremos os métodos que acabamos de criar nossa action ficou da seguinte maneira.

– (IBAction)lerCodigo:(UIButton *)sender {

// precisamos primeiramente verificar se nosso usuario já não esta lendo algum código

if (!_estaLendo) {

if ([self comecarALer]) {

self.botaoLerCodigo.enabled = NO;

self.status.text = @”Escaneando código”;

}else{

[self parandoLeitura];

}

}

// inverte o valor de nosso booleano para que nossa action possa ser executa de novo

self.estaLendo = !self.estaLendo;

}

Agora só falta testar o código, lembrando que o código não pode ser testado no simulador pois o simulador não tem camera instalado no simulador faça um teste e tente ler o QRCode abaixo:

qr_code_without_logo

Esse é o link para o download do projeto completo.

Objective-C
Xcode 6.1
iOS 8.1

Monte o seu APP com Wireframe

Desenvolvimento com Wireframe

Um wireframe poderia ser nada mais do que um esboço numa folha de papel. Outros “wireframes” são criados digitalmente e são realmente mais como protótipos, com objetos clicáveis ​​e toda a interatividade prevista. O tipo de wireframe que será criado vai depender do que o projeto demanda. Projetos mais complicados provavelmente requerem wireframes mais elaborados, enquanto sites simples pode ter wireframes simples.

Uma vez que um wireframe básico é criado, você pode enviá-lo para outros membros da equipe para análise ou colocá-lo um pouco de lado por 1 ou 2 dias para analisar novamente. Quando estiver satisfeito, é hora de mostrá-lo ao cliente ou, caso não seja o caso de haver um cliente, começar a trabalhar em modelos baseados no wireframe.

Disposição dos Elementos> Desenvolver Wireframe> Feedback> Revisão

Ferramentas para criar wireframes

As ferramentas que você vai usar vão depender de preferência pessoal e dos requisitos do projeto. Não há “melhor” ferramenta para fazer wireframes, mas sim aquela na qual você se sente melhor usando e que funciona melhor para você.

Papel e caneta

Você pode querer usar um lápis para o seu esboço inicial, para que você possa apagar as coisas sem ter que começar de novo. Então, a medida que for finalizando os elementos, pode passar caneta por cima para evitar apagar o que não precisa mais ser apagado.

Programas para Criação de Wireframes

Existem diversos programas para criar wireframes disponíveis no mercado. Alguns são pagos, outros de graça, outros mais completos e alguns nem tanto; mas todos com o objetivo de ajudar na criação de wireframes para facilitar e agilizar o processo de desenvolvimento web.

1. WireFrame

wireframe
Esse wireframe é simples e você pode esboçar na primeira tela sem necessidade de login 😉

2. Mockflow

mockflow

Você pode esboçar 1 projeto por vez, mas pode compartilhar com outros usuários ao mesmo tempo.

3. HotGloo

hotgloo

Outra ferramenta para criação de wireframes que com suporte a colaboração em tempo real.

 

Foco na prototipagem e colaboração, os membros da equipe podem rever o trabalho e fornecer feedback em tempo útil, ideias e sugestões em wireframes clicáveis ou conteúdo criativo.

Modelos para Wireframes

Usar modelos (templates) para criar seus wireframes pode acelerar bastante o processo, especialmente se você optar por usar caneta e papel ou programas que são capazer de cumprir este propósito (como o Adobe Illustrator). Veja alguns bons modelos, kits e elementos de interface gratuitos para serem usados na elaboração de wireframes:

  • Free Web UI Wireframe Kit. Fuel You Interface oferece, neste kit, diversos elementos para wireframes, tais como botões, breadcrumbs, caixas de diálogo, campos de busca e mais.
  • Yahoo! Developer Network Design Stencils. Conhecidíssimo set de UI da Yahoo! para o desenvolvimento de wireframes. Eles disponibilizam os modelos para vários programas como OmniGraffle, Visio, Illustrator e Photoshop.
  • Free Sketching & Wireframing Kit. Conjunto de elementos para wireframe disponível em vários formatos de arquivo: Adobe Illustrator, SVG, PDF e EPS.
  • Sqetch. Kit para Illustrator que inclui modelos e elementos, incluindo para iPad, elementos GUI e elementos de formulário.
  • Dragnet Kit for Fireworks. Kit para Adobe Fireworks que inclui uma variedade de elementos da interface como botões, menus, combobox e abas.

Insipire-se

  • I ♥ Wireframes Flickr Group. Milhares de wireframes para se ver e milhares de membros cadastrados colocando novos conteúdos com frequência.
  • I ♥ Wireframes Tumblr. Excelente lugar para se ver muitos wireframes e se inspirar (é associado ao grupo do Flickr acima).
  • Wireframe Showcase. Site que apresenta um “antes e depois”, mostrando wireframes com seus respectivos projetos finais. Excelente!
  • Wireframes Magazine. Cobre todas as coisas relacionadas a wireframe, incluindo toneladas de stencils e modelos, bem como exemplos para inspiração.

 

Wireframe> Mockup>Protótipo certo?
Confira o post “UI Kit Design para Desenvolvimento iOS e Android”

Plist para iOS o que é e como funciona

Bom pessoal vamos fazer um post hoje sobre um tema que irá ajudar muito especialmente para aqueles que estão começando a programar, o uso de plists é bem interessante especialmente para aqueles que precisam de uma maneira fácil de salvar os dados do aplicativo de maneira extremamente simples rápida e fácil.

Mas antes de tudo vamos definir o que é uma plist, imagine a seguinte situação quando vamos salvar dados em arquivo de texto, apenas para ter os dados salvos, uma plist é como se fossemos salvar em um txt, porem o plist é diferente de um arquivo de texto é um array, simples assim. Isso claro é um definição simplista do que é.

Mas e quais as vantagens de se usar uma plist ao invés de usar CoreData ou SqLite ?

A maior vantagem é sua praticidade, é muito mais simples salvar os dados em plist e recuperar eles porém tem suas desvantagens, fica muito mais simples para um usuário acessar os dados salvos dessa maneira, e em projetos grandes é recomendável usar o CoreData ou SqLite, porem para projetos menores plists são ferramentas a se considerar.

Devidas explicações dadas vamos ao código.

Vamos criar um novo projeto simples vamos só salvar os dados no dispositivo e recuperar os dados, apenas para diminuir o trabalho não vamos criar um Single View vamos criar uma tabbed que tem duas telas, fizemos isso apenas para economizar um pouco de tempo.

imagem1

nossa primeira tela vamos colocar apenas um campo texto para o usuário digitar o que ele quer salvar e um botão salvar.

imagem2

e nossa segunda tela vamos apenas colocar um campo de texto, onde vamos mostrar os dados inserido pelo usuário na primeira tela.

imagem3

Vamos a codificação na nossa classe FirstViewController vamos fazer a maior parte do código no primeiro momento vamos apenas criar um array e iniciar colocar um ação para nosso botão. Essa ação será a maior do nosso projeto em nosso viewDidLoad iniciamos o array criado, nosso action inicia inserindo um novo dado no array:

[dadosParaSalvar addObject:self.campoTexto.text];

Agora com precisamos salvar nosso array em algum lugar, o ideal seria salvar o array na mesma pasta do aplicativo, ou seja precisamos definir onde está nosso app.

Vamos precisar de três variáveis do tipo string:

//abre o caminho para a home do dispositivo

NSString *caminhoParaHome;

// arquivo que contem o caminho para a pasta Documents do app

NSString *caminhoParaDocuments;

// nessa variavel salvamos o nome de nosso arquivo completo

NSString *caminhoParaMeuArquivoSalvo;

Vamos usar essas variáveis para definir onde vamos salvar, o que vamos salvar e o caminho para a pasta home do app.

Basicamente vamos precisar dessas três linhas de código:

// acessa a pasta Home do app

caminhoParaHome = NSHomeDirectory();

// acessa a pasta Documents dentro da home do app

caminhoParaDocuments = [caminhoParaHome stringByAppendingPathComponent:@”Documents”];

// acessa a pasta do app, e cria o arquivo meusDados,plist

caminhoParaMeuArquivoSalvo = [caminhoParaDocuments stringByAppendingPathComponent:@”meusDados.plist”];

Agora temos todos os caminhos para salvar nossa plist, precisamos salvar ela, para isso vamos usar a seguinte linha de código:

[dadosParaSalvar writeToFile:caminhoParaMeuArquivoSalvo atomically:YES];

E pronto basicamente salvamos os dados do nosso array já serão salvos em nosso dispositivo, e para mostrar o caminho do nosso arquivo precisamos só dar um log em nossa variável caminhoParaDocuments.

Ok já temos um sistema para salvar os dados, (lembrando que os dados serão substituídos a cada vez que você salvar) agora precisamos retornar esses dados para nosso aplicativo.

Em nossa SecondViewController vamos precisar de um outlet para nosso campo de texto e um array para salvar o retorno.

Com ambos declarados e iniciados, usamos basicamente o mesmo código a tela anterior, porém mudamos a última linha, pois não precisamos salvar mais os dados, e sim retornar os que já estão salvos, vamos apenas copiar e colar nossa linhas da action que criamos para salvar os dados, mas a última linha vai mudar, nosso viewDidLoad da segunda tela fica da seguinte maneira:

arrayRetornado =[[NSMutableArray alloc]init];

//abre o caminho para a home do dispositivo

NSString *caminhoParaHome;

// arquivo que contem o caminho para a pasta Documents do app

NSString *caminhoParaDocuments;

// nessa variavel salvamos o nome de nosso arquivo completo

NSString *caminhoParaMeuArquivoSalvo;

caminhoParaHome = NSHomeDirectory();

caminhoParaDocuments = [caminhoParaHome stringByAppendingPathComponent:@”Documents”];

caminhoParaMeuArquivoSalvo = [caminhoParaDocuments stringByAppendingPathComponent:@”meusDados.plist”];

// retorna o que estiver salvo dentro do arquivo se selecionamos

arrayRetornado = [NSMutableArray arrayWithContentsOfFile:caminhoParaMeuArquivoSalvo];

self.campoTexto.text = [NSString stringWithFormat:@”%@”,arrayRetornado];

Basicamente a única diferença entre os dois códigos está na última linha em um nós salvamos os dados e no outro nós retornamos, agora podemos fazer um teste simples, abra o aplicativo e salve alguma frase, vá para a segunda tela e veja se ela está aparecendo la, caso ela já esteja la feche e reabra o app, vá direto a segunda tela a frase ainda deve estar sendo mostrada la.

Bom pessoal por hoje é isso o link para o download do projeto completo SalvandoPlist , espero ter ajudado.