thegoodfellas/blogset-br huggingface dataset:
forma, um cast e usado.Nesse ponto, nos temos apenas que passar para o buffer out o conteudo lido. Nos lemos, assim, count bytes do arquivo usando o metodo read da classe ifstream e salvamosseu conteudo dentro do buffer.Uma coisa importante para saber e que o objeto ifs aponta para ifile, criado anteriormente. E que o metodo read ira ler e setar a posicao lida no objeto ifstream. Assim,na proxima leitura, ele continua a leitura de onde parou, e assim por diante ate o fim do arquivo.No proximo passo, dentro do metodo load, nos comunicamos a libpng que a assinatura do arquivo PNG ja foi lida. Para isso usamos a funcao:png_set_sig_bytes( png_ptr, 8 );Esta funcao ira setar o membro sig_bytes de png_ptr para 8. E e como a png sabe que oito bytes ja foram lidos.E hora de ler as informacoes da imagem. E este e um trabalho para a funcao png_read_info.png_read_info( png_ptr, info_ptr );Nada de especial, mas, como dito anteriormente, o conteudo lido estara dentro da estrutura info_ptr.Nos vamos obter algumas informacoes do arquivo. E essa informacao esta dentro do chunk IHDR. Entao chamamos:png_get_IHDR( png_ptr, info_ptr, (png_uint_32*)&width, (png_uint_32*)&height, &depth, &color_type, 0, 0, 0 );O membro IHDR e um membro de info_ptr, entao nos passamos primeiro o ponteiro para png_struct, depois o ponteiro para info_struct. Todos os outrosargumentos sao para obtermos as informacoes desejadas. Precisamos apenas da largura da imagem, altura, profundidade de cores e o tipo de cor para amaioria dos trabalhos em imagem (Criar uma textura com OpenGL ou desenhar a imagem com alguma API grafica com suporte a leitura a partir da memoria,por exemplo).Agora precisamos obter o numero de bytes de cada linha na matriz de dados da imagem.png_size_t cols = png_get_rowbytes(png_ptr, info_ptr);O numero retornado ira depender dos canais de cores que a imagem possui. Por exemplo, se sua imagem possui 512 pixels de largura e quatro canaisde cores (RGBA), o numero de bytes por linha sera 512 * 4 = 2048 bytes.Com essa informacao nos podemos alocar memoria para os dados da imagem. Mas antes, nos criamos uma lista de ponteiros para bytes com tamanho de height.png_bytepp row_pp = new png_bytep[height];O png_bytep e o mesmo que png_byte* e png_bytepp e o mesmo que png_byte**.Entao, nos alocamos o espaco em que estarao os dados da imagem.data = new char[ cols * height ];Dessa vez nos iremos setar os ponteiros de row_pp de cada linha para setar para uma localizacao no atributo data. Uma vez que os dados da libpng vem de uma matriz,e necessario converter os ponteiros da forma bidimensional para a forma unidimensional.for( int i = 0; i < height; ++i ){ row_pp[height - i - 1] = (png_bytep)&data[ i * cols ];}O que e feito nesse laco e ir em cada linha, na ordem reversa, e apontar para o endereco correspondente no array data. O cast e usado porque libpng precisa deuma matriz de png_byte para por os dados dentro e eu preciso de um array de chars. Por alguma razao a libpng retorna os dados da imagem com as linhas na ordeminversa, entao row_pp e mapeado na
ordem inversa o que faz com que ele fique da forma correta no final.Veja a imagem:Finalmente, nos podemos obter os dados da imagem e armazena-las dentro do atributo data atraves de row_pp:png_read_image( png_ptr, row_pp );A funcao png_read_end, chamada apos png_read_image, ira apenas ler os dados remanescentes no arquivo.Apos todos esses passos nos temos os dados da imagem. E o atributo data agora tem o conteudo da imagem.E hora de limpar tudo que nao precisamos mais. Primeiro, nos limpamos png_ptr e info_ptr:png_destroy_read_struct( &png_ptr, &info_ptr, 0 );O terceiro argumento e para informacao do final do arquivo, como nos nao a usamos, simplesmente passamos 0 ou nulo pra funcao.A proxima coisa a limpar e row_pp, uma vez que nao vamos mais precisar dele. Note que row_pp e apenas um array de ponteiros usados para apontar para asposicoes do atributo data.delete[] row_pp;
This project was developed by me and Jose Adolfo during the course of Introduction to Programming 2014.2 at Univasf. It is a code in NXC (Not Exactly C) in the environment Bricx and this code was suposed to make the Lego NXT 2.0 robot follow a bicolor line: blue and green, with the main target being to find the yellow color.The robot had to be in an area demarcated with red, starting from any position inside that region. The trick was that it was not necessary to follow the bicolor line, being only necessary to find the yellow color at the end and then to play a predefined or custom music. However, to find the yellow color is easier following the line, since that color is in the end of that line.Test videos:Test 1Test 2And the code is bellow:#define P_TS IN_1#define P_CS IN_2#define BLACK INPUT_BLACKCOLOR#define BLUE INPUT_BLUECOLOR#define GREEN INPUT_GREENCOLOR#define YELLOW INPUT_YELLOWCOLOR#define RED INPUT_REDCOLOR#define WHITE INPUT_WHITECOLOR#define LIMIT 4#define DIV 4enum STAGES { BEGIN = 0, FOLLOW, END };void turnLeftMotC char vel ) { OnFwd( OUT_A, vel ); OnRev( OUT_C, 30 );}void turnRightMotA char vel ) { OnFwd( OUT_C, vel ); OnRev( OUT_A, 30 );}task main() { int prevColor = BLACK; char stage = 0, mytimer; SetSensorTouch( P_TS ); SetSensorColorFull( P_CS ); until(Sensor(P_TS) != 0); while(1) { if( Sensor(P_CS) == RED ) { mytimer = 1; while(Sensor(P_CS) == RED && mytimer > 0 && mytimer < 10) { OnRev(OUT_AC, 80); Wait(300); mytimer = 1; } mytimer = 0; if(Sensor(P_CS) == WHITE) mytimer = 1; while(Sensor(P_CS) == WHITE && mytimer > 0 && mytimer < 100) { OnFwd(OUT_C, 70); OnRev(OUT_A, 70); Wait(10); mytimer = 1; } mytimer = 0; }else if( Sensor(P_CS) == YELLOW ) { stage = END; } if( stage == BEGIN ) { int cor = Sensor(P_CS); if( cor == GREEN || cor == BLUE ) { prevColor = cor; while( cor == prevColor ) { OnFwd(OUT_AC, 100); cor = Sensor(P_CS); } if( Sensor(P_CS) == WHITE ) { if( prevColor == GREEN ) { turnRightMotA100); while(Sensor(P_CS) == GREEN || Sensor(P_CS) == WHITE ); } else if( prevColor == BLUE ) { turnLeftMotC100); while(Sensor(P_CS) == BLUE || Sensor(P_CS) == WHITE ); } } stage = FOLLOW; }else { OnFwd(OUT_AC, 100); } }else if( stage == FOLLOW ) { int turnVel = 0, cmp = 0, motorE = OUT_C, motorD = OUT_A; char flag = 0; cmp = Sensor(P_CS); while( cmp == BLUE || cmp == GREEN ) { if( !flag ) { Wait(100); flag = 1; } OnFwd(OUT_AC, 100); prevColor = cmp; cmp = Sensor(P_CS); } if( cmp == WHITE && prevColor == GREEN ) { motorE = OUT_A; motorD = OUT_C; } turnVel = 75 230 * (LIMIT - cmp) / DIV; if( turnVel > 100 ) turnVel = 100; if( turnVel < -100 )turnVel = -100; if( cmp == YELLOW ) turnVel = 0; if( turnVel < 0 ) { OnRev(motorE, -turnVel); } else { OnFwd(motorE, turnVel); } turnVel = 75 - 230 * (LIMIT - cmp) / DIV; if( cmp == YELLOW ) turnVel = 0; if( turnVel > 100
) turnVel = 100; if( turnVel < -100 ) turnVel = -100; if( turnVel < 0 ) { OnRev(motorD, -turnVel); } else { OnFwd(motorD, turnVel); } }else if( stage == END ) { Off(OUT_AC); PlayTone( TONE_G6, 280); Wait(240); PlayTone( TONE_G6, 280); Wait(240); PlayTone( TONE_G6, 330); Wait(240); PlayTone( TONE_D7, 360); Wait(260); PlayTone( TONE_C7, 320); Wait(250); PlayTone( TONE_D7, 740); Wait(760); StopAllTasks(); } }}The Bricx is a control center that have tools and one IDE. But it works only on Windows. If you use Linux or Mac you can use the NBC compiler, no IDE with it.
Just after return to the game code development, I came across an annoying situation. I had no idea on how to organize the code for better use of the libraries and object oriented Programming paradigm. This is the ideal situation to make a stop for a bit, to plan, to model the classes and to organize them all, to analise the main characteristcs and how to integrate all this.But, that is not enough. It's needed a good knowledge of OOP techniques, game design and experience! And, as I dont have all this, its time to research for references.From this research I found an excelent ebook about patterns or techniques on OOP for games and the book have more or less the same title: Game Programming Patterns. The book brings a very good didactic, it's well structured and brings good examples that help on the understandment.Well, thats it. There is a tip to anyone, that, as me, find himself lost or, yet, wants to have a good reference book. The ebook is free of charge to be read online at the link: Read for free, but it also have PDF and other payed ebook format. Depois de mais um bom tempo inativo, volto a publicar noblog. Dessa vez com uma nova perspectiva, a de finalizar (na verdade comecar dozero) um projeto de jogo que fiz ha um tempo atras. A ideia e refazer todo ocodigo, dessa vez em linguagem Haxe com OpenFL, reaproveitando apenas ossprites e os efeitos sonoros da primeira tentativa. Adianto, entretanto, que otempo que disponho e muito escasso e que, por essa razao, isso ira demandar umbom tempo. Ainda assim, pretendo postar o progresso no blog.O projeto e um clone de BomberMan que chamei de RoBomber umavez que os personagens sao robos.Uma coisa que talvez seja feita e modificar o design e osefeitos sonoros do jogo. Claro, isso se conseguir completar o projeto xDAmanha mesmo pretendo postar umas screenshots do progressoatual: apenas estudando a linguagem e bibliotecas. I made this tutorial because saw that there is none or little documentationabout the use of libpng on newer versions. Since there are some great changesin the libpng code, a lot of information may be invalid right now.Well, first of all, you need to download it, compile and get libpng ready for use. I willnot cover those step in this tutorial.With everything in place, open your favorite editor and create a header file:PngLoader.h:#ifndef __PNGLOADER_H__#define __PNGLOADER_H__#include <string>#include <png.h>class PngLoader{public: PngLoader(); ~PngLoader(); bool load( std::string file ); const char *getData() const { return data; } int getWidth() const { return width; } int getHeight() const { return height; } int getDepth() const { return depth; } int getColorType() const { return color_type; }private: void release(); char *data; int width; int height; int depth; int color_type;};#endifThat is a simple class that will only grant access to read data from memory. You can,of course, make the changes you want to change the data, for example (if you have the knowledge for this).Note that there are some other information you can get through libpng about your png image.
the size for the png signature.Since the image file is ready to be read, it's allocated the png_ptr structure through the function png_create_read_struct.After this, its allocated the info_ptr structure with png_create_info_struct. If everything is ok it's time for the next step.Now we tell to libpng that we have one function callback for the image reading. This way you can read the image as you want. On this tutorial wewill be using the ifstream class from the C++ STL. So we also pass a pointer for the object. And the finalfunction call is:png_set_read_fn( png_ptr, (void*)ifile, readFileCallback );Where png_ptr is our png decode pointer; ifile is the ifstream reader object and readFileCallback is the function that will read every singleportion or chunk of the image file.To better understanding of this function, let's see it in details.void readFileCallback( png_structp png_ptr, png_bytep out, png_size_t count ){ png_voidp io_ptr = png_get_io_ptr( png_ptr ); if( io_ptr == 0 ) { return; } std::ifstream &ifs = *(std::ifstream*)io_ptr; ifs.read( (char*)out, count );}The function need to have the exact above signature. It accept three arguments. The first one is png_struct pointer, png_ptr. The png_byte pointer, out, is the pointerto the read content inside the function. And the number of bytes to read is given by count argument of png_size_t type.The first thing to do is to retrieve the pointer to our ifstream object. So we use the png_get_io_ptr, to get the io_ptr member of the png_ptr structure.After verify if the pointer is set, it's created a ifstream object that points to io_ptr. So a cast is used.At this point we only need to give to the out buffer the read content. So we read count bytes from the file using the read method of the ifstreamclass and save the content into the out buffer.One important thing to know here is that the ifstream object ifs points to the ifile object set before. And the read method will read and set the read positionon the ifstream object. So, on the next reading, it continue at the point it stopped before, and so on until the end of the file.On the next step, into the load method, we need to tell libpng that the png signature has been already read. So the following function is called:png_set_sig_bytes( png_ptr, 8 );This function set the png_ptr sig_bytes member to 8. And it's how png knows that eight bytes has been read.It is time to read the image information. And this is a job for the png_read_info function.png_read_info( png_ptr, info_ptr );Nothing special, but as said before, the read content will be into the info_ptr struct.We get some information from the file. And the information we need is into the IHDR chunk. So we call:png_get_IHDR( png_ptr, info_ptr, (png_uint_32*)&width, (png_uint_32*)&height, &depth, &color_type, 0, 0, 0 );IHDR is a member of the info_ptr structure, so we pass first the png_sctruct pointer, then the info_struct pointer. All the others argumentsare for the wanted information. We only need the image width, height, depth and color type for the most image jobs (Create a OpenGL textureor draw it with some graphical API that
support reading of image from memory, for example).Now, we need to get the number of bytes that is on each row of the image data.png_size_t cols = png_get_rowbytes(png_ptr, info_ptr);The number of bytes returned will depend on the channels of colors your image have. So, for example,if your image have 512 of width and four channels (RGBA) the number of bytes per row will be 512 * 4 = 2048 bytes.With this information we can allocate memory for the image data. But first, we create an array of byte pointers with height rows.png_bytepp row_pp = new png_bytep[height];The png_bytep is the same as png_byte* and png_bytepp is the same as png_byte**.Then, we allocate the space in which our image data will be in.data = new char[ cols * height ];This time we will set the row_pp pointers of each line to point to a location on the data attribute. Since the data from libpng come in a matrix form, it'sneeded to convert the pointers from bidimensional to unidimensional.for( int i = 0; i < height; ++i ){ row_pp[height - i - 1] = (png_bytep)&data[ i * cols ];}What is done on this loop is go into each row, reverse order, and point to the corresponding adress position on the data array. The cast is used becauselibpng need png_byte type do read the data and I need a char array. For some reason libpng returns an image data with the rows on the reversed order,so row_pp is mapped on reverse order what make it be on the right way.See on the image:Finally, we can get the image data from the png file and store it into the data attribute array through row_pp:png_read_image( png_ptr, row_pp );The png_read_end function, called after png_read_image, will only read the remainder data on the file.After all this steps we already have the image data. And the data attribute have the image data content.It's the cleanup time. First, we clean the png_ptr and info_ptr structures:png_destroy_read_struct( &png_ptr, &info_ptr, 0 );The third argument is for info at the end of the file, as we did not used it, we keep it null at the function call.The next thing to cleanup is row_pp, since I will not need it anymore. Note that row_pp is only an array of pointers used to point to the data attribute positions.delete[] row_pp;
Depois de retornar ao desenvolvimento do codigo do jogo, me deparei com uma situacao chata. Nao tinha ideia de como organizar o codigo de maneira a aproveitar bem as bibliotecas que disponho, junto ao paradigma orientacao a objetos. Essa e a situacao ideal para parar um pouco, planejar, esbocar e organizar as classes envolvidas, analisar quais sao as caracteristicas principais e de que forma integrar tudo isso.Mas, isso nao e suficiente. E preciso um bom conhecimento de tecnicas de Orientacao a Objetos, game design e experiencia! Como nao disponho de tudo isso, chegou a hora de pesquisar por referencias no assunto.Nessa pesquisa encontrei um excelente ebook sobre padroes ou tecnicas de Programacao Orientada a Objetos par Jogos e o livro recebe mais ou menos esse titulo, em ingles: Game Programming Patterns. O livro traz uma otima didatica, bem estruturado e exemplos que ajudam muito no entendimento do assunto.Bom, e isso. Fica a dica para quem se encontrar perdido como eu ou mesmo desejar ter um bom livro de referencia. O livro e gratuito se visto online no endereco do link: Ler gratuitamente online, mas conta tambem com versoes em PDF e formatos de ebook pagos. Nesse topico vou falar sobre o andamento do desenvolvimento do clone de Pac Man para haXe e NME, assim como mencionei anteriormente.Durante o inicio do projeto, comecei usando a NME 3.1 (atualmente esta na versao 3.2), e por isso ja de cara nao podia usar Tilesheets e gerar o jogo em flash ou Html 5. Assim fui desenvolvendo pra gerar apenas codigo nativo enquanto esperava a atualizacao da NME pra entao gerar pra flash e Html 5.Ate ai nao tive muitos problemas e cheguei a uma boa parte do jogo concluida. Com o mapa, pac man, fantasmas, a comida (os pequenos pontos) e a energia (pro pac man poder "comer" os fantasmas) todos implementados com a excecao de os fantasmas ainda nao poderem ser "comidos". O problema surgiu logo depois que comecei a usar a nova versao da NME em que a classe Tilesheet ja estava implementada. Contudo, ainda nao era possivel gerar o jogo para Html5 com o mesmo visual que nos outros alvos (executavel nativo e flash). Isso porque o Tilesheet tem outro comportamento quando traduzida pela biblioteca Jeash para o Javascript do Html5. Onde ao inves de desenhar varios tiles em uma canvas, desenhava um apenas. Com isso tive que parar o desenvolvimento do jogo para encontrar uma forma de fazer o mesmo efeito.Dei uma procurada no google pra ver se ja nao existia uma implementacao de Tilemaps para haxe que e o que resolveria o problema (google nesses termos: Tilesheet e Tilemaps), porem nao encontrei nada que resolvesse. Isso me fez ter que implementar pessoalmente. O problema foi ter que entender como a Jeash fazia a traducao do codigo haXe em Javascript e descobrir dai como implementar.A ideia de tilemaps e simples. Uma regiao ou area que deve ser preenchida com tiles, como e feito em alguns jogos como o Mario, por exemplo. Isso em Javascript + canvas do Html5 ou qualquer outra
API grafica que eu conheca e feito por uma operacao blit ou no drawImage no Html5. Com o drawImage e possivel desenhar uma parte de uma imagem (fonte) dentro de uma area em uma posicao interna de uma imagem destino. A imagem abaixo ajuda a entender.fonte: W3CNa imagem abaixo o resultado desejado.Mapa do jogo como deve ser desenhado.Na proxima imagem o tilesheet usado para isso.Tilesheet com os sprites de cada tile.Dessa forma, cada pequeno quadrado de 32x32 pixels da imagem do tilesheet vai ser desenhado em uma posicao da area de desenho do mapa (um objeto canvas na pagina). Pra isso ele precisa ser mapeado.Enfim, eu fiz uma classe chamada Tilemap e essa classe aproveita o codigo da NME para desenhar o tilemap nos alvos de executavel nativo e flash e implementa a parte que desenha o tilemap para ser visto em Html 5.De tudo isso pude tirar uma importante licao. Mesmo sabendo que a linguagem haXe e suas bibliotecas sao muito novas, elas ainda deixam a desejar em codigo para coisas um pouco avancadas (Tilemaps nao sao nada tao avancados). Entretanto, pela sua proposta de ser multiplataforma e de com um unico codigo criar projetos para as mais diversas plataformas, incluindo Android, iOs e webOs, podemos imaginar o trabalho e tempo que consome dos desenvolvedores. Isso, no entanto, nao impede de, com um pouquinho de esforco conseguir fazer um jogo que no final roda em Windows, Linux, Mac, flash e Html 5, Android, iOS e webOs.Nao falei dos mobiles por que nao pude testar pessoalmente num dispositivo real. No emulador do Android tudo roda muito lento, dai nao da pra dizer se realmente vale a pena. Porem, assim que eu terminar vou deixar o codigo disponivel pra quem quiser testar.
Entao... retirei esse video do blog Desce dai, doido!achei ele muito bom, como todo o grande filme tem sua parodia, eis a parodia de Dosage.Espero que gostem Ola..Estive na correria e so consegui atualizar aqui agora...Participei do campeonato Brasileiro que aconteceu dia 27 de novembro la na Rokas.Novamente nao me sai muito bem. acabei ficando em 11 . Valeu a experiencia, primeiro Brasileiro que participo. Confesso que achei que me sairia muito melhor... hehehehe, mas a galera estava muito forte e ultimamente a minha rotina nao esta muito para os treinos e sim para o trabalho...Segue a classificacao do campeonato brasileiro entao:Ja que estava em Minas, aproveitei para escalar em rocha. Ai que minha mare mudou, fui a um setor novo, Lapa do Seu Antao. Aqueci em um 5 grau muito massa e depois fui a Menina de Ouro-8a, pena que entrei quando o sol estava bem em cima da via, ai quando olhava para cima nao conseguia ver nada.... haha e o braco foi minando, e foi minando ate que pedi beta para o Fred Viana, o qual me apresentou o pico, mas no desespero acabei errando a agarra e caindo. Isolei os lances da via e mandei de segunda.Logo depois fui dar segue para o Fred em outra via linda, As de Espadas-8c e fiquei tentado a entrar nela. Deixei o Fred entrar primeiro e fiquei vendo os lances.. hhahaha ai estudei ela certinho e entrei. Nao me encaixei no crux. Ai a namorada do Belisario me deu o beta dela e fiz o crux muito tranquilo, mas cai no final dele por causa da agarra molhadassa...no segundo pega mandei tranquilo e depois tivemos que ir embora. O aviao estava para sair e tivemos que correr.Segue algumas fotos da As de Espadas. E amigos...desde crianca essa figura da escalada esportiva vem dando show.Espero conhece-lo em breve...curtam o video.... Algumas comprinhas... hehehe /\Indo para Massone.../\Riva del Garda ao fundo, foto tirada da estrada... /\Tomando uma bira... haha /\ Segue o e-mail repassado pelo Jonas.Vamos respeitar galera, para futuramente nao termos mais um point fechado!!!Atencao pessoal!!! Aviso IMPORTANTE!!!!!!!!Venho comunicar pra galera que apartir de agora e necessario avisar(com antecedencia) aos proprietarios das terras quando forem escalar na Casa de Pedra (acampar ou passar o dia).Conversamos com os proprietarios no ultimo feriadao e eles pediram para nos repassar este aviso a comunidade de escaladores.Assim, quando forem pras bandas da Casa de Pedra AVISAR POR E-MAIL para os seguintes enderecos:semensul@alternet.com.brmedvetmi@alternet.com.brREPASSEM ESTA INFORMACAO PARA TODOS ESCALADORES QUE VC PUDER!!!!Abraco e boas escaladas!!!!!!!Gabriel T Netto Ola de novo, hoje venho trazer um trailer de um mega flme, com uma mega historia. Alguns anos atras li o relato de um americano que havia ficado 172 hrs preso. Eis o trailer do filme.Estava dando uma conferida no site da Desnivel, e vi o filme. Segundo o site, eles vao fazer as criticas do filme, uma vez que na escalada o cinema exagera um pouco.... Nada mais justo, de Cesar o que e de Cesar, esper que gostem do trailer... Ola pessoal!Faz tempo que nao posto nada aqui...bom... segue