Profile

Cover photo
Yuri Albuquerque
Works at Fundação Paulo Feitoza
Attends Universidade Federal do Amazonas
Lives in Manaus
345 followers|63,532 views
AboutPostsPhotosYouTube

Stream

Yuri Albuquerque

Shared publicly  - 
2
1
Emerson Leandro de Sousa Monteiro's profile photoJúlia Farias's profile photo
 
Yuri postando nossas intimidades pra todo mundo ver.
 ·  Translate
Add a comment...
 
When will it be possible to change KDE's wallpaper through DBus? That's one killer feature that I miss A LOT in it.
1
Elias Probst's profile photoDavid Wright's profile photo
2 comments
 
I did see a script somewhere that basically just kept on overwriting a particular jpeg with new images and kept the file name the same, and you just assigned that jpeg as the wallpaper. Didn't try it out, but the theory seems sound.
Add a comment...

Yuri Albuquerque

commented on a post on Blogger.
Shared publicly  - 
 
C++11 is far from being as safe as Rust, and I doubt it ever will. Rust's typesystem, INCLUDING its linear types, make writing safe code a lot easier than any version of C++ that will ever exist.

I don't wish to imply that Rust is better than C++ or vice-versa, but that Rust is far from pointless: it provides things that the former will not be able to do.
2
Add a comment...
 
Projectile is awesome. If you haven't tried it, do try. It makes project management a breeze.
10
Uwe Scholz's profile photobin chen's profile photoYuri Albuquerque's profile photoBozhidar Batsov's profile photo
5 comments
 
I like it too
Add a comment...
 
Hello. With the new Android 4.3 and the Google Keep, I noticed that Google Now can send the "note to self" voice command for either GMail or Google Keep.

Obviously, this must be done with intents, somehow. So, my question is: anybody knows how to capture this intent? I already have a note management app (which is open source), and I'd like to implement support for this feature.
3
Logan Graham's profile photoYuri Albuquerque's profile photoDaniel Osborne's profile photoPeter Fox's profile photo
11 comments
 
+Daniel Osborne that's useful, thanks. 
Add a comment...
Have him in circles
345 people
Diego Coronel's profile photo
Thomas Rohde's profile photo
Gilnei Schaeffer's profile photo
Matthew Hershberger's profile photo
Lucas Marques de oliveira's profile photo
Glaucio Rodrigo's profile photo

Yuri Albuquerque

Shared publicly  - 
 
Falando um pouco mais sobre Rust, agora vou explicar como Rust consegue implementar segurança de memória sem precisar de mecanismos de runtime como um garbage collector (dessa forma sendo potencialmente tão rápido quanto C ou C++).

Rust tem três tipos de ponteiros: owned pointers (também chamados "boxes"), borrowed pointers ("references") e raw pointers (iguais aos ponteiros do C. Só podem ser usados dentro de blocos unsafe).

A linguagem em si formaliza o conceito de "ownership", então um objeto é propriedade da variável que o contém. Quando ocorre passagem de parâmetro, atribuição ou retorno de função, o objeto é copiado (com shallow copy) para a outra variável.

O ponto de diferença é que para objetos com algum conceito de ownership (como owned pointers, ou structs e enums que contenham owned pointers) a propriedade do objeto vai ser movida para a próxima variável após uma shallow copy.

Por exemplo:
    let x = ~1; //(~ é o símbolo que marca que aquela variável é um owned pointer, mais ou menos como o * em C)
    let y = x; /* o objeto de x foi movido para y */
    println!(x) /* erro de compilação. O objeto que "x" estava apontando foi movido para "y" */

Como você tem certeza absoluta de qual é a variável dona daquele objeto, assim que a variável sair de escopo, o destrutor do objeto será chamado!

Obviamente, nem sempre você vai querer mover o objeto. Você pode apenas querer tomá-lo emprestado numa função. E aí entram as references, ou borrowed pointers (indicados por &).

Uma reference tem a garantia em tempo de compilação de que a variável do tipo reference vai ter um lifetime menor do que a variável que está sendo apontada. Como assim?

    let y: ∫
    
    {
        let x = ~1;
        y = &(*x); // erro de compilação. O lifetime de "y" segue depois do de x
    }

Dessa forma, você pode emprestar variáveis sem medo de apontar para um null pointer ou um dangling pointer! De fato, null pointers só existem para raw pointers. Para ter um valor "opcional" (que pode ter algum valor ou valor nenhum), você usa o enum Option<T>.

Falando nisso, enums em Rust na verdade são algebraic data types, similares aos union types do Ceylon e do Kotlin.
 ·  Translate
2
Add a comment...

Yuri Albuquerque

Shared publicly  - 
 
O +Diego Coronel falou em promises com tipagem segura em Ceylon, o que me inspirou a falar um pouco sobre tasks em Rust.

Rust implementa concorrência com tasks, que são threads de usuário (em contrapartida com threads de kernel). O runtime da linguagem cria um pequeno conjunto de threads de kernel onde essas tasks vão rodar. Isso permite que várias tasks sejam disparadas com pouco overhead.

Apenas tendo tasks, contudo, não é o bastante para ter concorrência segura. Cada task de Rust é totalmente isolada, e só podem se comunicar entre si usando mensagens.

A maneira como Rust lida com mensagens é única devido ao seu sistema de tipos: como há um conceito de "owned pointers", além de ser possível passar uma variável numa mensagem por cópia, também é possível mover a variável de uma task para a outra. Como a variável é movida, a task que a continha originalmente não tem mais acesso a ela.

Dessa forma, é muito mais fácil lidar com concorrência sem se preocupar com os problemas comuns, já que acesso simultâneo a recursos se torna impossível, devido ao isolamento.

Criar uma biblioteca de actor model, similar ao que Erlang ou Scala fazem, também se torna mais fácil.

Caso seja necessário compartilhar dados imutáveis, contudo, existe a struct Arc (atomically reference counted) que permite isso com um nível de abstração simples.

Case realmente seja necessário compartilhar dados mutáveis, existe a RWArc, que é protegida por locks seguros (evitando problemas de nested mutexes).

Acho que seria interessante numa próxima vez falar um pouco sobre o sistema de ponteiros de Rust, que permite programas com segurança de memória sem precisar recorrer a um garbage collector.
 ·  Translate
3
Júlia Farias's profile photo
 
sou analfabeta nisso...
 ·  Translate
Add a comment...

Yuri Albuquerque

Shared publicly  - 
 
My travel to the world of Rust never seem to stop amazing me.

First, there was the memory safety: no null pointers, no dangling pointers, no memory leaks. Not ever. No Garbage Collection to do that (although there is a std::gc::Gc structure for the specific use-cases where you can't run from a Garbage Collector, or std::rc::Rc if a reference counter solves your problem).

Then, there were the type system features: algebraic datatypes (disguised as Enums), linear types (owned and borrowed pointers, the things that make Rust memory-safe), tuples, struct tuples, traits, immutability by default (the way Ormagodden intended). While its type system is not as advanced as Haskell, Scala or ML (it still doesn't have higher kinded types, so I can't do something like Foo<T<U>>, or Foo<T> T<U>), it may absorb these concepts later own (higher kinded types are planned, but it's not a priority).

Then, object oriented features. They took a different approach on that: you create your structure like you would normally do (with a struct, or enum, or tuple, or tuple struct, or whatever), and then you create an "impl" block for it, where you define its methods. The impl block is also used for implement traits for your struct.

Then, functional features. There are, right now, copy closures and owned closures, besides being able to pass functions around just fine (but named functions are NOT closures). Unboxed closures (like those of C++) still don't exist, which is somewhat limiting. But it is predicted to be implemented.

And just yesterday I discovered its module system. Holy flying fuck, it is amazing.

As a comparison, in C++ I "include" my files, and I must compile every cpp in the project together somehow. Sometimes one cpp depends on the other, sometimes they depend on some external factor. This dependency stuff gets so complex that you need Makefiles to track them. And Makefiles are complex, so lots of build tools appeared to generate Makefiles, like autotools, cmake or qmake, only to name a few. These build toolchains get quite complex overtime.

Well, Rust does not need Makefiles.

You have modules in your application. You define which modules your application will have with the "mod" keyword. And then, you import symbols from these modules with the "use" keyword. This is unlike C++, C#, Java, or most popular languages, where you can only import modules (with   #include , using namespace, using or import), and you need to tell your build toolchain where to find them.

No, no. The mod keyword, when used (like "mod foo") will search its code either in foo/mod.rs or foo.rs (not both, that will give a compiler error). You can also inline your modules, or define another path if you really want (but this convention seems just fine). And then it does its magic of including your module into your compilation. So you only need to pass one file for the compiler, and it will inline the modules in that file (if you didn't make any mistakes, of course, like a circular dependency).

Besides that, modules can define that anything is public or private in it. You don't define that a given field of a struct is private, you define if it is private for that module. In other words, modules provides the encapsulation usually given by the object system itself.

The "use" keyword is also quite powerful. When you use it, Rust does not only search in the global module, it can also search relatively to your current module (like self::bar for a child module, or parent::baz for another child from the parent module).

And now another catch: when you use "extern mod", it searches for libraries. Yes, you don't need Makefiles, or maven, or gradle, or anything like it at all. You can define your whole dependency tree inside your code, in a sane manner.

And all of that in a systems language.

The developers must have sold their souls, it's impossible to have created such an well designed language otherwise.
2
Add a comment...
 
I have encoding problems on Emacs under Windows since forever. I want that all my buffers are UTF-8 by default, but I also want the files to be saved on Windows default encoding for that (ido-mode seems to have problems with that).

Anyone has a solution for this? I have googled and googled and no answer that solves my problem.
1
E Sabof's profile photoMicha Rosetree's profile photoYuri Albuquerque's profile photoSpencer Allen's profile photo
6 comments
 
This works without ido. Anyway, I found a solution. I will post here when I get home. 
Add a comment...
 
My feature was merged for the next release. Now you'll be able to use google now to create captures in mobile org.
4
1
Ibrahim Awwal's profile photoAndreas Klien's profile photo
 
Oh nice, that's perfect! 
Add a comment...
People
Have him in circles
345 people
Diego Coronel's profile photo
Thomas Rohde's profile photo
Gilnei Schaeffer's profile photo
Matthew Hershberger's profile photo
Lucas Marques de oliveira's profile photo
Glaucio Rodrigo's profile photo
Work
Occupation
Desenvolvedor
Employment
  • Fundação Paulo Feitoza
    Desenvolvedor Pleno, 2013 - present
    Desenvolvimento de apps Android.
  • Tap4 Mobile
    Analista Jr, 2012 - 2013
  • IATECAM
    Desenvolvedor, 2011 - 2012
  • Start
    Programador Web, 2009 - 2011
Places
Map of the places this user has livedMap of the places this user has livedMap of the places this user has lived
Currently
Manaus
Story
Tagline
Todas as coisas criadas estão sujeitas à decadência. Atinja a liberação se esforçando com diligência.
Introduction
Nasci em 9 de novembro de 1989, dia da queda do Muro de Berlim. Talvez isso tenha influenciado minhas tendências libertárias.
Isso ou o fato de eu ter estudado em uma escola batista e em uma escola de ensino tradicional.
Da 3ª a 8ª série minhas lembranças são como brumas distantes, eu não gostava dessa época e por isso lembro pouco.
Do 1º ao 3º ano do Ensino Médio foi uma das melhores épocas da minha vida. Fui para uma escola de período integral, conheci meus melhores amigos, aprendi a programar...
Depois, fui para a faculdade de jornalismo. Não gostei. Fui para engenharia da computação e cá estou.
Bragging rights
Sobrevivi à Fundação Nokia
Education
  • Universidade Federal do Amazonas
    Sistemas de Informação, 2012 - present
  • IBA - Instituto Batista do Amazonas
  • Pequeno Príncipe
  • Lato Sensu
  • Fundação Nokia de Ensino
Basic Information
Gender
Male
Looking for
Friends, Networking
Relationship
Married