Peruvian products: Quinoa, Causa Limeña, Pisco

I decided to write this post because I think it is fair to let know the world that quinoa, Causa Limeña and Pisco are Peruvians products.

We have done efforts to promote our products around the world through the valuable work of one of the authorities of the Peruvian food: Gaston Acurio.

Moreover, we presented our products (to mention the last event): Peru Meet & Greet 2015books, receiptscampaigns and we had gotten recognitions from World Food Programme.  

Besides that, during the last Expo Milan 2015 world food event, these Peruvian products were being marketed by another country as if their products.

Therefore, I am just clarifying this situation from my point of view… In someway I can share some varieties of products that are grown from seeds here and what we can provide.

In some manner, it pushed me up with the idea of organising the first edition of the GNOME America in Peru. This idea was in my mind years ago, but I did not dare to do it until I had the opportunity to talk with Max Chun-Hung Huang during the GNOME Asia. He encouraged me to do it!  It seems huge but not impossible, so one the challenge of the life might start now. 

Could Cuzco, one wonder of the world, be a good place to do it?

peruvian

Posted in Events, GNOME, Laikes & Dislaikes :: Entertainment | Tagged , , , , , , , , | 2 Comments

GNOME PERU FEST 2015 Video

Special GNOME PERU FEST 2015 video captures almost all the conferences we presented in this fifth edition. Thanks to Erick Cachay for this contribution that let us show all the work we did for spreading the GNOME word in Lima Peru.

While there are certainly general coordination-skilled and time management-demand, I must say that there is not only my volunteer job, there is more people behind the scenes. Thanks to many people who did the designer job, marketing job, Wi -Fi and internet connection tests, who attendees to meetings to set permissions and denies in companies, the pre – event, during the event and post- event support, even the carry-on packages job was so important! Thanks for their good attitude and extra effort they put in all the activities.

I was lucky to had grown up every year with this event, thanks to the GNOME Foundation, IBM, FEDORA, INFOPUCP-PUCP, Grupo LA REPUBLICA, Floreria La Bouquette, and all the institutions that helped me a lot! Many thanks to my IBM managers, PUCP authorities and recognition for Linux Peruvian masters: Felipe SolariRodolfo PimentelGenghis Rios and Flavio Contreras.

Please enjoy the video. Thanks again Erick! Great volunteer worker during and post- event :)

cachay1cachay2

Posted in GNOME, τεχνολογια :: Technology | Tagged , , , , , , | 2 Comments

Let’s contribute GNOME: Fixing bugs – session three

This time, we were only four: Mario, Fabian, Briggette and me. Mario was trying to install   jhbuild build gtk+ requieres packages like sysdeps, flex, anthy and many others. Briggette was trying to finish the Web basic site completing the BACK and FORWARD button, because Fabian showed us last time to set the GO button. Fabian was helped in the channel of IRC gnome developers as cfoch while I was trying to fix a bug… I was also trying to show Briggette how to connect to the IRC GNOME women channel. It was a shame that I had some problems with my laptop ( I am using a Fedora virtual machine but some plugins were missing)  so I could post my IRC experience later.

11270371_465471206942373_7699094927853625372_o

The complete procedure for fixing bugs (newbies style) is finally available :)

* I had one bug assigned: 685595
bugzilla

Following the tutorial: cloning is the first part, then get inside the directory to see the code

[yulytas@gnome gnome]$ git clone git://git.gnome.org/newcomers-tutorial
[yulytas@gnome gnome]$ cd newcomers-tutorial/
[yulytas@gnome newcomers-tutorial]$ ls
 COPYING README gnome-image.png hello.js newcomers-tutorial.doap
[yulytas@gnome newcomers-tutorial]$ gjs hello.js
 bash: gjs: command not found

If you get the same message, just install gjs

[yulytas@gnome newcomers-tutorial]$dnf install gjs
 Reading package lists... Done
 Building dependency tree
 Reading state information... Done

Now it is time to run again the program and see what is the error message:

[yulytas@gnome newcomers-tutorial]$ gjs hello.js 

(gjs:4155): GLib-GObject-WARNING **: The property GtkImage:stock is deprecated and shouldn't be used anymore. It will be removed in a future version.

(gjs:4155): Gjs-WARNING **: JS ERROR: ReferenceError: application is not defined
WelcomeToTheGrid<._quit@hello.js:68
wrapper@resource:///org/gnome/gjs/modules/lang.js:169
@hello.js:75

The majority of cases the error message can give us a hint of how to solve them, so the error are related to the image, the WelcomeToTheGRid object and the quit action.

* This is the code with bugs on it:

#!/usr/bin/gjs

const Gtk = imports.gi.Gtk;
const Lang = imports.lang;

const WelcomeToTheGrid = new Lang.Class({
    Name: 'Welcome to the Grid',

    // Create the application itself
    _init: function() {
        this.application = new Gtk.Application();

    // Connect 'activate' and 'startup' signals to the callback functions
    this.application.connect('activate', Lang.bind(this, this._onActivate));
    this.application.connect('startup', Lang.bind(this, this._onStartup));
    },

    // Callback function for 'activate' signal presents windows when active
    _onActivate: function() {
        this._window.present();
    },

    // Callback function for 'startup' signal builds the UI
    _onStartup: function() {
        this._buildUI ();
    },

    // Build the application's UI
    _buildUI: function() {

        // Create the application window
        this._window = new Gtk.ApplicationWindow({
            application: this.application,
            window_position: Gtk.WindowPosition.CENTER,
            border_width: 10,
            title: "Welcome to JavaScript"});

        // Create the Grid
        this._grid = new Gtk.Grid ({ row_spacing: 20 });

        // Create an image
        this._image = new Gtk.Image ({ file: "gnome-image.jpg" });

        // Create a second image using a stock icon
        this._icon = new Gtk.Image ({ stock: 'gtk-about' });

        // Create a label
        this._label = new Gtk.Label ({ label: "Welcome to GNOME, too!" });

        // Create a button
        this._button = new Gtk.Button ({ label: ".. .and good-by" });
        this._button.connect ("clicked", Lang.bind(this, this._quit));

        // Attach the images and button to the grid
        this._grid.attach (this._image,   0, 0, 2, 1);
        this._grid.attach (this._icon,    0, 1, 1, 1);
        this._grid.attach (this._label,   1, 1, 1, 1);
        this._grid.attach (this._button,  0, 2, 2, 1);

        // Add the grid to the window
        this._window.add (this._grid);

        // Show the window and all child widgets
        this._window.show_all();
    },

    _quit: function() {
        application.quit();
    }

});

// Run the application
let app = new WelcomeToTheGrid ();
app.application.run (ARGV);

Examining the current code, we see that the image is called with extension jpg and it was saved in the directory an image with the png extension. The other function to correct is quit, which is not specifying what application has to quit, and finally I edited the label .. . good -by to say …good-bye:

bug

We can see what we corrected by using git diff

[yulytas@gnome newcomers-tutorial]$ git diff
diff --git a/hello.js b/hello.js
index 39fe8b9..d8a8b6a 100755
--- a/hello.js
+++ b/hello.js
@@ -39,7 +39,7 @@ const WelcomeToTheGrid = new Lang.Class({
 this._grid = new Gtk.Grid ({ row_spacing: 20 });
 
 // Create an image
- this._image = new Gtk.Image ({ file: "gnome-image.jpg" });
+ this._image = new Gtk.Image ({ file: "gnome-image.png" });
 
 // Create a second image using a stock icon
 this._icon = new Gtk.Image ({ stock: 'gtk-about' });
@@ -48,7 +48,7 @@ const WelcomeToTheGrid = new Lang.Class({
 this._label = new Gtk.Label ({ label: "Welcome to GNOME, too!" });
 
 // Create a button
- this._button = new Gtk.Button ({ label: ".. .and good-by" });
+ this._button = new Gtk.Button ({ label: "...and good-bye" });
 this._button.connect ("clicked", Lang.bind(this, this._quit));
 
 // Attach the images and button to the grid
@@ -64,8 +64,8 @@ const WelcomeToTheGrid = new Lang.Class({
:

Commit your changes with git commit and write the fixed changes on it:

[yulytas@gnome newcomers-tutorial]$ git commit --amend --signoff
[master fabd51a] Image extension corrected and button clicked action to quit is fixed.
 Date: Sun Jun 21 18:36:52 2015 -0500
 1 file changed, 4 insertions(+), 4 deletions(-)

As the newcomers-tutorial of GNOME indicated, create the patch which will be stored inside the home directory and them attach it to the bug.

[yulytas@gnome newcomers-tutorial]$ git format-patch --stdout HEAD~1 > ~/myPatch.patch

After creating the patch, click on Attachment to upload it in bugzilla:

bugzilla

Your patch is going to be evaluated for the Newcomers maintainers soon.

Posted in GNOME, τεχνολογια :: Technology | Tagged , , , , , , , , , | Leave a comment

Starting with Github

To start with github, you must create an account and then follow the steps on the official WebPage Please check if you have installed the git package on your laptop

empathy2As we have seen, we must install the package and then, set up our personal information:

$sudo dnf install git
$git config --global user.name "YOUR NAME"
$git config -- global user.email "YOUR MAIL"

Complete the name of the repository and the information related to it.        In my case I am setting as public, my first directory called my first_codes

empathy1

Copy the link that github shows to clone in my terminal later:

Screen Shot 2015-06-20 at 8.39.28 PM

In this case I am creating a gnome directory and then doing the clone

[yulytas@gnome Documents]$ mkdir gnome
[yulytas@gnome Documents]$ cd gnome
[yulytas@gnome gnome]$ git clone https://github.com/jinca/first_codes.git
Cloning into 'first_codes'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
Checking connectivity... done.

Then, I have to get inside the directory where I am going to upload gtk.py

[yulytas@gnome gnome]$ cd first_codes/

Copy the code from your local position to the new directory to publish

[yulytas@gnome first_codes]$ mv /home/yulytas/Documents/gtk.py .
[yulytas@gnome first_codes]$ ls
gtk.py LICENSE README.md

Now it is time to do the git add, git commit and git push it :)

[yulytas@gnome first_codes]$ git add gtk.py 
[yulytas@gnome first_codes]$ git commit -a -m "First code in GTK with Python"
[master 798a625] First code in GTK with Python
 1 file changed, 19 insertions(+)
 create mode 100644 gtk.py
[yulytas@gnome first_codes]$ git push origin master
Counting objects: 3, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 514 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/jinca/first_codes.git
 647f865..798a625 master -> master
[yulytas@gnome first_codes]$

Good luck!

Posted in GNOME, τεχνολογια :: Technology | Tagged , , , | 1 Comment

Connecting to IRC with Empathy (FEDORA)

Fedora 22 is finally in my laptop, at least virtually this time :)

I will reconnecting myself again with some GNOME channels. This time I am so glad to join my friend Olenka (@broman) for her very first time.

These are some steps in pictures to set Empathy:

1.- Fill up your personal information, name, last name and nickname:

empathy1

2.- Select #IRC icon

empathy23.- Click ADD after entering your alias

empathy2

4.- Close the window and click on EMPATHY/Rooms/Join:

empathy2

5.- Click on Server to see the list of channels and the Room field is going to be updated

empathy2

6.- Voila! There are only 6 gnome-women around the world this time: welcome @broman!

empathy2

Posted in GNOME, τεχνολογια :: Technology | Tagged , , , | 1 Comment

Let’s contribute Peru GNOME – session two

Thanks to Cesar Fabian who guided us to do a basic Web browser using GTK+ and webkit.

IMG_9335IMG_9341

Following our plan, he was explained about the technologies that are useful for our Web, when one of the participants asked about IDE to do this (because it is kind of hard to remember all the events and objects). So, Fabian told us that Christian Hergert was in charge of building an IDE to make easier the development stuff in GNOME.

IMG_9326

IMG_9338

Some of us had troubles with the packages that were missing during the compilation time. gcc main.c `pkg-config –cflags –libs gtk+-3.0` -o main

This was our first main.c program:

#include <gtk/gtk.h>
int
main(int argc, char ** argv)
{
 GtkWidget *window;
 gtk_init (&argc,&argv); 
 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
 gtk_window_set_title (GTK_WINDOW (window), "Hello world");
 g_signal_connect (window, "delete-event", gtk_main_quit,NULL);
 gtk_widget_show(window);
 gtk_main();
 return 0;
}

In my particular case the libgtk-3 was missing

yulytas@yulytas:/home/yulytas$ sudo apt-get install libgtk-3-dev
.
.
.
 Need to get 10.1 MB of archives.
 After this operation, 40.0 MB of additional disk space will be used.
 Do you want to continue? [Y/n] y
 Get:1 http://arsip.blankonlinux.or.id/blankon/ suroboyo/main libcairo-script-interpreter2 amd64 1.12.16-2 [575 kB]

Some things I understood from this experience:

gtk_window is a container and we should respect the gtk hierarchy to add objects.

we can use “delete-event”or “destroy” when it is your first time to try this.

There is a widget that does not need the events delete or destroy:  the gtk application.

#include <gtk/gtk.h>
#include <webkit2/webkit2.h>
struct _Dummy {
  GtkWidget *web_view;
  GtkWidget *address_bar;
};

IMG_9344IMG_9346

This is our basic code that shows a navigator

#include <gtk/gtk.h>
#include <webkit2/webkit2.h>
#include 

struct data {
	GtkWidget *address_bar;
	GtkWidget *web_view;
};

void 
navigate_button_cb (GtkWidget *navigate_button, struct data *datos)
{	
	GtkWidget* web_view = datos->web_view;
	GtkWidget* address_bar = datos->address_bar;
	webkit_web_view_load_uri (WEBKIT_WEB_VIEW (web_view), gtk_entry_get_text (GTK_ENTRY (address_bar)));
}

void
activate (GtkApplication *app, gpointer user_data)
{
	GtkWidget *window, *web_view, *box, *bar, *address_bar, *navigate_button;	
	struct data *datos;
	
	datos = malloc(sizeof(struct data));
	
	window = gtk_application_window_new (app);
	gtk_window_set_title (GTK_WINDOW (window), "web-browser");
	gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
	
	web_view = webkit_web_view_new();
	webkit_web_view_load_uri (WEBKIT_WEB_VIEW (web_view), "http://www.google.com.pe");
	
	box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	bar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
	
	address_bar = gtk_entry_new ();
	navigate_button = gtk_button_new_with_label ("Go");
	
	datos->address_bar = address_bar;
	datos->web_view = web_view;
	
	g_signal_connect (navigate_button, "clicked", G_CALLBACK (navigate_button_cb), datos);
	
	gtk_box_pack_start (GTK_BOX (bar), address_bar, TRUE, TRUE, 0);
	gtk_box_pack_start (GTK_BOX (bar), navigate_button, FALSE, TRUE, 0);
	gtk_box_pack_start (GTK_BOX (box), bar, FALSE, FALSE, 0);
	gtk_box_pack_start (GTK_BOX (box), web_view, TRUE, TRUE, 0);
	
	gtk_container_add (GTK_CONTAINER (window), box);
	
	gtk_widget_show_all (window);	
}

int
main (int argc, char **argv)
{
	GtkApplication *app;
	
	int status;
	
	app = gtk_application_new ("org.gtk.web-browser", G_APPLICATION_FLAGS_NONE);
	g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
	
	status = g_application_run (G_APPLICATION (app), argc, argv);
	
	return 0;
}

After that we updated to click on the GO button and used address bar, which is an entry

GtkWidget *address_bar, *navigate

and gtk_box and its event start

To update and direct to the page is webkit_web_view_load_uri (WEBKIT_WEB_VIEW (web_view), uri);  when the address received the signal CLICK it is uploaded in  wegbkit_web_view_load_uri (WEBKIT_WEB_VIEW (user_data->web_view)

We can make the back button with webkit_web_view_go_back() or the forward function.

These are the objects that Fabian used to explain the code:

IMG_9361 IMG_9358

I feel so optimistic in saying that there will be 2 new women Peruvian GSoC next rounds :)IMG_9349IMG_9348

Briggette and Lizeth in the picture – UNI PERU.

Posted in GNOME, τεχνολογια :: Technology | Tagged , , | Leave a comment

Let’s contribute Peru with GNOME – session one

This time we just gather 4 people who wants to contribute with GNOME. Two of the attendances were from PUCP who use Unity and the others two were from UNI, who use GNOME with Fedora 20. All of them were programmers; so everyone were interested in developing for GNOME and not for documentation. According to the plan  Jose Quiñones explained the GNOME project, the GNOME interfaz, the GNOME community, GNOME applications and ways to contribute by IRC.

11013318_459248050898022_139216036590430065_n

After that Cesar Fabian started the code contribution part, because all of them were interested in GNOME developer technologies. We started with glib, based on the GLIB Website. He explained us that Glib is a GNOME library written in C. We did a couple of examples: Hello Word and the following code using glist. Glists are linked lists that use the type void *. It was also explained values and basic types like gboleean where ONE represents TRUE and the rest of values are FALSE .

#include<glib.h> 
int 
main(int arg, char **argv)
{ 
  GList *list = NULL, *l; 
  list = g_list_append(list, "mango"); 
  list = g_list_append(list, "papaya"); 
  list = g_list_append(list, "watermelon"); 
  list = g_list_append(list, "almond"); 
  list = g_list_append(list, "apple"); 
  for(l = list; l != NULL; l = l->next) 
   g_print("%s\n", (char *)l->data); 
   g_list_free(list); return 0; 
}

* What took us so long was the cloning part and the packages that were left in each cases. So, the first step is going to the page: https://git.gnome.org/browse/glib and clone:

glib After that, get inside the new glib file created and do autogen:

[jinca@localhost ~]$ cd glib
 [jinca@localhost glib]$ ./autogen.sh

This was the first error message I got: glib.mk:28: If ‘LT_INIT’ is in ‘configure.ac’, make sure glib.mk:28: its definition is in aclocal’s search path. tests/Makefile.am:1: ‘glib.mk’ included from here autoreconf: automake failed with exit status: 1

To solve this, create this path  /home/jinca/opt and do the export:

$PKG_CONFIG_PATH=/home/jinca/opt/lib/pkgconfig/

 * If the system asked to install packages like libffi or gtk , just install them:

sudo yum install libffi-dev
sudo yum install gtk-doc-tools
sudo yum install libglib2.0-dev

Then, inside glib,  apply the configure and make commands:

cd glib
./configure -- prefix=$HOME/opt/
make
make install

So, after coding the examples Cesar gave us, compile and run the programs:

gcc main.c `pkg-config --cflags --libs glib-2.0` -o main
./main

After that, we reviewed some string functions like strdup that duplicated strings, but we do not have time for more. We hope next session will be more productive and we are aiming to do GTK after glib and cairo.

Posted in GNOME, τεχνολογια :: Technology | 2 Comments