Mostrando postagens com marcador Desenvlovimento. Mostrar todas as postagens
Mostrando postagens com marcador Desenvlovimento. Mostrar todas as postagens

quinta-feira, 21 de fevereiro de 2019

6 etapas indispensáveis na criação de um aplicativo de sucesso

Por Rodrigo Bizarro em 20/02/2019 no site CIO.

Foto: Shutterstock

Muitas pessoas têm a impressão de que desenvolver um aplicativo é uma ideia fácil de implementar e que pode ser a chave para um futuro de grande sucesso. Mas por trás de todo app bem-sucedido, há - além de uma boa ideia - muito esforço, planejamento e ajustes ao longo do processo. A seguir, conheça alguns passos que devem ser seguidos para que o tão suado dinheiro não seja gasto em vão.
1 - Estude
O ponto zero é o momento ideal para estudar sobre Design Thinking e Business Model Generation (BMG), que serão essenciais para a criação do aplicativo. Trate seu app como se fosse uma empresa, uma vez que você terá fornecedores, parceiros estratégicos, custos, investimentos, mercado, público-alvo, atendimento, entre outros fatores.

2 - Debata e ideia
Coloque em um papel qual é a sua ideia, faça uma reflexão, não deixe somente na sua cabeça. Utilize softwares de mapas mentais. Existem muitos softwares gratuitos, uma pesquisa simples na internet sobre “software mapa mental” já resultará em muito material bom.

3 - Tenha clareza sobre o problema que o aplicativo deve resolver
Um aplicativo bem sucedido gera valor para seus usuários e, neste caso, não importa se apps similares já existam. O importante é saber qual é o real problema a ser tratado: facilidade de comunicação, diminuição de gastos, controle de agendamento, etc. Você deve saber exatamente o que quer, como quer e para quem quer.

4 - Teste o modelo
Depois de saber qual é o problema que o aplicativo está resolvendo e para quem está resolvendo, é necessário conversar com as pessoas que serão o seu público-alvo. O objetivo é ver a aderência do aplicativo e anotar as sugestões que eles darão. Nessa etapa, é interessante criar um modelo ou protótipo, que não necessariamente precisa ser digital - pode até ser em papel. A ideia é extrair do público-alvo se sua criação é realmente útil.

5 - Desenhe um MVP (Menor Produto Viável)
Agora, com um batalhão de informações em mãos, é preciso identificar quais são as funcionalidades que realmente impactam a vida dos usuários/clientes. Nessa hora, é fundamental ser bastante crítico, porque quanto mais funcionalidades, mais caro é para desenvolver um aplicativo. Uma estratégia muito comum é ter um aplicativo simples, barato, que possa ser lançado rápido e ter sua aderência testada em larga escala.

Talvez esse momento seja o mais delicado, pois até aqui praticamente gastou-se tempo e fosfato, mas agora será o momento de investir dinheiro no projeto.
Se você não tem o capital para isso, não desista. Existem várias formas de seguir em frente:
- Uma opção é desenhar um plano de negócios baseado nos dados e submeter para algum modelo de financiamento do governo como o FINEP, Fapesp;
- Também é possível fazer uma apresentação a investidores. Existem vários eventos de inovação e empreendedorismo, onde se pode apresentar projetos. Se investidores entenderem a mensagem passada por você e gostarem da ideia, podem investir nela. Uma dica: cuidado para não supervalorizar a ideia, o que pode afugentar algumas oportunidades.
Mas se o seu caso não é esse e você tem dinheiro para um MVP inicial, procure empresas especializadas em desenvolvimento de sistemas e que tenham processos bem estruturados e casos de sucessos de implementação de aplicativos. Peça conselhos as eles, faça todas as perguntas necessárias para ficar confortável com a estratégia adotada. Tenha em mente que os custos de desenvolvimento podem aumentar conforme a especificação que escolher. Se for fazer em tecnologia híbrida (iOS e Android) é um custo, para IOS nativo é outro custo, se for para Android nativo é um custo ainda diferente e se for para os dois nativos é mais alto ainda. Por isso, é muito importante conhecer seus usuários, pois pode ser que 90% do seu público-alvo utilize Android, enquanto você está investindo no desenvolvimento em iOS. Ninguém quer que o dinheiro acabe no meio do desenvolvimento do aplicativo!
6 - Divulgação, divulgação, divulgação
Todo o esforço feito até agora não vale nada se as pessoas não conhecerem o aplicativo, portanto uma boa estratégia de divulgação é fundamental para o sucesso dele. Existem vários cursos na internet que ensinam como realizar essa divulgação e também empresas especializadas nisso. Ao divulgar o trabalho, muitas pessoas podem amar e outras, nem tanto. O importante é ouvir e ficar antenado nas notas que o aplicativo recebe para entender com cada um onde é preciso melhorar. Veja o app como um ser vivo: ele nunca para de evoluir. Se você para de inovar, ele será abandonado vertiginosamente.



quinta-feira, 28 de setembro de 2017

O que é novo na Swift 4.0


A versão 4.0 da Swift passou a estar disponível desde a semana passada constituindo uma actualização importante para a linguagem sucessora da Objective-C, usada para desenvolvimento de aplicativos MacOS e iOS.

O upgrade para a tecnologia com três anos no mercado, traz um melhor Swift Package Manager e fornece novos modos de compatibilidade para programadores. A Apple diz que a Swift 4 também torna a linguagem mais estável e melhora sua biblioteca principal.
A Swift 4 é em grande parte compatível com fontes do Swift 3 e é fornecida como parte do IDE Xcode 9 da Apple. O Swift Package Manager, que se estreou na Swift 3, é uma ferramenta para distribuição de código.
Está integrado com o sistema de compilação Swift para automatizar processos, incluindo o download, compilação e vinculação de dependências.
As melhorias no gestor de pacotes incluem uma Package API mais limpa capaz de permitir que os pacotes especifiquem novas configurações. Estas configurações proporcionam aos programadores maior controlo sobre a construção de pacotes e organização de fontes no disco.
Na nova versão, há dois modos que são suportados, incluindo o modo Swift 3.2, que aceita a maioria dos ficheiros de origem criados com os compiladores Swift 3.x e o modo Swift 4.0, que inclui Swift 4 e alterações na API.
O desenvolvimento de múltiplos pacotes aos pares está facilitado e a formalização de produtos de pacote, suportada, permite o controlo sobre as bibliotecas, que um pacote publica nos dispositivos clientes.
As compilações de pacotes no MacOS agora ocorrem numa área de experimentação (“sandbox”), impedindo o acesso à rede a modificação do sistema de ficheiros, para reduzir o alcance de malware. Os novos modos de compatibilidade da Swift 4 podem evitar que um programador tenha de modificar o código para poder usar a nova versão do compilador.
São suportados dois modos, incluindo o modo Swift 3.2, que aceita a maioria dos ficheiros de origem criados com os compiladores Swift 3.x e o modo Swift 4.0, que inclui Swift 4 e alterações na API. A Apple disse que será necessária alguma migração de código-fonte em muitos projectos. mas o número de mudanças será “bastante modesto” em comparação com muitas mudanças importantes anteriores entre as versões Swift, ressalva.
A introdução dos modos de compatibilidade na Swift 4 oferece aos desenvolvedores mais controle sobre o ritmo da migração, acrescenta.

sexta-feira, 15 de setembro de 2017

6 extensões que vão turbinar o seu Github

PorBernard De Luna em

Resultado de imagem para github

Se você trabalha com projetos web, dificilmente você não utiliza Git. Git é um sistema de controle de versão de arquivos de extrema importância, tanto para sua organização de projetos quanto para a divulgação do seu talento e projetos open-source, além de manter os padrões e processos de equipes de desenvolvimento.
O serviço mais famoso que trabalha com Git é o Github, que permite hospedar seus projetos pessoais e corporativos. A maioria dos projetos open-source do mundo estão disponibilizados no Github, e por isso é uma das ferramentas quase obrigatórias para qualquer empresa e programador.
Porém, pelo dia-a-dia corrido de uma desenvolvedora ou desenvolvedor, acabamos não conseguindo utilizar a capacidade total de funcionalidades que poderíamos nesse serviço. Por isso, separei uma lista de extensões superpoderosas que turbinarão o seu Github para sempre (ou pelo menos deixará o seu trabalho mais divertido). Faça bom proveito.

Github Polls

Que tal utilizar os membros do seu repositório para tomar decisões rápidas? É bem fácil com o Github Polls. Ele trabalha com markdown e utiliza imagens em SVG, e cada opção aparece como um link que identifica o voto.

Github Selfies

Como o próprio slogan deles já diz, “Tudo fica melhor com selfies”! Com essa extensão, você pode anexar uma selfie sua em comentários no seu Github, inclusive Pull Requests. Atualmente está disponibilizado no Chrome e Firefox através do NPM.

Github E-mail

Você é o tipo de profissional que controla mais seus projetos no Github por e-mail? Então vai adorar essa extensão, disponível para Chrome e Firefox. Nela, você poderá visualizar suas threads do Github, sem precisar procurar o link em seu e-mail. O serviço também disponibiliza uma série de atalhos para acessar rapidamente issues e até mutar a thread que está acompanhando.

Isometric Contributions

Confesso que esse é um dos meus preferidos! Com o Isometric, você consegue alterar facilmente a visualização da atividade do Github, de blocos flat para um pixel art isométrico em 3D. Não é tão útil quanto a versão original, mas nem tudo precisa ser né?

GitHub Hovercard

Falando em utilidade, o Hovercard é uma extensão fantástica que vai revolucionar o seu Github. A extensão já está presente em Chrome, Firefox e Opera e permite que você veja rapidamente mais informações sobre Issues, Usuários e Repositórios passando o mouse nos links do Github.

Explore Github

Para terminar essa lista, vou para um projeto que é até um pouco louco, mas superdivertido. Imagina você explorar o Github apenas utilizando sua voz, através da Alexa, assistente inteligente da Amazon. Através da Alexa, você pode perguntar e ouvir sobre os repositórios mais populares do mês e da semana sem usar o seu computador.

sexta-feira, 8 de setembro de 2017

Paginação com JavaScript

Por 
Em 06/09/2017 no Lambda3

Resultado de imagem para javascript

Na construção de web sites ou sistemas webs, procuramos sempre a melhor solução que atenda aos requisitos do projeto.
A internet só cresce, cada vez mais pessoas estão acessando sites/sistemas web.
Diante de tantos dispositivos acessando a internet, a performance de web sites tornam-se cada vez mais importante. Um exemplo simples que pode levar a sua aplicação a ter uma queda de desempenho, é a quantidade de dados que precisamos apresentar para nossos usuários.
Uma das soluções para sanar essa questão, é procurar trabalhar com uma quantidade de dados menor sempre que possível. Esta ação nos permite trafegar uma quantidade menor de dados na rede.
Quando há muitos registros na base de dados, procuramos exibir uma pequena parte do todo, isso tem um ganho no processamento de I/O. A requisição tende a ser mais rápida. Uma solução muito abordada no mercado, é a paginação de dados, na qual buscamos uma quantidade x de informações e a exibimos.
Mas essa solução pode ser melhorada, requisições assíncronas em formato Json tornam-se mais rápida por trafegarem o dado de forma mais “bruta”. A paginação por demanda utilizando os recursos do JavaScript, é uma das formas para melhorar uma solução amplamente utilizada no mercado.
Logo a seguir, veremos como utilizar o poder dos recursos do JavaScript com paginação por demanda.

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<div class="row">
    <section class="form-group">
        <table class="table table-hover table-responsive table-bordered"
        data-bind="visible:Produtos().length > 0">
            <thead>
                <tr>
                    <th>Descrição</th>
                    <th>Quantidade</th>
                    <th>Preço</th>
                </tr>
            </thead>
            <tbody data-bind="foreach: Produtos">
                <tr>
                    <td data-bind="text: DescricaoProduto"></td>
                    <td data-bind="text: Quantidade"></td>
                    <td data-bind="text: Preco"></td>
                </tr>
            </tbody>
        </table>
 
        <nav class="text-center nav-pagination-marca">
            <ul id="pagination"></ul>
        </nav>
    </section>
</div>

JavaScript

Nesse exemplo, foi utilizado o framework Knockoutjs para renderizar o HTML com os dados. A API de paginação utilizada foi a twbs-pagination. Esse plugin está disponível no nuget para ser baixado e usado.
Lembrando que pode ser qualquer framework como o AngularJs, ReactiveJs e entre outros.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function AppViewModel() {
    var NumeroLinhasPorPagina = 10;
    var self = this;
    self.Produtos = ko.observableArray([]);
     
    $.ajax({
        type: "GET",
        url: "/Home/index",
        dataType: "json",
        async: true,
        data: { 'linhasPorPagina': NumeroLinhasPorPagina, "pagina": 1 },
        success: function (data) {
            self.Produtos(data);
            Pagination(data[0].TotalPage, NumeroLinhasPorPagina);
        }
    });
  
    function Pagination(NumeroLinhasEncontradas, NumeroLinhasPorPagina) {
        $("#PaginationLink").html('');
        $("#PaginationLink").html('<ul id="pagination"></ul>');
         
        $('#pagination')
            .twbsPagination({
                totalPages: Math.ceil(NumeroLinhasEncontradas
                / NumeroLinhasPorPagina),
                initiateStartPageClick: false,
                startPage: 1,
                visiblePages: 5,
                href: false,
                hrefVariable: '{{number}}',
                first: '««',
                prev: '«',
                next: '»',
                last: '»»',
                loop: false,
                paginationClass: 'pagination pagination-lg',
                nextClass: 'next',
                prevClass: 'prev',
                lastClass: 'last',
                firstClass: 'first',
                pageClass: 'page',
                activeClass: 'active',
                disabledClass: 'disabled',
                onPageClick: function (event, page) {
                    $.ajax({
                        type: 'GET',
                        url: "/Home/index",
                        dataType: "json",
                        async: true,
                        data: {
                            'linhasPorPagina': NumeroLinhasPorPagina
                            , "pagina": page
                        },
                        success: function (data) {
                            self.Produtos(data);
                        }
                    });
                },
            });
    };
};
var vm = new AppViewModel();
ko.applyBindings(vm);
Aqui temos o tempo do primeiro request. Neste primeiro momento, é preciso executar duas requisições, a primeira, caso não esteja usando single page, fará uma requisição normal. Vai carregar o HTML e todas as bibliotecas necessárias.
No segundo momento, estamos navegando entre as páginas apresentadas na tela. O tempo de resposta tende a ser menor do que uma requisição normal.
Lembrando que a consulta na base de dado deve esta paginada também. Nesse linkvocê encontrará um artigo que fala a respeito dos ganhos na paginação na base de dados.
Aqui temos a consulta utilizada para acessar a base de dados.

C# Repositorie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using Dapper;
using ProjetoPaginationAjax.MVC.Models.Interfaces;
using System.Collections.Generic;
using System.Linq;
  
namespace ProjetoPaginationAjax.MVC.Models
{
    public class PaginationService : GetConnectionDapper, IProduto
    {
        public IEnumerable<Produto> BuscarTodosProdutosPorDemanda(
        int linhasPorPagina, int pagina)
        {
            var sql = @"SELECT IdProduto, DescricaoProduto, Quantidade, Preco
                        , StatusProduto
                        , COUNT(IdProduto) over() as TotalPage
                        FROM Produto
                        ORDER BY DescricaoProduto
                        OFFSET ((@pagina - 1) * @linhasPorPagina) ROWS
                        FETCH NEXT @linhasPorPagina ROWS ONLY";
            using (var conn = Connection)
            {
                conn.Open();
                return conn.Query<Produto>(sql, new { pagina = pagina,
                linhasPorPagina = linhasPorPagina }).ToList();
            }
        }
    }
}
E o nosso controller que faz o acesso ao método de paginação.

C# Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using ProjetoPaginationAjax.MVC.Models;
using System.Web.Mvc;
  
namespace ProjetoPaginationAjax.MVC.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(int? linhasPorPagina, int? pagina)
        {
            if (Request.IsAjaxRequest())
            {
                var produtos = new PaginationService();
                var resultado = produtos.BuscarTodosProdutosPorDemanda(
                (linhasPorPagina ?? 10), (pagina ?? 1)
                );
                 
                return Json(resultado, JsonRequestBehavior.AllowGet);
            }
  
            return View();
        }
    }
}

Conclusão

A paginação de registro garante um trafego menor nas requisições, contudo é preciso sempre analisar o contexto do projeto ao qual estamos inseridos. Essa prática é muito bem-vinda desde que ela seja necessária.
(Cross-post de – http://adeildo.azurewebsites.net/)