If you continue to use this site, you consent to our Privacy Policy.

17 julho 2018

Este artigo faz parte do projeto #LTCode.

A alocação dinâmica de memória permite que você reserve espaços na memória de tamanhos arbitrários durante a execução do programa, assim podendo acessá-los através de apontadores. 

Quando você declara uma variável, o sistema operacional reserva uma quantidade de espaço na memória para essa variável. Na aula 2.2 você viu que o operador sizeof() retorna o tamanho em bytes do tipo de dado inserido entre (). Exemplo:

Portanto ele retornará o tamanho em bytes de registros, vetores, variáveis simples etc. Se eu criar um vetor de inteiros de 10 posições - v[10] - , ao checar com sizeof - sizeof(v) - veremos que o sistema operacional vai alocar 40 bytes, afinal é um inteiro de 4 bytes vezes 10 posições do vetor.

Existe uma função presente na biblioteca sdtlib.h, chamada malloc, que permite você dizer ao sistema operacional exatamente qual tamanho (do bloco de memória em bytes) você deseja alocar, assim a função retorna um ponteiro para o bloco de memória alocado. Confira um exemplo abaixo:

Faça um programa que leia um valor n e crie dinamicamente um vetor de n elementos e passe esse vetor para uma função que vai ler os elementos desse vetor. Depois, no programa principal, o vetor preenchido deve ser impresso. Além disso, antes de finalizar o programa, deve-se liberar a área de memória alocada.


Na linha 11 foi declarado um ponteiro chamado vetor. Este ponteiro vai apontar para o bloco de memória alocado na linha 14 com malloc. A função malloc está alocando um espaço em byte dado pelo tamanho do vetor digitado pelo usuário vezes o tamanho de um inteiro (pois o ponteiro vetor declarado na linha 11 é inteiro), no exemplo malloc(n*sizeof(int)) ou seja malloc(n*4), como usuário digitou 3 será malloc(3*4).

Como a função malloc retorna um ponteiro do tipo void, é necessário fazer casting que nada mais é que forçar que o ponteiro do tipo void seja de outro tipo, no caso int já que o ponteiro vetor é do tipo int, como você pode notar na linha 14 (int *) malloc(...

Você certamente lembra que a primeira posição de um vetor x[] é um ponteiro, logo como o ponteiro vetor criado na linha 11 aponta para o início de um bloco de tamanho de n posições de inteiros, ele pode ser considerado um vetor. Por isso que a função leitura (linha 3) recebe o ponteiro como vetor[].

Vale notar que a função malloc pode alocar um espaço na memória que contém lixo, para evitar isso você pode usar a função calloc(argumento1, argumento2) que inicializa com zero as posições da memória alocada, seguindo o exemplo da imagem ficaria assim: calloc(n, sizeof(int));

Também é recomendado controlar se a função malloc funcionou, por exemplo se seu computador teve memória suficiente livre para ser alocada. Para isso basta fazer uma condição, utilizando o programa da imagem acima como exemplo:

if(vetor==NULL){
    printf("não foi possível alocar memória");
}

Ou seja, se o ponteiro que recebe malloc retornar nulo, imprima uma mensagem de error pois o sistema operacional não conseguiu alocar memória.

Você deve estar se perguntando que função é aquela na linha 20. A função free() simplesmente libera a memória alocada, ou seja o bloco de memória apontado pelo ponteiro vetor do programa acima irá ficar disponível para o sistema operacional fazer o que quiser. Note que tudo que contém no bloco de memória desalocado não será preenchido com zero, ou seja, não será apagado. 

Para finalizar a aula de hoje, aprenderemos como utilizar a função realloc() . Como se percebe pelo nome, ela serve para realocar memória, ou seja, se utilizamos o ponteiro vetor da imagem acima para alocar memória e queremos mudar o tamanho dele, podemos utilizar essa função. Seu uso é semelhante ao malloc, confira um exemplo com base na imagem acima de como realocar memória:


Na linha 20 foi solicitado ao usuário para mudar o tamanho do vetor, sendo assim na linha 22 foi realocado memória com realloc(ponteiro, tamanho em byte);

>> Próxima aula, em breve.

12 julho 2018


Se você utiliza a versão mais recente do navegador Opera, para ativar suporte ao chromecast ou outro dispositivo que realiza casting é bastante simples. 

1- Acesse as configurações do navegador digitando na barra de pesquisa: opera://settings

2- No canto esquerdo da tela clique em "Navegador" 

3- Desça até "Interface de usuário"

4- Clique em "Habilitar suporte ao Chromecast" para habilitar a função.

5- Pronto agora acesse algum vídeo no Youtube, você então verá um ícone de casting (1), clique nele para reproduzir o vídeo na sua TV (2).



6- Enquanto reproduz o vídeo surgirá um ícone onde ficam as extensões do navegador (3), clique com o botão direito do mouse sobre ele e clique em "Sempre exibir o ícone".

7- Agora sempre que clicar no ícone com o botão esquerdo você poderá transmitir a aba atual do navegador para sua TV ou mesmo a área de trabalho do seu computador ou algum arquivo.
O interessante é que se você transmitir uma aba que está reproduzindo um vídeo, por exemplo aqueles sites de filmes piratas ou tv online, se você colocar este vídeo em tela cheia, ele vai ocupar toda a janela da aba (em vez de fica em tela cheia no computador) e ficará em tela cheia na sua TV.

05 julho 2018

 

Confira abaixo como corrigir o error da imagem acima quando você tenta imprimir e simplesmente não imprime, nem cancela ou exclui da fila de impressão.

O processo é bastante simples em máquina Windows.

1- Abra o cmd (prompt de comando) como administrador:

2- Digite o seguinte comando no cmd: net stop spooler

3- Agora inicie o spooler que você parou digitando: net start spooler

Após digitar o comando acima, sua impressora começará a imprimir o que está na fila de impressão. 

O status de cartucho de tinta vazio da imagem acima é porque minha tinta está pouca, mas foi possível imprimir mesmo assim. 

Sempre que surgir o erro da imagem do início deste artigo é só realizar o método apresentado acima.

03 julho 2018


O canal PolyMatter no YouTube fez um excelente vídeo explicando os sistemas de assinaturas mensais que não paramos de assinar para todo tipo de serviço. Você pode assistir ao vídeo legendado por nós abaixo, ou se preferir acompanhe a transcrição do conteúdo.


Se você assiste a filmes, ouve músicas ou possui um telefone, você provavelmente está familiarizado com assinaturas. Pelo menos, sua carteira está. Que, para as empresas, são ouro puro ou verde, eu acho.

Em vez de vender para você hoje, amanhã e na próxima semana, elas só precisam convencer você uma vez, e o dinheiro continua chegando. Um fluxo estável e previsível de receita. Porque cada cliente é tão valioso, elas podem se concentrar mais em mantê-los do que fazer qualquer coisa e tudo para conseguir mais.

Mas não é mais apenas jornais e revistas, agora é tudo:

Música, filmes, comida, jogos, armazenamento, roupas, navalhas, maquiagem, software, carros, ossos de animais? Sério - Bonebox ”inclui várias formas osteológicas espécimes como crânios, garras e dentes ” por apenas US $ 24,99 por mês Ooo-kay ?!

Por que toda empresa precisa ter uma assinatura? Onde isso acaba? Vamos dividir as inscrições em duas categorias.

Serviços, como Netflix, Prime, Lootcrate, e Spotify, meio que tem que ter assinaturas

Claro, você pode comprar músicas e filmes individualmente mas aqui você consegue tudo. 40 milhões de músicas na Apple Music vezes US $ 1,29 custaria cerca de US $ 51 milhões dólares - então sim.

Caixas de assinatura, que lhe enviam coisas novas no correio todos os meses, são serviços porque eles são mais sobre diversão e surpresa do que o material em si. E depois há produtos - coisas que poderiam ser vendido, mas aqui são alugados.

E é aí que as coisas ficam estranhas. Você não tem que ser um Googler mestre ou Binger, ou DuckDuckGoer, mas ignore esses sons estranhos, para encontrar um milhão e meio de pessoas criticando este modelo de negócio.

Mas na verdade não estão zangados por causa das assinaturas, ninguém está reclamando sobre Netflix ou Spotify, é realmente esta segunda
categoria - especialmente software.

Quando as empresas querem alcançar sua carteira todos os meses até você morrer pelo que poderia ser uma compra simples e única, parece muito com uma sequência ruim de um filme. E, às vezes, é totalmente.

Adobe mudou para uma taxa mensal precisamente para aumentar o lucro. Mas nem sempre é tão simples, mesmo quando parece desnecessária, as assinaturas podem ser bom para todos, incluindo você e eu.

As empresas geralmente não explicam por que, e quando o fazem é fácil ver como é apenas uma desculpa para ganhar mais dinheiro, mas há um
porque.

E já que meu foco está em tópicos complicados e controversos, para tentar explicar-los em muito pouco tempo - vamos explicar-lo ...

A ideia de um aluguel não é novidade, alugamos apartamentos e carros, e se você mora no Alasca, onde ainda existem 6 Blockbusters, filmes.

#AlguemAvisaOAlaskaSobreANetflix

Mas ninguém quer alugar, digamos, a lâmpada deles. Quando você não precisa, por que você alugaria? Possuir é mais simples e geralmente mais barato. Perder o que já possuímos é especialmente frustrante. Aplicativos como o Ulysses e o Autodesk podiam ser comprados, então um dia, você recebe um email: "Eu sei que você já comprou isso, mas se você quer continuar recebendo atualizações, agora custa US $ 5 por mês."

"Obrigado, tchau."

Ulysses foi absolutamente inundado com 1 estrela de review. Provavelmente algo mais real que já vi na Mac App Store. E cinquenta mil pessoas assinaram uma petição no Change.org contra a Adobe. Que, como sabemos, é muito eficaz ... em lotar a caixa de entrada do seu email

Mas aqui está o problema: a maneira como a maioria das pessoas pensam em software não é realista. Lembre-se da lâmpada? E se a cada ano você tem uma mensagem: "Ei, você precisa atualizar para uma nova versão da sua casa. Se você não fizer isso, será vulnerável a ladrões."

Às vezes acontece sem problemas, às vezes permanentemente muda suas tomadas de parede. Talvez para esses fofinhos da Dinamarca. E você pensa, que bosta! "Eu comprei essa lâmpada e agora de repente é incompatível com a minha casa por razões completamente fora do meu controle?"

A casa é o seu sistema operacional, a lâmpada, seu software. Programação pode parecer como construir uma vez - coletar lucro para sempre, mas se um aplicativo não for atualizado, ele morre.

A tecnologia simplesmente se move muito rápido. Sabendo disso, você realmente quer possuir aquela luminária? A posse real de software significa possuir todos os erros e futuras incompatibilidades.

Talvez sua resposta seja sim, chegaremos a isso mais tarde. Mas eu, se eu realmente depender de alguma coisa, e há uma chance de quebrar em um ano bem, eu prefiro alugá-lo de alguém que mantém isso.

Corrigindo bugs é como Sísifo empurrando sem parar sua pedra até a montanha só para ela cair de volta.

Você não pode esperar que os desenvolvedores façam isso para sempre só porque você deu 99 centavos a três anos atrás.

Você pode dizer "Obviamente, esses aplicativos não precisa de assinaturas porque eles funcionaram muito bem antes ”- mas a verdade é que eles precisam…

Grandes empresas sempre encontram uma maneira de ganhar lucro, Adobe tem o poder e proeminência pedir US $ 53 por mês e fazer bilhões fazendo isto. Mas muitos aplicativos, alguns dos melhores aplicativos, são feita por uma única pessoa, ou uma pequena equipe.

Eles competem com 2, 3 milhões de outros e um sentimento de que se você não pode segurar alguma coisa, não deveria custar nada. Então, a menos que você registre a palavra “Candy”, sério isso realmente aconteceu, ou gastar milhões em publicidade, suas vendas parecem
com: um pico enorme no começo, talvez alguns solavancos sazonais e, em seguida, quase nada.

Você pode ganhar metade do seu salário no primeiro dia, mas no dia 20 ou 50, as coisas não parecem tão boa. Então você tem algumas opções: Você pode conseguir mais clientes - Faça algum marketing, continue atualizando o aplicativo e cruze os dedos. Ou, mais precisamente, reze para os deuses da App Store. Às vezes isso pode funcionar.

Mas a App Store não é como o YouTube, fazendo tudo o que puder para levar o público aos seus vídeos, certo, YouTube?

Mesmo um ótimo aplicativo pode ficar preso em um canto e nunca ser encontrado. E, eventualmente, todos que precisam do seu aplicativo
já terá. Muitos clientes satisfeitos e sem mais renda para você ou: se as vendas são tão boas no começo, basta liberar o máximo de atualizações pagas possível. Mais uma vez, às vezes funciona.

Mas também pode ser uma armadilha perigosa, porque o incentivo é liberar tantas atualizações pagas você puder. Apenas novos recursos suficientes para fazer as pessoas pagarem mas não muitos que você não poderá fazer isso de novo em poucos meses.

E mais cedo ou mais tarde, será bom o suficiente para 99% de nós, mas ei, tenho que continuar fazendo dinheiro, então você vai continuar se espremendo em novas e desnecessárias novidades. Isso aconteceu com o Microsoft Office.

O que eu peço do Word é bem básico: quando Eu pressiono uma tecla no meu teclado, eu quero que a mesma letra apareça na minha tela. Ouviu, teclado MacBook Pro. E eu acho que fontes, tabelas e imagens são legais também. Mas eu tenho absolutamente zero necessidade por gráficos 3D, ou etiquetas inteligentes, ou ferramentas de pesquisa, ou um clipe de papel falante. Na verdade, eu quero isso de volta, Clippy.

O Office foi tão lucrativo que a Microsoft continuou adicionando e adicionando e adicionando, até que se esqueceu o que o Word é, você sabe, um lugar para escrever coisas. Nesse momento, eu apenas uso o Google Docs, onde eu realmente sei o que os botões fazem.

Para muitos aplicativos, nenhuma dessas opções é sustentável. E mesmo se você sentir zero simpatia pelos desenvolvedores, é de seu interesse encontrar uma solução: Porque se você confiar em um aplicativo, para o seu negócio, hobby, ou segurança, você quer incentivar seu desenvolvedor para se importar tanto quanto você.

Podemos dizer que as empresas devem atualizar seus aplicativos para sempre, e sempre responda a tickets de suporte, ou podemos projetar um sistema onde elas realmente querem fazer isso. Para muitos aplicativos, isso é uma assinatura. Pegam o que você teria pago adiantado e entrega com o tempo. Se os desenvolvedores quiserem continuar sendo pagos, eles precisam te manter feliz.

Com o tempo, as assinaturas custam mais, mas com isso, você tem garantias de atualizações e suporte e compatibilidade. Além disso, recompensa os aplicativos que você usa por mais tempo. Em algumas indústrias, esses melhores incentivos são ainda mais desesperadamente necessários: para as empresas de notícias, o objetivo é mais cliques, mais visualizações, mais anúncios, geralmente o pior tipo de anúncios.

O Clickbait só para se os cliques pararem de ser rentável, que é a promessa de assinaturas como Blendle e Inkl. Um preço para todos os artigos que você deseja ou, um pequeno micropagamento por artigo, reembolsado se for clickbait.

O objetivo não é mais enganar você, mas manter você inscrito. As inscrições dão sites como Above Avalon, Kottke, e Macstories liberdade para fazer conteúdo de qualidade em tópicos realmente específicos, em vez do que for preciso para atrair grandes audiências.

Ele também permite que você e eu experimente coisas, talvez você só precisa de um serviço ocasionalmente, nesse caso você pode se inscrever apenas quando você realmente precisa disso.

Mas por conta das pessoas pensar apenas em serviços como assinaturas, os produtos geralmente tentam argumentar que eles são na verdade um serviço. Algo como: "Nós armazenamos e sincronizamos seus dados, que nos custam dinheiro", ”Mas não muito". Tudo isso cria desconfiança.

Os desenvolvedores devem estar atentos: “o que você realmente está pagando é a longevidade, que é o melhor interesse de todos. ”. Mas há um porém…

Um ingresso de cinema é um mês inteiro na Netflix, e então economizando na pipoca, você pode ter uma conta durante toda sua vida.

Você pode ter um único álbum ou cada ruído já feito no planeta Terra pelo preço de algumas xícaras de café.

Mas quando tudo é o preço de um ou duas xícaras de café, você pode terminar rapidamente comprando o Starbucks inteiro.

Digamos que você assine o Netflix, Amazon Prime, Spotify, Dropbox e BlueApron. Isso é mais de cem dólares por mês. Adicione a Creative Cloud, o YouTube TV e o New York Times, e já temos outros cem. E isso é apenas o começo.

A Apple recebe 30% da receita de um aplicativo, mas para assinaturas de longo prazo, agora apenas 15. Então, mais e mais empresas vão usar.

Apenas para filmes, já existe o Netflix, Amazon, Hulu, HBO, Showtime e, em breve, Disney, e Apple.

Então, nem tudo pode ou deve ser uma assinatura. Coisas que você usa apenas ocasionalmente e não depende, não tem razão para assinatura, ou deveria pelo menos ter outra opção para pessoas que se enquadram nessa categoria.

O aplicativo Sketch encontra um bom equilíbrio - Um preço inicial, com um ano de atualizações. Você pode tratá-lo como uma assinatura ou não. Outra solução é Bundles - um preço para várias assinaturas. Setapp, por exemplo, faz isso com aplicativos mac.

E mais empresas seguirá: a Apple poderia ter um preço para a Apple Music, streaming de vídeo, armazenamento do iCloud, talvez mais algumas outras coisas.

Amazon Prime mostrou quão bem esta estratégia pode trabalhar.

Estudantes podem ter Spotify e Hulu juntos por menos do que eles separados. Ou que tal uma assinatura por ser um ótimo
estudante...

02 julho 2018

Este artigo faz parte do projeto #LTCode.

Na aula de hoje aprenderemos sobre estruturas, os famosos registros. Registros são um conjunto de dados logicamente relacionados mas de tipos diferentes. Por exemplo, os dados que representam uma pessoa pode incluir:

int idade; //guardar a idade atual da pessoa
char sexo; //guardar o sexo M ou F
char nome[100]; //guardar o nome
int ano_nascimento; //guardar o ano de nascimento

Como pode notar existem variáveis de tipos diferentes que estruturam um indivíduo. Com isso em mente, podemos fazer a definição de registros para formar essa estrutura única. A definição de registros utiliza a seguinte sintaxe:

struct nome_da_sua_estrutura{
    tipo nome_variavel;
    tipo nome_variavel2;
};

Você pode inserir quantas variáveis achar necessário dentro de um registro. Exemplo:

struct Conta{
    int numero;
    char cliente[100];
    char endereco[100];
    float saldo;
};

O registro acima se refere a uma estrutura de conta bancária. Com a definição pronta, é necessário fazer a declaração.

Você pode fazer a declaração separada da definição:
struct Conta conta1;

Ou juntamente com a definição do registro:
struct Conta{
    int numero;
    char cliente[100];
    char endereco[100];
    float saldo;
}conta1;

Nos dois exemplos acima conta1 é uma variável do tipo struct Conta. Mas como acessar então um membro dessa estrutura? Simples, utilizamos do operador . (ponto).

Seguindo o exemplo da struct Conta, para acessar o membro saldo escrevemos da seguinte forma: conta1.saldo

Confira o exemplo na prática abaixo:



Como pode observar na imagem acima, a definição da estrutura Conta foi feita fora da função principal e sua declaração dentro da função principal. Assim, conta1 é uma variável do tipo struct que possui membros (outras variáveis) como numero, cliente, endereco e saldo. Fácil de entender correto? Aquele getchar na linha 13 é apenas para corrigir um bug ao ler uma string após ler um inteiro, sem ele, no compilador que estou utilizando o fgets pega o enter dado pelo usuário após o usuário digitar o numero da conta.

Você deve estar se perguntando porque a estrutura foi definida fora da função principal. Isso deve ser feito pois se for declarada apenas dentro de uma função, apenas essa função conhecerá essa definição, assim definida fora de qualquer função, a estrutura pode ser utilizada em várias funções.

A declaração de estruturas pode ser feita de uma forma mais simples utilizando definição de tipos, ou seja o comando typedef. Com ele é possível declarar uma estrutura unicamente através de uma palavra. Exemplo:


Repare nas alterações feita nas linhas 2, 7 e 9.

Você pode utilizar o typedef para outras definições. Exemplos:
typedef double real; //define real como double
typedef unsigned char uchar; //define uchar como unsigned char

A passagem de registros para funções é simples, entre os parênteses coloca-se declaração da estrutura. Exemplo:
void imprime(struct Conta contax);
ou
void imprime(CONTA contax); //caso utilize typedef

Confira na imagem abaixo:

Note que na linha 26 foi declarado uma variáveis denominada conta2, logo após preencher o registro em conta1, na linha 29, o que tem contido em conta1 é copiado para conta2. Assim foi demonstrado que é possível realizar atribuições em registros.

A passagem de registros em funções talvez seja necessário ser feita como em ponteiros (aula 2.17), caso deseja fazer alterações no registro ou preencher um registro, isso foi feito na função preenche() da imagem acima, enquanto que na função imprime() a passagem do registro para a função foi feita por valor ou seja o que foi recebido foi uma cópia do registro.

Na linha 10 você deve ter notado a utilização de um operador diferente -> (sinal de menos seguido do sinal de maior), pois o operador . (ponto) possui maior precedência que o operador & e *, portanto para evitar erros de compilação utiliza-se o operador -> em determinadas situações como da imagem acima.

É possível criar registro dentro de registro, isso se denomina registros aninhados. Confira um exemplo, a estrutura abaixo representa um registro de data:

typedef struct DATA{
     int Dia;
     char Mes[10];
     int Ano;
} Data;

Logo em seguida definimos outra estrutura que representa um registro de pessoa:

typedef struct PESSOA{
     int idade;
     char telefone[12];
     Data nascimento;
} Pessoa;

Como pode notar acima, foi criado uma variável chamada nascimento do tipo Data, logo a variável nascimento armazenará os seguintes dados: Dia, Mes e Ano da estrutura DATA. Mas como acessar esses dados? Simples, supondo que tenha declarado na função principal da seguinte forma:

int main(){
     Pessoa Maria;

Para acessar as informações contida na variável nascimento basta fazer da seguinte forma por exemplo para imprimir:

printf("Nascimento: %d/%s\n",Maria.nascimento.Dia,Maria.nascimento.Mes);

No exemplo acima imprimirá o dia e mês de nascimento, caso deseja imprimir o ano utiliza-se: Maria.nascimento.Ano .

Para finalizar essa aula, vamos aprender como criar um vetor de registros. É bastante simples, confira o exemplo abaixo: 
O código acima realiza cadastro de 20 funcionários e depois exibe os funcionários cadastrados na tela. Como pode notar na linha 15 foi declarado um vetor de 20 posições (M vale 20 como informado na linha 4), caso não fosse utilizado typedef, sua declaração seria da seguinte forma: struct funcionario funcionario[M];

Para acessar uma posição de um vetor de registros, basta fazer como na linha 29 informando a posição que deseja acessar entre os colchetes [ ] antes do . (ponto).

Bom, essa aula foi longa! Aguarde pelos exercícios e qualquer dúvida comente abaixo.

>> Próxima aula, clique aqui.

29 junho 2018


Você deve conhecer bem as qualidades que o Wordpress apresenta, sendo uma das melhores plataformas para quem quer ter um site ou blog profissional.

No post de hoje vamos apresentar algumas dicas práticas para você aperfeiçoar o seu projeto web. Portanto, acesse o seu Wordpress login e mãos à obra!

O Wordpress é um software livre que possibilita uma série de alterações por parte do usuário, o tornando dinâmico para os mais variados propósitos. Graças a essa possibilidade de personalização, você pode montar uma loja virtual ou um blog pessoal.

Por isso, existem maneiras de tornar a sua experiência com um blog Wordpress mais dinâmica e rápida, facilitando ao máximo o seu trabalho na plataforma e deixar o seu site ou blog mais atrativos e interessantes.

Sendo assim, para melhorar cada vez mais as suas atividades no Wordpress, vale a pena dar uma olhada nas dicas a seguir.

1 – Plugins para melhorar a performance


A grande quantidade de plugins é uma das principais características da plataforma Wordpress. Os plugins consistem em softwares que possuem o intuito de ampliar as funcionalidades do seu site, melhorando a sua performance de maneira significativa.

Por isso, para obter boas práticas com o seu blog, conheça alguns plugins bem interessantes.

WooCommerce

Esse é um plugin fundamental caso você utilize o Wordpress como plataforma de e-commerce. O WooCommerce possibilita diferentes formas de pagamento, o que agrada e muito a experiência do cliente ao utilizar a sua loja virtual.

Ele também permite um gerenciamento completo do seu empreendimento, possibilitando que você trabalhe com uma gestão de catálogos, categorizando os seus produtos, bem como gerando relatórios sobre vendas.

Além disso, o WooCommerce é compatível com dispositivos móveis, o que é muito importante hoje em dia, em que os consumidores cada vez mais acessam sites e lojas por meio de tablets e smartphones.

Jetpack

É o plugin perfeito para quem quer obter um melhor tráfego e uma maior proteção para o seu blog.

Entre as funcionalidades desse plugin, vale salientar a segurança que ele proporciona e também a monitoração do tempo de atividade e inatividade do blog.

Outra interessante característica é que o Jetpack analisa também aspectos estatísticos do seu blog, disponibilizando uma visão geral do seu trabalho.

Broken Link Checker

Quem utiliza a plataforma Wordpress provavelmente já ouviu falar no incômodo Erro 404. Nesse caso, a utilização do Broken Link Checker tem o objetivo de encontrar esses links capazes de provocar esse tipo de erro.

Entre as suas funcionalidades também está a de impossibilitar que ferramentas de pesquisas sigam os links quebrados, bem como avisa você caso haja ocorrência de algum problema desse tipo.

2 – Maneiras para tornar a prática de postagens mais rápida


O Wordpress é uma plataforma que apresenta vários recursos, entre eles estão alguns macetes capazes de tornar o seu trabalho de postagem mais rápido. Nesse caso, as dicas são:

Alternar para o editor de HTML

Essa é uma dica que permite ter uma boa visualização da sua postagem. Para você conseguir alternar entre o editor e o HTML é só clicar no separador “text”.

Utilizar atalhos pelo teclado

Para efetuar postagens com mais rapidez, você tem a possibilidade de aproveitar alguns atalhos que permitem a você editar o seu texto em poucos minutos.

Os atalhos consistem em pressionar a tecla “Ctrl” mais alguma letra específica. Um exemplo disso é “Ctrl + a” para selecionar o texto por completo, bem como o “Ctrl + b” para utilizar o negrito em algum trecho do texto. Já o “control + k” serve para inserir um editor de link.

Aproveite a tela cheia

Esse recurso permite que você efetue as suas postagens visualizando apenas a área de escrita, sem necessariamente ver os elementos ao redor do editor de texto do Wordpress.

Com isso, você foca a sua atenção exclusivamente no seu texto. Para utilizar o modo tela cheia basta clicar na opção “tela cheia”.

3 – Hacks que podem ser usados na plataforma Wordpress


Diante de tantos recursos, o Wordpress conta com vários hacks (truques) que beneficiam a sua performance. Alguns desses hacks consistem em:

Apresentação de imagens aleatórias no cabeçalho

Para obter uma melhor diversidade no aspecto visual do seu blog, você pode substituir a imagem estática do cabeçalho por uma apresentação aleatória de imagens. Essa é uma opção que vai deixar o seu blog mais atrativo.

Link para excluir postagens

Caso você deseje eliminar alguma postagem, há a possibilidade de fazer isso utilizando um link de atalho. A maneira para realizar essa ação é criar essa função no arquivo de funções presentes no sistema.

Ajustar o tamanho da caixa de postagem

Na hora de efetuar uma postagem não é necessário a todo instante recorrer à barra de rolagem. Para isso, você pode ajustar o tamanho da caixa de postagem com o tamanho do artigo a ser escrito.

A realização desse procedimento é feita acessando o menu “configurações” e logo depois “leitura”. Depois é necessário ir até a área referente ao tamanho da caixa de postagem e indicar o tamanho adequado que você deseja.

Conclusão


O Wordpress é tão completo que, quando você menos espera, descobre esses recursos capazes de tornar o seu blog mais seguro, rápido e personalizado.

E você, conhece algum hack ou dica especial sobre o Wordpress? Compartilhe as suas dicas com a gente e aproveite também para compartilhar o post com a sua rede de contatos.

25 junho 2018

Este artigo faz parte do projeto #LTCode.

Nesta aula você aprenderá definitivamente o que são ponteiros e como utilizá-los. Vamos lá!

Ponteiros são variáveis que armazenam endereços. Você deve estar se perguntando "mas que endereço?", antes precisamos definir alguns conceitos básicos.

A memória do computador (memória RAM) é composta por uma sequência de bytes, em que cada byte é capaz de armazenar entre 1 e 256 possíveis valores. Sendo assim ao declarar uma variável, ela ocupará uma certa quantidade de bytes na memória.



A imagem acima ilustra quantos bytes cada tipo de variável ocupa, acesse a Aula 2.2 caso queira saber mais como obter essas informações.

Como os bytes da memória são numerados sequencialmente, cada um desses bytes ocupa uma posição identificada por um número único variando de 0 à totalidade de bytes da memória RAM do seu computador. Este número único recebe o nome de endereço, assim cada objeto colocado na memória terá um endereço.

O endereço em  C é dado pelo operador &, por isso ao ler uma variável com scanf você utiliza do &. Exemplo:

scanf("%d",&b);

Assim você avisa ao compilador que você quer colocar o valor digitado pelo usuário no endereço da variável b.

Suponha que você precisa guardar o endereço da variável b, como fazer isso? Bem simples.. utilize ponteiros! A sintaxe de declaração de ponteiro é a seguinte:

tipo *p

Onde 'p' é o nome da sua variável ponteiro, ou seja, pode utilizar outros nomes.

Confira a imagem abaixo:



Como pode observar, a variável 'a' armazenou o endereço de 'b' e portanto ao usar o símbolo *a (lê-se apontado por 'a') é exibido o que temos em 'b'. Na imagem acima os endereços foram impresso como inteiro, mas você pode utilizar do %p no lugar do %d para imprimir em formato de endereço.

Pode ser que exista situações em que você precisa declarar um ponteiro e você não quer que ele aponte para lugar nenhum, para isso basta colocá-lo apontando para NULL.

Exemplo: int *a = NULL;

Você pode utilizar ponteiro em funções para manipular valores contidos em certos endereços na memória. Exemplo:


Como ilustra a imagem acima, foi possível trocar os valores entre a e b em uma função, note que a função não recebe os valores de 'a' e 'b', mas sim o endereço das duas variáveis permitindo assim manipular seus valores. Note que na função troca() foi criado 2 ponteiros para receber o endereço de a e b da função principal main().

Agora vamos compreender a relação entre ponteiros e vetores, para isso espero que tenha acompanhado a Aula 2.10 ou que já saiba vetores. Portando já deve saber que o nome de um vetor corresponde a posição do primeiro elemento desse vetor, logo o nome desse vetor é nada mais que o endereço do primeiro elemento do vetor.

Existem duas formas de criar um ponteiro apontando para o primeiro elemento de um vetor, sendo p um ponteiro: int *p;
Podemos apontar assim: p = &vetor[0];
ou assim: p = vetor;

O nome de um vetor apontará eternamente para o primeiro elemento desse vetor, mas um ponteiro como o ponteiro 'p' do exemplo acima, pode apontar para qualquer posição desse vetor. Exemplo:
p = &vetor[2];

Tendo isso em mente, você conseguirá fazer operações aritmética com ponteiros. Como o que ponteiros armazenam é posições da memória, se você fazer operações de incremento ou decremento com ponteiros, na verdade você está avançando ou retrocedendo posições da memória.

Suponha um ponteiro "p" para inteiro que está apontando para a posição 121145768, se você realizar operação de incremento .. "p+1" significa que este ponteiro, em um computador em que a arquitetura determina que um inteiro seja 2 bytes, avançará dois bytes ou seja se pedir para imprimir o que p+1 está apontando, ele irá retornar o que tem na posição 121145770 da memória.

Também é possível saber quantos elementos existem entre dois ponteiros utilizando da operação de diferença. Assim, por exemplo, o comprimento de um string fazendo a posição do '\0' de uma string menos o ponteiro, mas fique atento que isso só é possível entre ponteiros do mesmo tipo, no exemplo ponteiros do tipo char.

Você sabia que é possível criar um ponteiro que aponte para um ponteiro? Exemplo: 
int x; //uma variável que receber um inteiro qualquer
int * ptr_x; //um ponteiro para armazenar o endereço da variável x
int ** ptr_ptr_x; //um ponteiro que armazenar o endereço do ponteiro de x

Confuso né?  Confira como fica na imagem do programa abaixo: 


Como podem observar, foi impresso o conteúdo e endereço de x apontado pelos ponteiros.

Espero que tenha compreendido ponteiros, nos vemos na próxima aula!


>> Próxima aula, clique aqui.

21 junho 2018

O popular site indexador de arquivos .torrent da Coréia se encontra com domínio "confiscado", não se sabe ao certo o motivo, mas muitas variações de seu domínio foram adquiridos por um outro site para vincular propaganda, assim o torrentkim se encontra sem retorno oficial.

Portanto se você busca uma alternativa com interface semelhante e diversidade em conteúdo, existe o site tcorea.com onde você consegue encontrar magnetlink para baixar seus doramas favoritos.


Atualizado 02/07/18:

O site tcorea também caiu, listamos abaixo algumas alternativas:

10 junho 2018


No vídeo abaixo é demonstrado como tornar seu apk malicioso persistente depois de instalado no Android da vítima.

O método apresentado no vídeo abaixo é para aparelhos que POSSUEM ROOT.
*Se não sabe como criar apk malicioso, você tem duas opções:
  1. Como criar apk malicioso e assinar: https://www.youtube.com/watch?v=wgHjc_gLXfo (apk para rede local)
  2. Como criar apk malicioso para ataques externos: https://www.youtube.com/watch?v=cZG1KNoK1_I (explicação detalhada)

Script:
Se o script não carregar abaixo, clique aqui.

Como explicado em vídeo, depois de feito o upload do script, adquirido privilégio de super usuário (root), ter movido o mesmo para /etc/init.d e executado, você conseguirá sempre se reconectar com o backdoor ao aparelho da vítima mesmo se ela reiniciar o sistema ou utilizar de algum task killer.

*Este script funciona apenas com o apk gerado pelo msfvenom.
*Não copie, escreva o script na mão para evitar problemas no ctrl+c ctrl+v.
*O script está escrito em 5 linhas, nem mais e nem menos que isso.
*No vídeo foi demonstrado o ataque em rede local, para rede externa utilize de um IP estático ou confira os dois vídeos abaixo clicando no texto:


PARTE 1 - sem root, clique aqui.

Fonte: https://null-byte.wonderhowto.com/how-to/create-persistent-back-door-android-using-kali-linux-0161280/

05 junho 2018


No vídeo abaixo é demonstrado como tornar seu apk malicioso persistente depois de instalado no Android da vítima.

O método apresentado no vídeo abaixo é para aparelhos que NÃO TEM ROOT.
*Se não sabe como criar apk malicioso, você tem duas opções:

  1. Como criar apk malicioso e assinar: https://www.youtube.com/watch?v=wgHjc_gLXfo (apk para rede local)
  2. Como criar apk malicioso para ataques externos: https://www.youtube.com/watch?v=cZG1KNoK1_I (explicação detalhada)

Script:
Se o script não carregar abaixo, clique aqui.

Como explicado em vídeo, depois de feito o upload do script e executado o mesmo, você conseguirá sempre se reconectar com o backdoor ao aparelho da vítima desde que ela não reinicie o sistema ou utilize de algum task killer para finalizar o backdoor.

*Este script funciona apenas com o apk gerado pelo msfvenom.
*Não copie, escreva o script na mão para evitar problemas no ctrl+c ctrl+v.
*O script está escrito em 5 linhas, nem mais e nem menos que isso.
*No vídeo foi demonstrado o ataque em rede local, para rede externa utilize de um IP estático ou confira os dois vídeos abaixo clicando no texto:


PARTE 2 - com root, clique aqui.

Fonte: https://null-byte.wonderhowto.com/how-to/create-persistent-back-door-android-using-kali-linux-0161280/








Please Donate To Bitcoin Address: [[address]]





Donation of [[value]] BTC Received. Thank You.


[[error]]