Lunes 18 de junio de 2018

Victor Orozco (Tuxtor)

Victor Orozco (Tuxtor)
The J*

Testing JavaEE backward and forward compatibility with Servlet, JAX-RS, Batch and Eclipse MicroProfile

One of the most interesting concepts that made Java EE (and Java) appealing for the enterprise is its great backward compatibility, ensuring that years of investment in R&D could be reused in future developments.

Neverthless one of the least understood facts is that Java EE in the end is a set of curated APIs that could be extendend and improved with additional EE-based APIs -e.g Eclipse MicroProfile, DeltaSpike- and vendor-specific improvements -e.g. Hazelcast on Payara, Infinispan on Wildfly-.

In this article I'll try to elaborate a reponse for a recent question in my development team:

Is it possible to implement a new artifact that uses MicroProfile API within Java EE 7? May I use this artifact also in a Java EE 8 Server?

To answer this question, I prepared a POC to demonstrate Java EE capabilities.

Is Java EE backward compatible? Is it safe to assume a clean migration from EE 7 to EE 8?

One of the most pervasive rules in IT is "if ain't broke, don't fix it", however the broke is pretty relative in regards of security, bugs and features.

Commonly, security vunlerabilities and regular bugs are patched through vendor specific updates in Java EE, retaining the feature compatibility through EE API level, hence this kind of updates are considered safer and should be applied proactively.

However, once a new EE versión is on the streets, each vendor publish it's product calendar, being responsable of the future updates and it's expected that any Java EE user will update his stack (or perish :) ).

In this line Java EE has a complete set of requrimentes and backward compatibility instructions, for vendors, spec leads and contributors, this is specially important considering that we receive on every version of Java EE:

  • New APIs (like Batch in EE 7 or JSON-B in EE 8)
  • APIs that simply don't change and are included in the next EE versión (like Batch in EE 8)
  • APIs with minor updates (Bean Validation in EE 8)
  • APIS with new features and interfaces (reactive client in JAX-RS EE 8)

According to compatibility requirements, if your code retains and implements only EE standard code you receive source-code compatibility, binary compatibility and behaviour compatibility for any application that uses a previous version of the specificiation, at least that's the idea.

Creating a "complex" implementation

To test this assumption I've prepared a POC that implements

  • Servlets (updated in EE 8)
  • JAX-RS (updated in EE 8)
  • JPA (minor update in EE 8)
  • Batch (does not change in EE 8)
  • MicroProfile Config (extension)
  • DeltaSpike Data (extension)

Batch Structure

This application just loads a bunch of IMDB records from a csv file in background to save the records in Derby(Payara 4) and H2(Payara 5) using the jdbc/__default JTA Datasource.

For referece, the complete Maven project of this POC is available at GitHub.

Part 1: File upload

The POC a) implements a multipart servlet that receives files from a plain HTML form, b) saves the file using MicroProfile config to retreive the final destination URL and c) Calls a Batch Job named csvJob:

@WebServlet(name = "FileUploadServlet", urlPatterns = "/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    @Inject
    @ConfigProperty(name = "file.destination", defaultValue = "/tmp/")
    private String destinationPath;

    @Inject
    private Logger logger;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String description = request.getParameter("description");
        Part filePart = request.getPart("file");
        String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();


        //Save using buffered streams to avoid memory consumption
        try(InputStream fin = new BufferedInputStream(filePart.getInputStream());
                OutputStream fout = new BufferedOutputStream(new FileOutputStream(destinationPath.concat(fileName)))){

            byte[] buffer = new byte[1024*100];//100kb per chunk
            int lengthRead;
            while ((lengthRead = fin.read(buffer)) > 0) {
                fout.write(buffer,0,lengthRead);
                fout.flush();
            }

            response.getWriter().write("File written: " + fileName);

            //Fire batch Job after file upload
            JobOperator jobOperator = BatchRuntime.getJobOperator();
            Properties props = new Properties();
            props.setProperty("csvFileName", destinationPath.concat(fileName));
            response.getWriter().write("Batch job " + jobOperator.start("csvJob", props));
            logger.log(Level.WARNING, "Firing csv bulk load job - " + description );

        }catch (IOException ex){
            logger.log(Level.SEVERE, ex.toString());

            response.getWriter().write("The error");
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }


    }

}

You also need a plain HTML form

<h1>CSV Batchee Demo</h1>
<form action="upload" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="description">Description</label>
        <input type="text" id="description" name="description" />
    </div>
    <div class="form-group">
        <label for="file">File</label>
        <input type="file" name="file" id="file"/>
    </div>

    <button type="submit" class="btn btn-default">Submit</button>
</form>

Part 2: Batch Job, JTA and JPA

As described in Java EE tutorial, typical batch Jobs are composed by steps, these steps also implement a three phase process involving a reader, processor and writer that works by chunks.

Batch Job is defined by using a XML file located in resources/META-INF/batch-jobs/csvJob.xml, the reader-writer-processor triad will be implemented through named CDI beans.

<?xml version="1.0" encoding="UTF-8"?>
<job id="csvJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
    version="1.0">
    
    <step id="loadAndSave" >
        <chunk item-count="5">
            <reader ref="movieItemReader"/>
            <processor ref="movieItemProcessor"/>
            <writer ref="movieItemWriter"/>
        </chunk>
    </step>
</job>

MovieItemReader reads the csv file line per line and wraps the result using a Movie object for the next step, note that open, readItem and checkpointInfo methods are overwritten to ensure that the task restarts properly if needed.

@Named
public class MovieItemReader extends AbstractItemReader {

	@Inject
	private JobContext jobContext;

	@Inject
	private Logger logger;

	private FileInputStream is;
	private BufferedReader br;
	private Long recordNumber;

	@Override
	public void open(Serializable prevCheckpointInfo) throws Exception {
		recordNumber = 1L;
		JobOperator jobOperator = BatchRuntime.getJobOperator();
		Properties jobParameters = jobOperator.getParameters(jobContext.getExecutionId());
		String resourceName = (String) jobParameters.get("csvFileName");
		is = new FileInputStream(resourceName);
		br = new BufferedReader(new InputStreamReader(is));

		if (prevCheckpointInfo != null)
			recordNumber = (Long) prevCheckpointInfo;
		for (int i = 0; i < recordNumber; i++) { // Skip until recordNumber
			br.readLine();
		}
		logger.log(Level.WARNING, "Reading started on record " + recordNumber);
	}

	@Override
	public Object readItem() throws Exception {

		String line = br.readLine();

		if (line != null) {
			String[] movieValues = line.split(",");
			Movie movie = new Movie();
			movie.setName(movieValues[0]);
			movie.setReleaseYear(movieValues[1]);
			
			// Now that we could successfully read, Increment the record number
			recordNumber++;
			return movie;
		}
		return null;
	}

	@Override
	public Serializable checkpointInfo() throws Exception {
	        return recordNumber;
	}
}

Since this is a POC my "processing" step just converts the movie title to uppercase and pauses the thread a half second on each row:

@Named
public class MovieItemProcessor implements ItemProcessor {

  @Inject
  private JobContext jobContext;

	@Override
  public Object processItem(Object obj) 
          throws Exception {
      Movie inputRecord =
              (Movie) obj;
      
      //"Complex processing"
      inputRecord.setName(inputRecord.getName().toUpperCase());
      Thread.sleep(500);
        
      return inputRecord;
  } 
}

Finally each chunk is written on MovieItemWriter using a DeltaSpike repository:

@Named
public class MovieItemWriter extends AbstractItemWriter {

	@Inject
    MovieRepository movieService;
	
	@Inject
	Logger logger;

    public void writeItems(List list) throws Exception {
        for (Object obj : list) {
        	logger.log(Level.INFO, "Writing " + obj);
            movieService.save((Movie)obj);
        }
    }
}

For reference, this is the Movie Object

@Entity
@Table(name="movie")
public class Movie implements Serializable {

	@Override
	public String toString() {
		return "Movie [name=" + name + ", releaseYear=" + releaseYear + "]";
	}

	private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column(name="movie_id")
    private int id;
    
    @Column(name="name")
    private String name;
    
    @Column(name="release_year")
    private String releaseYear;

    //Getters and setters

Default datasource is configured on resources/META-INF/persistence.xml, note that I'm using a JTA Data Source:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="batchee-persistence-unit" transaction-type="JTA">
        <description>BatchEE Persistence Unit</description>
        <jta-data-source>jdbc/__default</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
		 <properties>
		      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
		      <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
		      <property name="javax.persistence.schema-generation.scripts.create-target" value="sampleCreate.ddl"/>
		      <property name="javax.persistence.schema-generation.scripts.drop-target" value="sampleDrop.ddl"/>
		    </properties>
    </persistence-unit>
</persistence>

To test JSON marshalling throug JAX-RS I also implemented a Movie endpoint with GET method, the repository (AKA DAO) is defined by using DeltaSpike

@Path("/movies")
@Produces({ "application/xml", "application/json" })
@Consumes({ "application/xml", "application/json" })
public class MovieEndpoint {
	
	@Inject
	MovieRepository movieService;

	@GET
	public List<Movie> listAll(@QueryParam("start") final Integer startPosition,
			@QueryParam("max") final Integer maxResult) {
		final List<Movie> movies = movieService.findAll();
		return movies;
	}

}

The repository

@Repository(forEntity = Movie.class)
public abstract class MovieRepository extends AbstractEntityRepository<Movie, Long> {
	
	@Inject
    public EntityManager em;
}

Test 1: Java EE 7 server with Java EE 7 pom

Since the objective is to test real backward (lower EE level than server) and forward (Micprofile and DeltaSpike extensions) compatibility, first I built and deployed this project with the following dependencies on pom.xml, the EE 7 Pom vs EE 7 Server test is only executed to verify that project works properly:

<dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.microprofile</groupId>
            <artifactId>microprofile</artifactId>
            <version>1.3</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.deltaspike.modules</groupId>
            <artifactId>deltaspike-data-module-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.deltaspike.modules</groupId>
            <artifactId>deltaspike-data-module-impl</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.deltaspike.core</groupId>
            <artifactId>deltaspike-core-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.deltaspike.core</groupId>
            <artifactId>deltaspike-core-impl</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.deltaspike.distribution</groupId>
                <artifactId>distributions-bom</artifactId>
                <version>${deltaspike.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <finalName>batchee-demo</finalName>
    </build>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <deltaspike.version>1.8.2</deltaspike.version>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

As expected, the application loads the data properly, here two screenshots taken during batch Job Execution:

Payara 4 Demo 1

Payara 4 Demo 2

Test 2: Java EE 8 server with Java EE 7 pom

To test the real binary compatibility, the application is deployed without changes on Payara 5 (Java EE 8), this Payara release also switches Apache Derby with H2 database.

As expected and according with Java EE compatibility guidelines, the application works flawesly.

Payara 5 Demo 1

Payara 5 Demo 2

To verify assumptions, this is a query launched through SQuirrel SQL:
SQuirrel SQL Demo

Test 3: Java EE 8 server with Java EE 8 pom

Finally to enable new EE APIs, a little bit of tweaking is needed on pom.xml, specifically the JavaEE dependency

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>8.0</version>
    <scope>provided</scope>
</dependency>

Again, the application just works:

Payara 5 Java EE 8

This is why standards matters :).

Lunes 04 de junio de 2018

Victor Orozco (Tuxtor)

Victor Orozco (Tuxtor)
The J*

Getting started with Java EE 8, Payara 5 and Eclipse Oxygen

Some days ago I had the opportunity/obligation to setup a brand new Linux(Gentoo) development box, hence to make it "enjoyable" I prepared a back to basics tutorial on how to setup a working environment.

Requirements

In order to setup a complete Java EE development box, you need at least:

1- Working JDK installation and environment
2- IDE/text editor
3- Standalone application server if your focus is "monolithic"

Due personal preferences I choose

1- OpenJDK on Gentoo Linux (Icedtea bin build)
2- Eclipse for Java EE developers
3- Payara 5

Installing OpenJDK

Since this is a distribution dependent step, you could follow tutorials on Ubuntu, CentOS, Debian and many more distributions if you need to. At this time, most application servers have Java 8 as target due new Java-LTS version scheme, as in the case of Payara.



For Gentoo Linux you could get a new OpenJDK setup by installing dev-java/icedtea for the source code version and dev-java/icedtea-bin for the precompiled version.

emerge dev-java/icedtea-bin

Is OpenJDK a good choice for my need?

Currently Oracle has plans to free up all enterprise-commercial JDK features. In a near future the differences between OracleJDK and OpenJDK should be zero.

In this line, Red Hat and other big players have been offering OpenJDK as the standard JDK in Linux distributions, working flawlessly for many enterprise grade applications.

Eclipse for Java EE Developers

After a complete revamp of websites GUI, you could go directly to eclipse.org website and download Eclipse IDE.

Eclipse offers collections of plugins denominated Packages, each package is a collection of common plugins aimed for a particular development need. Hence to simplify the process you could download directly Eclipse IDE for Java EE Developers.



On Linux, you will download a .tar.gz file, hence you should uncompress it on your preferred directory.

tar xzvf eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz

Finally, you could execute the IDE by entering the bin directory and launching eclipse binary.

cd eclipse/bin
./eclipse

The result should be a brand new Eclipse IDE.



Payara

You could grab a fresh copy of Payara by visiting payara.fish website.



From Payara's you will receive a zipfile that again you should uncompress in your preferred directory.

unzip payara-5.181.zip

Finally, you could add Payara's bin directory to PATH variable in order to use asadmin command from any CLI. You could achieve this by using ~/.bashrc file. For example if you installed Payara at ~/opt/ the complete instruction is:

echo "PATH=$PATH:~/opt/payara5/bin" >> ~/.bashrc

Integration between Eclipse and Payara

After unzipping Payara you are ready to integrate the app server in your Eclipse IDE.

Recently and due Java/Jakarta EE transition, Payara Team has prepared a new integration plugin compatible with Payara 5. In the past you would also use Glassfish Developer Tools with Payara, but this is not possible anymore.

To install it, simply grab the following button on your Eclipse Window, and follow wizard steps.

Drag to your running Eclipse* workspace. *Requires Eclipse Marketplace Client





In the final step you will be required to restart Eclipse, after that you still need to add the application server. Go to the Servers tab and click create a new server:



Select Payara application server:



Find Payara's install location and JDK location (corresponding to ~/opt/payara5 and /opt/icedtea-bin on my system):



Configure Payara's domain, user and password.



In the end, you will have Payara server available for deployment:



Test the demo environment

It's time to give it a try. We could start a new application with a Java EE 8 archetype, one of my favorites is Adam Bien's javaee8-essentials-archetype, wich provides you an opinionated essentials setup.

First, create a new project and select a new Maven Project:



In Maven's window you could search by name any archetype in Maven central, however you should wait a little bit for synchronization between Eclipse and Maven.



If waiting is not your thing. You could also add the archetype directly:



This archetype also creates a new JAX-RS application and endpoint, after some minor modifications just deploy it to Payara 5 and see the results:





Lunes 21 de mayo de 2018

Javier Aroche

Javier Aroche
Javier Aroche

2018: Phones are mostly bezel-less so our cases can have big bezels

Essential Phone with Poetic case

Essential Phone with the Poetic case

This year most smartphone manufacturers have been pushing hard to reduce the size of the bezels on their phones (so called screen-to-body ratio); also using fragile premium materials of the back, instead of plastic, is cool. It funny because if you care about your phone, you’re going to use a case with it, and one with quite big bezels.

For a while I was tempted on getting one of the Caterpillar android phones, but the specs were kinda bad, so was the lack of software updates. Actually its becoming harder to find a flagship Android phone that doesn’t have a back made of glass or ceramic and tiny bezels in the front. But hey, that slippery back gotta feel premium!.

Looks like the future of smartphones is about wrapping their premium materials in Thermoplastic Polyurethane (TPU) cases 🙄

Jueves 26 de abril de 2018

De como nintendo se puede recuperar y tomar ventaja el reciente hack…

Bueno regrese a hacer un post de nuevo despues de tanto tiempo, ya mas viejo, aun metalero, con menos tiempo para escribir, y pero ironicamente regresando a mis costumbres infantiles de hace decadas, como jugar nintendo…  Y ya que bloguear ya no es tan cool ni mainstream, aprovechare. Para los que no viven bajo una […]

Miércoles 14 de marzo de 2018

Victor Orozco (Tuxtor)

Victor Orozco (Tuxtor)
The J*

Fixing missing data on Jasper Reports with community Linux distros

. . . or why my report is half empty in Centos 7.

One of the most common and least emotional tasks in any enterprise software is to produce reports. However after many years today I got my first "serious bug" in Jasper Reports.

The problem

My development team is composed by a mix of Ubuntu and Mac OS workstations, hence we could consider that we use user-friendly environments. Between many applications, we have in maintenance mode a not-so small accounting module which produces a considerable amount of reports. This applications is running (most of the times) on Openshift (Red Hat) platforms or on-premise (also Red Hat).

A recent deployment was carried over a headless(pure cli) CentOS 7 fresh install and after deploying application on the app server, all reports presented the following issue:

Good report, Red Hat, Mac Os, Ubuntu


Bad report, Centos 7


At first sight both reports are working and equal, however in the Centos 7 version, all quantities disappeared and the only "meaningful" log message related to fonts was:

[org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (default task-1) Loading XML bean definitions from URL [vfs:/content/erp-ear.ear/core-web.war/WEB-INF/lib/DynamicJasper-core-fonts-1.0.jar/fonts
/fonts1334623843090.xml]

Fonts in Java

After many unsuccessful tests like deploying a new application server version, I learnt a little bit about fonts in the Java virtual machine and Jasper Reports.

According to Oracle official documentation, you basically have four rules while using fonts in Java, being:

  1. Java supports only TTF and Postscript type 1 fonts
  2. The only font family included in JDK is Lucida
  3. If not Lucida JDK will depend on operating system fonts
  4. Java applications will fallback to the sans/serif default font if the required font is not present on the system

And if you are a Jaspersoft Studio, it makes easy for you to pick Microsoft's True Type fonts



My CentOS 7 solution

Of course Jasper Reports has support for embedding fonts, however report's font was not Lato, Roboto or Sage, it was the omnipresent Verdana part of the "Core fonts for the web" from Microsoft, not included in most Unix variant due license restrictions.

Let's assume that nowadays MS Core Fonts are a gray area and you are actually able to install these by using repackaged versions, like mscorefonts2 at sourceforge.

In CentOS is easy as 1) install dependencies,

yum install curl cabextract xorg-x11-font-utils fontconfig

2) download the repackaged fonts

wget https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-2.1-1.noarch.rpm

3) and install the already available rpm file

yum install msttcore-fonts-2.1-1.noarch.rpm

With this, all reports were fixed. I really hope that you were able to found this post before trying anything else.

Lunes 26 de junio de 2017

¿Realmente te conoce? –AdsBlock

Este post nace a través de este enlace Dataselfie, conociendo al Algoritmo de Facebook y su Machine Learning. en el que hablan de como funciona el proceso de la publicidad que te sale en facebook,  a través del tiempo ya has dibujado tu perfil en facebook sea por búsqueda o por likes todo lo que hagas dentro de esa red social te va a salir, luego que ya saben que es lo que te gusta te empiezan a mandar publicidad acorde a ella, nunca se habían realizado esa pregunta ¿Por que me sale esto?. si quieren conocer que facebook sabe mas que ustedes tranquilamente, pueden abrir  este enlace Preferencias Ads en Facebook

El cual con la sesión abierta de facebook, desglosan en Intereses, y veras todo tus gusto, lo que por alguna razón buscaste o le diste por omisión. Ahí te conocerás realmente que es lo que te gusta.

Ya que donaste los datos, que puedo hacer.

Lo mas sensato es darse de baja de una red social donde juegan con tu información. si quieres seguir usándolo lo mas lógico seria usar AdsBlock  que lo puedes instalar en firefox y chrome, no vas a ver mas publicidad pero igual en cualquier momento que abras un enlace vas a empezar a crear nuevamente tu perfil.

Hace años 10 años una persona que respeto me compartió este video sigue vigente creemos que los servicios que usamos son gratis realmente.
https://www.youtube.com/watch?v=6bYLRGS3vFs

 

 

 

 

 

 

 

 

 

Domingo 25 de junio de 2017

Activar/desactivar registro de usuarios en WordPress

Registro WordPress

La solución es de forma inmediata, dentro del Escritorio (al que accedas administración del WordPress), le vas hacer click en  a Ajustes, Generales y activas o desactiva el checkbox de: Cualquiera puede registrarse. depende para lo que requieras.

Si lo que tienes  problema con usuarios que se registran y en realidad son robots o personas spammers, usa el plugin que mencione anteriormente  http://blog.julioh.com.ve/?p=476 en el cual se hace ocultar la url de wp-admin  otra forma es usando .httpass dentro de los directorios y bloqueando su acceso, o en su momentos podrías saber cual es tu ip para indicarle desde donde te conectas por ejemplo algo así.


order allow,deny
deny from 8.8.8.8
deny from 8.8.8.9
allow from all

Sábado 24 de junio de 2017

Seguridad en WordPress , Garantizar el acceso a wp-admin

WordPress por ser un CMS mas usado pues tienes vulnerabilidades y necesitamos blindarlo en seguridad y que mejor usando plugins para que no tengas una mala experiencia.

Esta es una de esas en la cual la ruta  ../wp-admin/ la remplazas para evitar acceso a ella.

En el caso el plugin WPS Hide Login no vas a eliminar /wp-login.php o /wp-admin , pero si lo va remplazar para no sea visible y colocaremos una url que solo sabremos nosotros.

Lo buscamos  WPS Hide Login en plugins  haz clic en Instalar y posteriormente en Activar.

En el plugin accede a Ajustes, Generales y establece la palabra de paso que sustituirá al clásico:

wp-admin por no-vasaentrar guardas los cambios y pruebas.

Configuración del plugin

Cuando intentas acceder a  http://tu-dominio.com/wp-admin
Te dará un 404 not found

De igual forma  también para  /wp-login.php no existen.

 

Prueba de acceso incorrecta

Si por el contrario pones la url de tu dominio con la palabra de paso establecida:

http://tu-dominio.com/?no-vasaentrar

Te va a salir tu panel para acceder, que se busca con esto, evitar ataques de diccionario, evitar suscripciones y proteger tu CMS de la mejor manera.

si por casualidad no te acuerdas de la url, puedes borrar el plugin en la carpeta wp-content y vuelve a la ruta original

 

Miércoles 22 de marzo de 2017

Juan José Contreras

5 Novedades De Android Studio 2017

Anteriormente cuando querías compilar tu aplicación que desarrollaste en Android Studio, iniciabas un emulador que te ofrecía el mismo IDE, ibas a la cocina preparabas un licuado de frutas, regresabas a tu ordenador y aún seguía iniciando el emulador, te levantabas de nuevo porque olvidaste ponerle azúcar al licuado, regresabas y se encontraba en la misma pantalla como habías dejando el emulador. Esto y otras cosas más ya no suceden nunca más en la última versión que nos brindó Google con Android Studio 2.3.0. Te cuento 5 de sus mejores novedades.

 

Implementación Con La Nube

Hoy en día contamos con soluciones espectaculares para el backend como el asombroso Firebase que introdujo Google en 2014 y que ha tenido muy buena aceptación de parte de los desarrolladores.

 

Te puede interesar: ¿Qué es Firebase? Una Joya De Google

google-cloud-platform_from_netdna-cdnImagen de netdna-cdn

Android Studio sabe esto, por lo que ha decido incluir asistentes dentro del IDE para facilitar la implementación de librerías cómo Fabric, Volley, Google Cloud, Firebase entre otras. En el caso de Firebase solo nos colocamos en la pestaña de Tools (herramientas) y seleccionamos la opción de Firebase, listo ahora ya puedes implementar Firebase.

 

Emuladores Volando

Al inicio de este artículo te mencione un ejemplo del aburrimiento que provocaba los anteriores emuladores de Android Studio y esperar a que iniciaran sus operaciones. Para evitarnos ese asuntillo, descargabamos otros software como el buen Genymotion, ellos si que saben emular dispositivos móviles.

emuladores_volando_from_blogesImagen De blog.es

En fin, con la nueva actualización de Android Studio, los tiempos de espera para cargar un emulador son prácticamente nulos, es decir abres, inicias el emulador y en cuestión de uno o dos minutos ya tenemos nuestro emulador abierto (por supuesto, también dependerá de las características técnicas de tu ordenador).

 

Android Auto

Si te mantienes al tanto de lo último en el mundo Android, seguro que sabías sobre el soporte para crear apps en Android wear. Con esta versión de Android Studio de manera oficial podemos realizar apps móviles para Automóviles.

Me parece genial sobre todo porque, el mercado de los automóviles cada vez se vuelve más complejo y por esa razón, muchos fabricantes están optando por incorporar android en sus alucinantes automóviles. No he tenido la experiencia de subirme a un auto que tenga Android pero si los he visto y el concepto de tener conectado tu automóvil en tu vida personal como pasa con el celular, se me hace genial. Pero de un lado de seguridad, me pregunto ¿Que tan buena idea será? te recomiendo que te preguntes lo mismo.

 

Como Usar Android si tu automóvil tiene Andorid:

 

Si en caso tu automóvil no tiene Android, no te preocupes, también puedes utilizarlo:

 

Soporte Para Constraints

En la Google I/O 2016 se introdujo los Constraints Layout, una genial noticia que todos queríamos porque la verdad que ya se estaba haciendo tedioso tener que crear un xml normal, xlarge y un horizontal. Con las constraints se resuelve todo el tema de resoluciones y tamaños de pantalla.

constraints_android_studio_from_tutsplusImagen De TustPlus

Sobre todo en Android que es todo un mar de celulares con el robótico de Google.

 

Control De Versionado En Equipo

Android Studio fue potenciado por IntelliJ IDEA y por supuesto que ofrece lo mejor para el control de versionado con los servicios en la nube para el control de versionado como Git y Mercurial.

Entre los más populares para control de versionado en equipos masivos encontramos Github y BitBucket. Github probablemente es el más popular y te recomiendo que abras una cuenta del mismo, pues casi todo el mundo usa esta plataforma.

control_versionado_androidstudio_from_dartmoutheduControl de versionado De darthmouth.edu

Es decir que Android Studio te da lo mejor y los mejores estándares para el control de versionado y su documentación.

 

¿Que Mejoras Se Pueden Hacer?

En Google, principalmente el equipo de tecnologías Android están sacando sus mejores herramientas para construir el IDE más completo para crear apps en Android. Como desarrollador hay un tema que me preocupa…

 

Peso Y Requerimientos

Cada actualización de Android Studio trae consigo alrededor de unos 400 a 800 Mb. La última vez que fui a ver el peso de Android Studio fue como de 50 Gb con las SDK que he descargado con el tiempo.

Estas han sido las 5 nuevas funcionalidades más importantes que ha sacado Android Studio en los últimos meses. De repente habrán algunas que no hemos mencionado porque las hemos mencionado en un artículo anterior como las 5 Funcionalidades De Android Studio Que Debes Saber.
Espero te haya servido la información y estamos a días de la Google I/O 2017 para que nos revelen las buenas nuevas de las tecnologías Android.

Martes 21 de marzo de 2017

Juan José Contreras

5 Funcionalidades De Android Studio Que Necesitas Saber

Desde los inicios de Android hubo un IDE que sobresalió durante mucho tiempo, fue amado por la mayoría (Eclipse). Pero hoy en día contamos con la herramienta oficial de Google… Android Studio la herramienta de vanguardia para los desarrolladores de Android. Y te contaré 5 funcionalidades que seguramente no sabías de este espectacular IDE.

Compatibilidad con Android NDK (C++)

En el mundo del desarrollo móvil sabemos que no necesariamente por ser una aplicación nativa Android significa que haya sido escrito en código Java. Es el caso de Android NDK. Esta genial librería basta con implementarla desde el Android SDK y aplicar los cambios en tu proyecto.

android_ndk_from_androidcentralFoto de AndroidCentral

 

Bien, y eso ¿Para que me sirve?

Hay aplicaciones en Android en las cuales necesitarás utilizar demasiados recursos del dispositivo móvil y por ende, optimizar de la mejor manera posible los mismos. Esto es común en los juegos de video para móviles, por sus gráficos y motores de procesamiento necesitan utilizar gran parte del hardware que tiene el dispositivo móvil. Cosa que por sí solo, Java no nos puede ofrecer <<hasta cierto punto, por supuesto>>.

En resumen, puedes crear aplicaciones en Android con C++ o incluso hacer una mezcla de Java con C++.

Pruebas Unitarias Con JUnit

De las mejores prácticas que podemos realizar como desarrolladores, son las pruebas unitarias para comprobar que nuestro código funcionará cuando se encuentre en plan de producción.

Tal, como en otros frameworks y lenguajes, Android Studio nos ofrece las pruebas unitarias tanto para el código Java como para la experiencia de usuario en Android.

Si quieres saber ¿Cómo crear las pruebas unitarias en Android? puedes consultar en su documentación oficial.

 

Instant Run

Esta es de las funcionalidades introducidas recientemente. Para no esperar demasiado tiempos de carga cada vez que compilas nuestro código, Android Studio implementó esta nueva funcionalidad excelente para aplicar los cambios de código de una manera rápida.

Es decir que haces un cambio de 5 líneas de código, presionas el botón de instant run y de inmediato compilará el código y mostrará los cambios en el dispositivo móvil.

instant_run_from_netdna-cdnFoto de NetDNA-CDN

Claro, como todo en esta vida tiene sus ventajas y desventajas, desde mi experiencia en las últimas tres aplicaciones que he desarrollado (ElCaldo, NSEx iLifebelt y Semana Santa GT) te podría decir que hay momentos donde el instant run brilla por su ausencia, es decir que si compila los cambios pero aparece un mensaje tipo Toast para decir que debes reiniciar la actividad y entonces a la larga es como un tanto engorroso tener que reiniciar la actividad cada vez que utilizas instant run.

 

Editor De Código Inteligente

Ni siquiera has terminado de escribir el método y ya te esta autocompletando Android Studio, pero lo más curioso de todo esto es que a veces manejamos funciones, métodos, clases que incluso pueden llamarse igual en distintos paquetes, aún así Android Studio reconoce el contexto y me sugiere el más adecuado para la situación.

Es decir que es bastante inteligente el IDE para reconocer cuál será mi siguiente jugada dentro del código. También los que han visto las mejores del IDE, anteriormente cuando una línea de código te marcaba con error, te sugería cualquier ridícula solución para quitar la línea roja, pero ahora te ofrece soluciones con coherencia a resolver el error y no simplemente para quitar la fastidiosa línea roja debajo.

Traducciones A Distintos Idiomas

Android Studio es un abanderado para traducir las apps móviles a distintos idiomas, pues es sencillo, solamente se crea una carpeta con la terminación del idioma, luego creas un recurso tipo xml y agregas los strings con el id que contiene cada archivo de distinto idioma.

traductions_android_studio_from_stackoverflowFoto de StackOverflow

Te podría interesar: Descargar Android Studio

 

Estas son funcionalidades que caracterizan a nivel general a Android Studio, sin embargo han habido nuevas funcionalidades que en una próxima ocasión te compartiré para enterarnos de lo más actual del IDE por excelencia para desarrollar apps Android.

Viernes 17 de marzo de 2017

Juan José Contreras

Tutorial De Constraint Layout Android

Constraint Layout es la nueva tecnología de Android Studio para crear interfaces de usuario en distintos tamaños y resoluciones. Similar como pasa en xCode con los storyboards. Ahora bastará crear una vista e implementar los constraints para crear una interfaz de usuario de todos los tamaños de pantalla que existen en el mercado.

Empecemos Creando Nuestro Proyecto

Creamos un proyecto nuevo en Android Studio y le pondremos el nombre de TestingContraintLayout, puedes guardarlo donde quieras:

crear_proyecto_android_studio_firebase

Ya sabes, escoges tu Api, Seleccionamos un EmptyActivity y dejamos que el resto lo haga el IDE por nosotros:

creando_proyecto_android_firebase

¿Cómo implementar Constraint Layout?

Para lograr esto iremos al SDK Manager y nos situaremos en la pestaña de SDK Tools:

configurando_sdk_firebase

Puedes ver: ¿Qué es y para que sirve Android SDK?

 

En el renglón de Support Repository, marcamos la casilla <<ConstraintLayout for Android>> y <<Solver for ConstraintLayout>>. Presiona en aplicar y acepta los términos para instalar las librerías. Por cierto, debes poner atención a que versión de librería estás descargando, así al momento de implementar la dependencia tenga coherencia con el SDK.

En mi caso tengo la versión 1.0.2 de Contraint Layout por lo cual implementaremos la siguiente dependencia dentro mi archivo app.gradle

compile ‘com.android.support.constraint:constraint-layout:1.0.1’

Luego presionas el boton de sincronizar y con eso ya tenemos implementado Constraint Layout en nuestro proyecto.

dependencia_constraint_layout_android

Convirtiendo nuestro Layout a Constraint

Convertir tu clásico Linear Layout o Relative Layout a un Constraint no es tan complicado, sin embargo yo recomiendo que Constraint Layout se implemente en nuevos proyecto.

En los proyectos que se encuentran desarrollados y muy bien optimizados, no es tan aconsejable implementar esta tecnología, por el simple motivo que tendrían que mover todas las vistas y rediseñar la app (llevaría mucho tiempo).

Ahora situémonos en res/layout/activity_main.xml y abrimos el archivo.

xml_widgets_constraint_layout

En <<Component Tree>> marcamos con clic derecho nuestro layout (sea Linear o Relative) y seleccionamos la opción Convert layout to ConstraintLayout.

convertir_layout_constraint

Listo con eso hemos convertido nuestro layout a ConstraintLayout.

¿Cómo Agregar Una Constraint Android?

Los desarrolladores de Google quisieron implementar una nueva forma más intuitiva para interactuar con los constraints al estilo DRAG AND DROP, puedes crear tus constraints fácil y rápido.

Hay dos maneras de crear los contraint Layout, al igual que en muchos casos, puedes hacerlo de forma manual o de forma automatizada. En este tutorial te enseñare de manera manual, ya que para mí es más fiable que hacerlo de manera automática además que no es tan automático como lo vende Android Studio, tendremos que mover datos y hace que sea doble trabajo al final de cuentas.

Vamos a hacer que nuestro xml tenga los siguientes widgets y que se vean de esta manera:

constraint_layout_android

Bueno ya sabés lo sencillo que es colocar los widgets de Android. Aquí viene la parte que todos queremos saber, cada widgets ahora tendrá una especie de chibolitas en cada uno de sus extremos.

Tan sencillo como presionar el círculo y jalar hacia donde quieres que tomen márgenes y listo. Lo sé es bastante simple y extraño, y con los demás widgets procedemos de igual manera.

Recuerda que los widgets deben tener coherencia con cada uno de los widgets y márgenes. Si deseas tener más ilustraciones de los constraint layout, te recomiendo que revises la documentación oficial de Contraint Layout en Android para que no te queden dudas al respecto.
Es cuestión de práctica, cuando domines la lógica de los constraint se te haré súper fácil desarrollar interfaces de usuario ¡increíbles! en Android Studio con Constraint Layout.

Domingo 08 de enero de 2017

David Moreno

David Moreno
dm's blog

Thanks Debian

I sent this email to debian-private a few days ago, on the 10th anniversary of my Debian account creation:

Date: Fri, 14 Aug 2015 19:37:20 +0200
From: David Moreno 
To: debian-private@lists.debian.org
Subject: Retiring from Debian
User-Agent: Mutt/1.5.23 (2014-03-12)

[-- PGP output follows (current time: Sun 23 Aug 2015 06:18:36 PM CEST) --]
gpg: Signature made Fri 14 Aug 2015 07:37:20 PM CEST using RSA key ID 4DADEC2F
gpg: Good signature from "David Moreno "
gpg:                 aka "David Moreno "
gpg:                 aka "David Moreno (1984-08-08) "
[-- End of PGP output --]

[-- The following data is signed --]

Hi,

Ten years ago today (2005-08-14) my account was created:

https://nm.debian.org/public/person/damog

Today, I don't feel like Debian represents me and neither do I represent the
project anymore.

I had tried over the last couple of years to retake my involvement but lack of
motivation and time always got on the way, so the right thing to do for me is
to officially retire and gtfo.

I certainly learned a bunch from dozens of Debian people over these many years,
and I'm nothing but grateful with all of them; I will for sure carry the project
close to my heart — as I carry it with the Debian swirl I still have tattooed
on my back ;)

http://damog.net/blog/2005/06/29/debian-tattoo/

I have three packages left that have not been updated in forever and you can
consider orphaned now: gcolor2, libperl6-say-perl and libxml-treepp-perl.

With all best wishes,
David Moreno.
http://damog.net/


[-- End of signed data --]

I received a couple of questions about my decision here. I basically don’t feel like Debian represents my interests and neither do I represent the project – this doesn’t mean I don’t believe in free software, to the contrary. I think some of the best software advancements we’ve made as society are thanks to it. I don’t necessarily believe on how the project has evolved itself, whether that has been the right way, to regain relevancy and dominance, and if it’s remained primarily a way to feed dogmatism versus pragmatism. This is the perfect example of a tragic consequence. I was very happy to learn that the current Debian Conference being held in Germany got the highest attendance ever, hopefully that can be utilized in a significant and useful way.

Regardless, my contributions to Debian were never noteworthy so it’s also not that big of a deal. I just need to close cycles myself and move forward, and the ten year anniversary looked like a significant mark for that.

Poke me in case you wanna discuss some more. I’ll always be happy to. Specially over beer :)

Peace.

Lunes 29 de agosto de 2016

David Moreno

David Moreno
dm's blog

Webhook Setup with Facebook::Messenger::Bot

The documentation for the Facebook Messenger API points out how to setup your initial bot webhook. I just committed a quick patch that would make it very easy to setup a quick script to get it done using the unreleased and still in progress Perl’s Facebook::Messenger::Bot:

use Facebook::Messenger::Bot;

use constant VERIFY_TOKEN => 'imsosecret';

my $bot = Facebook::Messenger::Bot->new(); # no config specified!
$bot->expect_verify_token( VERIFY_TOKEN );
$bot->spin();

This should get you sorted. What endpoint would that be, though? Well that depends on how you’re giving Facebook access to your Plack’s .psgi application.

Domingo 21 de agosto de 2016

David Moreno

David Moreno
dm's blog

WIP: Perl bindings for Facebook Messenger

A couple of weeks ago I started looking into wrapping the Facebook Messenger API into Perl. Since all the calls are extremely simple using a REST API, I thought it could be easier and simpler even, to provide a small framework to hook bots using PSGI/Plack.

So I started putting some things together and with a very simple interface you could do a lot:

use strict;
use warnings;
use Facebook::Messenger::Bot;

my $bot = Facebook::Messenger::Bot->new({
    access_token   => '...',
    app_secret     => '...',
    verify_token   => '...'
});

$bot->register_hook_for('message', sub {
    my $bot = shift;
    my $message = shift;

    my $res = $bot->deliver({
        recipient => $message->sender,
        message => { text => "You said: " . $message->text() }
    });
    ...
});

$bot->spin();

You can hook a script like that as a .psgi file and plug it in to whatever you want.

Once you have some more decent user flow and whatnot, you can build something like:



…using a simple script like this one.

The work is not finished and not yet CPAN-ready but I’m posting this in case someone wants to join me in this mini-project or have suggestions, the work in progress is here.

Thanks!

Lunes 09 de febrero de 2015

Mi top 10 de metal en 2014, The Black Fucking List

Luego de haber sido abducido por extraterrestres por todo un año, y de no escribir ni purisísima mierda en este blog (No tengo excusa, lo acepto, he sido un vago para escribir últimamente) aún conservo la flama del metal ardiendo, –y no creo que se apague mientras este vivo–, así que a continuación listo los […]

Domingo 03 de agosto de 2014

KVM y libvirt en Slackware

KVM (Kernel-based Virtual Machine) es una de las mejores soluciones para virtualización dentro del kernel de Linux, junto a libvirt, que no es mas que un conjunto de herramientas para administrar KVM, juntos son una poderosa combinación para poder trabajar en entornos de desarrollo o en producción.

KVM ya se encuentra habilitado en los kernels entregados por Slackware, por lo que solamente hay que corroborar que nuestra máquina tenga soporte para virtualización, como Intel-VT o AMD-V, aunque actualmente la mayoría de procesadores para PC de escritorio o laptops tienen éste soporte, pero podemos verificar las CPU flags de la siguiente manera:

Para procesadores AMD:

$ grep --color svm /proc/cpuinfo

Para procesadores Intel:

$ grep --color vmx /proc/cpuinfo

La salida de éstos comandos debe darnos información con las flags del CPU que tenemos disponibles, de lo contrario sabremos que no contamos con un procesador adecuado para virtualizar.

Instalación de un entorno libvirt

Para instalar libvirt en Slackware es necesario instalar previamente varias dependencias, lo que puede resultar tedioso si no tuviésemos a la mano el repositorio de SlackBuilds.org (SBo).

La instalación es simple, podemos descargar los slackbuilds o bien utilizar sbopkg, seguir las listas de dependencias e instalarlo, siempre recordando leer los README para evaluar la instalación de paquetes opcionales, en especial con el paquete netcat-openbsd que suele tener problemas con otros paquetes.

Es importante tomar en cuenta que el slackbuild de libvirt viene por defecto para usar el grupo users del sistema, pero yo recomiendo tener otro grupo específico para poder aislar a otros usuarios del uso y administración de libvirt y las máquinas virtuales. La mejor forma es crear un grupo y luego añadir a los usuarios que necesiten virtualizar a éste grupo:

# groupadd libvirt
# gpasswd -a nombre-usuario libvirt

El comando gpasswd agregará a el usuario que necesitemos al grupo libvirt, o bien podemos modificar el archivo /etc/group y agregarlo manualmente. Los usuarios deberán reiniciar su sesión para poder cargar los permisos.

Es recomendable instalar otras herramientas como virt-manager, que no es mas que un administrador gráfico para libvirt, pero necesita muchas otras dependencias de gnome.

Qemu se debe instalar para poder crear las máquinas virtuales o bien utilizar la alternativa de Xen, pero ésta ultima tiene la desventaja de que solamente se podrá instalar en sistemas de 64 bits. Es importante agregar qemu al mismo grupo de virtualización al momento de compilarlo (KVMGROUP=libvirt).

Algunas herramientas extras son openvswitch y usbredir, que pueden agregar muchas mas funcionalidades a la creación y uso de nuestras maquinas virtuales.

Cambiando la carpeta de almacenamiento de libvirt

Libvirt por defecto utilizará la carpeta /var/lib/libvirt/images como la carpeta para crear las imágenes de los discos de nuestras máquinas virtuales, pero algunas veces necesitamos que las imágenes las tengamos en una unidad aparte, o una partición con mucho mas espacio.

Lo primero es asegurarnos de crear la carpeta donde queremos almacenar las imágenes de los discos de las máquinas virtuales:

# mkdir /nueva/carpeta/para/imagenes

Los permisos de acceso son importantes a ésta carpeta, solamente root debe poder accederlas:

# chown root:root /nueva/carpeta/para/imagenes
# chmod 755 /nueva/carpeta/para/imagenes

Para cambiar el pool de almacenamiento principal de libvirt a otra localidad podemos hacer uso de la herramienta virsh:

# virsh pool-destroy default
# virsh pool-undefine default
# virsh pool-define-as --name default --type dir --target /nueva/carpeta/para/imagenes
# virsh pool-autostart default
# virsh pool-build default
# virsh pool-start default

Los comandos anteriores primero realizan una destrucción de la información del pool default, luego lo eliminan de las definiciones para las máquinas virtuales, para luego crear una nueva definición, con el mismo nombre “default”; luego coloca de nuevo el pool “default” para que se habilite automáticamente al iniciar el servicio de libvirt; el comando pool-build se encarga de crear la información de la nueva carpeta, colocando información de tamaño y permisos, importante para que el sistema pueda saber cuanto espacio tiene disponible para las máquinas virtuales; y por último se inicia el pool “default” para que pueda ser utilizado.

Ahora solo resta divertirse con la virtualización.


Lunes 02 de junio de 2014

Plasmoid Simple Monitor

He trabajado bastante con Qt, casi desde su versión 3, cuando aún KDE era bastante liviano que lo utilizaban en varias distribuciones que usaban LiveCD, por lo que cuando comenzó a aparecer QtQuick, me dispuse a entender cómo funcionaba, aunque al inicio no fue muy simple, puesto que era una aplicación que utilizaba C++ y luego se cargaban objetos con QML.

Al evolucionar la tecnología de QtQuick, se hizo mas fácil crear aplicaciones, ya no hubo necesidad de mezclar lenguajes, si no simplemente utilizar QML y quizá combinarlo con algo de Javascript; mucho de ésto se ve reflejado en el sistema de plasmoids para KDE 4, que ha madurado bastante.

Mientras buscaba una forma de reemplazar mi viejo monitor de sistema gkrellm, el cual por cierto no lo he llegado a sustituir por completo, busqué entre la lista de aplicaciones disponibles en KDE-look.org y no encontré algo que me llamara mucho la atención, claro, era de esperarse, es una tecnología nueva, pocos la saben utilizar y habremos pocos que sepamos realmente crear interfaces visualmente atractivas, por lo que pocos suben sus aplicaciones a este sitio.

Tenía otra alternativa, que me pareció factible, utilizar conky, el cual es otra aplicación bastante buena para monitorear el sistema y bastante personalizable, pero no se lleva muy bien con KDE. También estaba superkaramba, pero muchos de los elementos que usa suelen ser llamadas a aplicaciones de terminal que al final no era lo que yo necesitaba, aunado a que superkaramba debe estar funcionando para que sus plasmoids funcionasen.

Así que decidí crear mi propio plasmoid, el cual nombré plasma-simpleMonitor, aunque de plasma aún no tiene mucho, pero el objetivo es vincularlo completamente al sistema de temas de KDE.

Había dos opciones, crear uno escrito en C++, lo que me ayudaría a realizarlo de manera mas simple, puesto que manejo a un nivel aceptable el lenguaje, pero tendría el inconveniente de cualquier otra persona que deseara probar el plasmoid tuviese que compilarlo, instalarlo, etc. Y no cualquier persona está dispuesta ha realizar ésto. Así que la decisión estaba tomada, el plasmoid sería hecho con QML y Javascript, de ésta manera, se puede descargar de la página y probarlo, incluso integrarse fácilmente con el instalador de plasmoids de KDE.

Las características mas importantes que tenía en mente para comenzar su desarrollo eran:

  • Capacidad de verificar el trabajo de los núcleos (cores) de mi CPU
  • Verificar la temperatura; se vuelve importante cuando se pone a trabajar a la máquina
  • Verificar el estado de la memoria y la swap
  • Un lugar para mantener la hora y fecha del sistema, de una manera mas vistosa
  • Verificar el tiempo que se ha mantenido encendida la máquina (uptime)

La idea comenzó con un boceto hecho en Inkscape, obviamente no podía comenzar a programar sin saber qué era lo que quería obtener como resultado.

Diseño inicial para plasma-simpleMonitor

plasma-simpleMonitor, Diseño inicial

Así que luego procedí a trabajar, en un par de días tuve la primera versión, pero obviamente no era muy atractiva visualmente, a lo que me puse a trabajar un poco mas en cómo se debería ver y al final llegué a tener una versión decente, la cual fue colocada en sitio KDE-look.org.

Luego de unos cuantos días de estar colocada en el sitio de KDE-Look, comenzó a tener aprobaciones como desacuerdos, como debe  ser, pero al final la experiencia ha sido buena, he tenido la oportunidad de ver cómo va poco a poco llegando a ser la herramienta que quería que fuera, aunque aún le falta camino por recorrer.

El código fuente se encuentra en GitHub: https://github.com/dhabyx/plasma-simpleMonitor liberado bajo una licencia GPL v3


Miércoles 29 de enero de 2014

Cambio de etiquetas para pendrives desde línea de comandos

Al momento de comprar una pendrive (nueva memoria USB) siempre tenía el incoveniente de cambiarle la etiqueta, ésto no es tan fácil ya que Linux por defecto no usa sistemas de archivos FAT, por lo que no funciona un simple click derecho.

En cambio es mas fácil desde línea de comandos en un solo paso pero hay que configurar una aplicación:

Lo primero es tener instalado el paquete floppy, que en el caso de slackware viene por defecto en una instalación completa, y si por alguna razón no lo han instalado lo mejor será ir a la carpeta a/ del disco de instalación e instalar el paquete floppy.

Una vez instalado solo resta configurarlo adecuadamente, el archivo /etc/mtools.conf trae ya unos datos de ejemplo, lo que debemos agregar al final del archivo es una línea como la siguiente (editando como superusuario “root”):

drive p: file="/dev/sdb1"

donde “p” es el nombre de una unidad como en DOS, por ello va acompañado de “:” y puedes escoger el nombre de letra que desees; luego el argumento de file debe ser la dirección hacia el dispositivo que deseamos administrar con ésta herramienta, que para ejemplo he colocado /dev/sdb1, ya que actualmente los discos son numerados con la nomenclatura /dev/sdX#, siendo X una letra, comenzando por “a” según el disco físico y # el número de partición, por lo que hay que tener cuidado en conocer realmente que nomenclatura ha sido asignada a nuestra pendrive.

Una vez configurado el archivo, puede ser usado para cualquier otro dispositivo que sea reconocido con ésta nomenclatura.

Para finalizar debemos crear un archivo en nuestra carpeta de usuario (no root):

$ cd ~
$ echo "mtools_skip_check=1" >> .mtoolsrc

y ahora es tiempo de cambiar etiquetas a nuestras pendrives:

$ mlabel p:NombreUSB

donde “p:” es la unidad que configuramos previamiente y lo que sigue a continuación es el nombre de la pendrive, que no debe pasar de 11 caracteres.

Si deseamos ver los cambios solo debemos verificar con:

$ mlabel -s p:

Martes 31 de diciembre de 2013

Mi top 10 del Metal en 2013

Sí, despues de tanto tiempo vuelvo a escribir de Metal, y no es que le haya dado la espalda al género, solo fue que me volví haragán para escribir (quizas es la crisis de los 30, quien sabe) pero, aunque tengo pendiente aún la lista de mis favoritos de 2012 (que algun día la publicaré), […]

Jueves 21 de febrero de 2013

Javier Aroche

Javier Aroche
Javier Aroche

What the next smartphone generation should aim for

5 years apart: HTC One X and the original iPhone

It’s been a long time since my first smartphone, and also my first mobile phone, the original iPhone. Since then smartphones are almost as powerful as netbooks, just look at the specs of my current phone, a HTC One X:

  • CPU: 1.5Ghz Quad-Core
  • 1280 x 720 4.7″ screen
  • 32GB on board storage
  • 1 GB RAM
  • 8 MP camera and decent sensor

Compared to the original iPhone hardware, everything is 3 or 4 times better. The Android OS is literally light-years from the crappy Windows Pocket/CE or Symbian OS experience, browsing from this phone feels almost like doing it from a traditional desktop PC.

I’m sure there is still room for improvement (specially on the little webkit browser), but also somehow feels like the phone hardware doesn’t to be that much powerful. I don’t think having a 8 core CPU will be noticeable unless you do really intense gaming. More Ram? hmm well, I’m not running a database server in the server; besides mobile OSs doesn’t run all applications in parallel at the same time, they keep one app active and the rest sleeping (plus services in the background).

More pixels on the screen? well, at 300dpi is already hard to see individual pixels. Same for tons of megapixels on the camera, that’s silly; at least HTC is betting for higher quality rather than just pack more megapixels.

However with all those improvements in the last years, there are two areas where I’d really like to see huge advances:

  • Battery life: It’s nice to have such a big screen, but tuning it on feels like burns the battery. Leaving my phone in stand by could easy past one day without charging, but it can’t take more than 6 hours of continuous use. I’d love so much to have a phone with a battery that lats a couple days like in the old days… I guess it’s too much to ask when every manufacturer tries to pack as much muscle on the phone as they can. Sigh.
  • Unbreakable glass screen: Scratches are almost no issue nowadays, but every time I drop my phone, I fear its going to shatter. I feel bad for iPhone and iPad mini users, because Apple loves so much pushing the glass to the border as much as they can… Beautiful aesthetics they say, shatter screens is what I see. At least most Android devices keep a reasonable ugly bezel, I like my devices being durable not just beautiful.

@neavilag's cracked iPad Mini

If you ask me about dreaming, I’d love so much my phone to be also my computer like the old Seabird phone concept:

To be honest, I don’t think this happening, Motorola tried to do something like this with the Atrix phone, it looked nice but it wasn’t powerful, after all the x86 architecture packs more force than ARM (if you don’t mind the power consumption). I don’t see phones and tablets reaching the same compute power (and versatility) as laptops anytime soon.

Miércoles 30 de enero de 2013

Javier Aroche

Javier Aroche
Javier Aroche

Goodbye Spanish, Hello English

When I started to hook up on Internet, like ten years ago, Spanish contents were quite few and the quality was way lower versus English ones; since then 99% of my searches are in English, unless I’ve to search for something local, I don’t see a reason too look for Spanish contents. 

My OS and my gadgets always have been configured to use English language since ever, actually using one in Spanish (because of regional auto settings or whatever) doesn’t feel right; and don’t make me talk about how annoying is to use a PC with the wrong keyboard shortcuts.

Over the past few years I have been reading a lot of English books, technical/science ones I’ve to say, I’m starting to become comfortable about switching to another language. I haven’t took any courses to property learn English, yet I need to check the dictionary fewer times nowadays.

I tend to get bored doing the same over and over, Spanish feels bored by now… I need a change. Secretly I’ve always hated Spanish, it’s so inconsistent (I think like a programmer, don’t mind me), it feels like a language that have been patched so many times over the centuries.

So, Why English? Anyone who have studied Computer Science (and most sciences), should know that Spanish lags way behind from English, trying to keep up with the latest technology is the key on this field. I don’t think English is better than Spanish as language, both have their irregular rules and exceptions, just feels like the next logical step. Also the key to property learn a language is practice, just like math.

I’d so love to be learning Esperanto, a highly structured language without the irregular forms non-sense… but, eh, it’s not really that useful out there. Shame. Neither I’m asking for the Newspeak of Nineteen Eighty-Four, but having to learn a lot of irregular forms of any language, feels like memorizing phone numbers.

So, I don’t think I’ll be writing Spanish anymore on this site, and hopefully elsewhere on the Internet.

PD: Also my latest laptop doesn’t have Spanish keyboard, so it’s nice to not be switching over and over.

Sábado 31 de marzo de 2012

Paulo Alvarado

Paulo Alvarado
pauloalvarado.com

Quisque vehicula dictum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis bibendum pulvinar lobortis. Vivamus volutpat risus eu diam laoreet eu sagittis augue condimentum. Nullam nec eros vitae leo viverra tincidunt. Mauris vitae aliquet elit. Suspendisse potenti. Praesent rhoncus metus sodales libero semper sit amet rutrum leo hendrerit. Pellentesque est lorem, commodo ac tristique et, condimentum quis arcu. Praesent in lacinia purus. Morbi quis lobortis dui. Quisque diam arcu, semper vel fringilla a, dignissim mollis nulla.

Vivamus et risus nisi, fermentum fermentum velit. Praesent consequat ante aliquet ipsum tincidunt sagittis. Suspendisse vitae sem neque. Praesent ut magna velit, non consectetur justo. Nullam placerat sem sed enim suscipit ac bibendum diam commodo. Aliquam vehicula sodales dui, ac rutrum turpis porttitor vitae. Proin lectus est, tempus eget aliquet quis, viverra et libero. Sed ligula nulla, sagittis quis tincidunt eget, hendrerit eget metus.

Nulla sed urna ac felis placerat pulvinar id sit amet neque. Nam porta fermentum luctus. Donec ante massa, ultrices ac hendrerit nec, vestibulum auctor lorem. Integer metus lectus, placerat quis rhoncus a, facilisis pharetra tellus. Sed ac eleifend nunc. In nisi mi, semper sed ultrices vel, iaculis sagittis nibh. Aliquam erat volutpat. In hac habitasse platea dictumst. Duis ut mi ante, vitae hendrerit enim. Pellentesque arcu dui, blandit ac rhoncus id, cursus ut leo. Sed consectetur, quam non semper pulvinar, lacus arcu posuere orci, ut congue ipsum dolor id lectus. Vivamus porttitor erat in tortor viverra dignissim ultrices justo facilisis.

Paulo Alvarado

Paulo Alvarado
pauloalvarado.com

Accumsan magna tincide

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis bibendum pulvinar lobortis. Vivamus volutpat risus eu diam laoreet eu sagittis augue condimentum. Nullam nec eros vitae leo viverra tincidunt. Mauris vitae aliquet elit. Suspendisse potenti. Praesent rhoncus metus sodales libero semper sit amet rutrum leo hendrerit. Pellentesque est lorem, commodo ac tristique et, condimentum quis arcu. Praesent in lacinia purus. Morbi quis lobortis dui. Quisque diam arcu, semper vel fringilla a, dignissim mollis nulla.

Vivamus et risus nisi, fermentum fermentum velit. Praesent consequat ante aliquet ipsum tincidunt sagittis. Suspendisse vitae sem neque. Praesent ut magna velit, non consectetur justo. Nullam placerat sem sed enim suscipit ac bibendum diam commodo. Aliquam vehicula sodales dui, ac rutrum turpis porttitor vitae. Proin lectus est, tempus eget aliquet quis, viverra et libero. Sed ligula nulla, sagittis quis tincidunt eget, hendrerit eget metus.

Nulla sed urna ac felis placerat pulvinar id sit amet neque. Nam porta fermentum luctus. Donec ante massa, ultrices ac hendrerit nec, vestibulum auctor lorem. Integer metus lectus, placerat quis rhoncus a, facilisis pharetra tellus. Sed ac eleifend nunc. In nisi mi, semper sed ultrices vel, iaculis sagittis nibh. Aliquam erat volutpat. In hac habitasse platea dictumst. Duis ut mi ante, vitae hendrerit enim. Pellentesque arcu dui, blandit ac rhoncus id, cursus ut leo. Sed consectetur, quam non semper pulvinar, lacus arcu posuere orci, ut congue ipsum dolor id lectus. Vivamus porttitor erat in tortor viverra dignissim ultrices justo facilisis.

Paulo Alvarado

Paulo Alvarado
pauloalvarado.com

Elucidate vehicula tempus

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis bibendum pulvinar lobortis. Vivamus volutpat risus eu diam laoreet eu sagittis augue condimentum. Nullam nec eros vitae leo viverra tincidunt. Mauris vitae aliquet elit. Suspendisse potenti. Praesent rhoncus metus sodales libero semper sit amet rutrum leo hendrerit. Pellentesque est lorem, commodo ac tristique et, condimentum quis arcu. Praesent in lacinia purus. Morbi quis lobortis dui. Quisque diam arcu, semper vel fringilla a, dignissim mollis nulla.

Vivamus et risus nisi, fermentum fermentum velit. Praesent consequat ante aliquet ipsum tincidunt sagittis. Suspendisse vitae sem neque. Praesent ut magna velit, non consectetur justo. Nullam placerat sem sed enim suscipit ac bibendum diam commodo. Aliquam vehicula sodales dui, ac rutrum turpis porttitor vitae. Proin lectus est, tempus eget aliquet quis, viverra et libero. Sed ligula nulla, sagittis quis tincidunt eget, hendrerit eget metus.

Nulla sed urna ac felis placerat pulvinar id sit amet neque. Nam porta fermentum luctus. Donec ante massa, ultrices ac hendrerit nec, vestibulum auctor lorem. Integer metus lectus, placerat quis rhoncus a, facilisis pharetra tellus. Sed ac eleifend nunc. In nisi mi, semper sed ultrices vel, iaculis sagittis nibh. Aliquam erat volutpat. In hac habitasse platea dictumst. Duis ut mi ante, vitae hendrerit enim. Pellentesque arcu dui, blandit ac rhoncus id, cursus ut leo. Sed consectetur, quam non semper pulvinar, lacus arcu posuere orci, ut congue ipsum dolor id lectus. Vivamus porttitor erat in tortor viverra dignissim ultrices justo facilisis.

Miércoles 21 de marzo de 2012

Byron Antonio Chamann

Byron Antonio Chamann
ChamanGT

Lo mejor de Tours en Guatemala solo con Source Tour

Guatemala es reconocido como un país turístico. Lugares como Tikal, Antigua Guatemala y Semuc Champey han ayudado a crear esa fama. Ahora bien, el país cuenta con muchísimas otras opciones. Internet ha venido a ayudar a que cuando alguien desea salir a descansar investigue previamente que lugares turísticos se encuentran en cada departamento y visitar lugares menos sonados (Lo que no necesariamente significa que sean lugares menos atractivos).

El inconveniente con lo anterior es que muchas veces se encuentra información de un lugar turístico pero no detalles sobre como llegar, tarifas, horarios, etc. Esta necesidad es la que viene a resolver Source Tour.

Recientemente en Prensa Libre se comentaba de esta iniciativa como una Tienda en linea de Tours. Realmente es más que eso, es una plataforma en donde un guatemalteco o extranjero puede conocer muchísimas opciones turísticas que el país ofrece. Además de lo anterior el sitio da el valor agregado de hacer reservaciones de Tours por toda Guatemala y pagarlos directamente en línea.

Así es mucho más sencillo organizar un viaje porque los detalles quedan cubiertos con toda la información que la plataforma brinda. Aprovechar de esta forma la tecnología no solo ayuda al sector Turistico del País sino también a las personas que buscan nuevas actividades para disfrutar en familia o con los amigos.

Vale la pena visitar el proyecto >> Source Tour

Viernes 20 de enero de 2012

Byron Antonio Chamann

Byron Antonio Chamann
ChamanGT

E-learning en Guatemala y las universidades a distancia

La educación a distancia es uno de los modelos pedagógicos más efectivos hoy en día. Se lleva a cabo gracias a las múltiples plataformas online, que funcionan por medio de las TICs (Tecnologías de la información y la comunicación); y ha representado una excelente oportunidad para el aprendizaje y la difusión del conocimiento en todas las esferas del saber humano.

Dada la necesidad de educación continua y permanente, actualmente algunas universidades cuentan con ofertas educativas e-learning, que permiten la comunicación y colaboración con compañeros “de clase” y docentes, sin limitaciones espacio-temporales; ya que no es necesario asistir a un aula permanente.

Entre sus múltiples ventajas están que los alumnos pueden elegir sus propios horarios; pueden ingresar a la plataforma online desde cualquier lugar donde tengan acceso a un dispositivo con conexión a Internet; aprendizaje colectivo sin límites geográficos; actualización constante de los contenidos; permite una mayor conciliación con la vida familiar y laboral, etc.

Una de las Universidades de Guatemala a distancia que se ha destacado por su educación e-learning, es Atlantic International University. Con estudiantes de más de 180 países, la AIU se adapta a la diversidad de sus alumnos, mediante programas de estudio personalizados. Ofrece más de 300 carreras en niveles de Bachelor (Licenciatura), Maestría y Doctorado, en diversas ramas del conocimiento, como lo son: artes, negocios, ciencias, tecnología, estudios sociales y humanos, etc.

Hoy en día, con el auge de la Web 2.0, la educación a distancia, representa una gran oportunidad para las personas que disponen de poco tiempo para dedicarse al enriquecimiento profesional. Permitiendo la conformación de modelos cooperativos, donde los estudiantes, son a la vez quienes pueden aportar y al mismo tiempo beneficiarios de dichos aportes.

La facilidad de acceso, la posibilidad de reducción del tiempo de aprendizaje, la compatibilidad de actividades, la posibilidad de actualización inmediata, la comodidad, entre otros beneficios, posiciona al e-learning como una forma de educación muy deseable hoy en día.

Lunes 09 de enero de 2012

Byron Antonio Chamann

Byron Antonio Chamann
ChamanGT

Solución de outsourcing en Guatemala

El término Outsourcing se refiere a la cooperación en la que una empresa, encarga a otra, ciertos procesos de diversa índole dentro de la organización. Podría ser la fabricación o prestación de algún componente de sus productos o servicios, parte de su producción, o bien la totalidad de la misma.

Generalmente suele darse cuando una firma, identifica que algunos de sus procesos podrían darse más eficientemente, si subcontrata a una agencia especializada para desarrollar esas actividades; lo cual conlleva una mejoría en los niveles productivos, ya que la empresa, únicamente deberá enfocarse en la función central de su negocio. Este tipo de procesos suele ser altamente utilizado, puesto que las empresas especializadas en ciertos procesos productivos, pueden hacerlo mejor y a un costo menor del que manejaría cualquier organización, haciéndolo por sí misma.

Al momento de optar por Outsourcing, dentro de una compañía, hay ciertos aspectos a tener en cuenta, como los antecedentes, referencias y experiencia de la firma que se va a contratar. Para el outsourcing en Guatemala y Centroamérica, Grupo Misol, es una firma que reúne varias agencias especializadas en diversos procesos productivos, entre ellos, conserjería, puestos administrativos, mensajería, personal temporal en diversas áreas, impulsación de marcas, productos de limpieza,  mantenimiento de jardines, mantenimiento de elevadores y gradas eléctricas, montacargas, limpieza empresarial, impermeabilizantes, etc. Con más de 30 años de experiencia, brindando capital humano capacitado y confiable para llevar a cabo las actividades específicas, dentro del ámbito corporativo en que se desenvuelvan.

Hacer Outsourcing ha sido una columna de apoyo para muchas empresas, es más que subcontratación; más bien es hacer alianzas con firmas colaboradoras que harán más eficientes las tareas fundamentales de una organización.

Lunes 02 de agosto de 2010

Spotify en Gentoo [sin Wine]

Soptify WINHace un par de semanas se anuncio la primera version de Spotify para Linux, el detalle esta en que solo dieron un repositorio para Debian/Ubuntu y nada mas. Calvin Klein Underwear Baratos No se porque se les habra dado por sacar el programa para GNU/Linux sin dar codigo fuente (ok es privativo el dichoso Spotify pero porque encuadrar a ciertas distribuciones nada mas? ). Slip Calvin Klein Outlet A mi eso de emular programas con Wine no me gusta a menos que el cliente/jefe no de otra opcion.

The post Spotify en Gentoo [sin Wine] appeared first on SiRGt's Blog.

Domingo 01 de agosto de 2010

Oracle Reports sobre Ubuntu

Tan abandonado tengo este asunto (si la cantaleta de cada nuevo post) eso de (ahora si) apreciar el tiempo libre es jodido jaja, anyways. Adidas Ultra Boost France Me puse a revisar y a pensar como revivir este asunto y creo que la mejor manera es limpiar los drafts que facil llevaran guardados desde septiembre de 2009. Acheter Adidas Ultra Boost El mas interesante de todos (o que merecia la pena dedicarle 10 minutos a terminar de pulirlo) era este. El titulo creo que debio ser algo mas especifico como “Configuracion de Samba, Wine, Oracle forms 6 en Ubuntu 8.04 LTS” pero ni modo. El pijeo estuvo asi, como siempre los pseudo gerentes de sistemas se fijan en software libre “si y solo si” les representa un ahorro ya sea en plata o en metidas de huevo (en este caso creo que eran las dos jajaja). Adidas Ultra Boost Pas Cher El requerimiento fue “sencillo” queremos este morongazo de maquinas con Ubuntu (y en la letra pequeña decia “pero que jale el Oracle Forms”). Adidas Ultra Boost Uncaged France Luego de cranearla un cacho lo mas paja entre comillas o lo unico talvez que se podia hacer era montarlo con Wine y esta es mas o menos la vuelta que hay que dar para que el asunto jale.

  • Actualizar los repositorios y hacer un upgrade solo por si acaso algo anda fuera de fecha

[bash]sudo aptitude update && sudo aptitude upgrade[/bash]

  • instalar smbfs

[bash]sudo aptitude install smbfs[/bash]

  • montar la unidad (a mano)

[bash]sudo mount -t smbfs -o username=nombre_usuario,password=pass_usuario,ip=192.168.1.100 //server_remoto/unidad /punto_de/montaje[/bash]

  • para montar la unidad al inicio de la sesion de usuario agregar esta linea al archivo /etc/fstab

[bash]//198.168.1.100/C /home/usuario/.wine/drive_c/punto_de_montaje smbfs username=nombre_usuario,password=pass_usuario 0 0[/bash]

  • instalar Wine

[bash]sudo aptitude install wine[/bash]

  • luego de terminar la instalacion ejecutar el comando wincfg y configurar el entorno de wine a Windows 98

  • descargar winetricks a /home/usuario/.wine/ (esto no recuerdo para que lo hice pero en cuanto regrese la memoria les actualizo el post)

[bash]wget -c http://www.kegel.com/wine/winetricks[/bash]

  • Instalar Oracle Forms 6i (solo tuve oportunidad de probar esta version, no se si funciona con alguna mas reciente)

[bash]wine /media/cdrom0/setup.exe (o donde tengan montado el cdrom y/o como se llame el instalador del Oracle Forms[/bash] Primero se instala el Oracle Forms Developer (si acaso no se lee bien la imagen, lo que se esta instalando es Forms Runtime 6.0.8.11.3 y Oracle TCP/IP protocol adapter 8.0.6…. este ultimo se instala a mano porque al ser un ambiente wine la instalacion no detecta tarjetas de red y no lo pone (esto nos valio dos semanas entenderlo xD)) Luego se instala el Oracle Reports Developer

  • agregar / modificar las siguientes llaves en el registro en HKEY_LOCAL_MACHINE/SOFTWARE (notese que las diagonales son dobles)

[bash] FORMS60_PATH=C:\\path\\en_wine\\a_la_carpeta_bin_del_oracle_forms\\bin;c:\\path\\en_wine_a_la_carpeta_de_librerias_si_existiera\\comun\\libs UI_ICON=c:\\path_a_la_carpeta_de_iconos_si_hubiere sistema=L local=nombre_del_string_de_conexion [/bash]

  • La aplicacion se levanta con una linea como esta dependiendo del modulo, user y pass…

[bash]wine /home/usuario/.wine/drive_c/carpeta_oracle/BIN/ifrun60.EXE /media/punto_de_montaje/aplicacion/main.fmx user/pass@string_de_conexion[/bash] y Listo. El ultimo paso seria crear un Launcher dentro de ubuntu para cargar alguna aplicacion, esto se hace de la siguiente manera:

  • Crear un “launcher” en Ubuntu
  • se le pone el nombre de la aplicacion que se desea
  • en el campo “command” colocamos esta linea

[bash]wine /home/usuario/.wine/drive_c/carpeta_oracle/BIN/ifrun60.EXE /media/punto_de_montaje/aplicacion/main.fmx user/pass@string_de_conexion[/bash] y listo.

The post Oracle Reports sobre Ubuntu appeared first on SiRGt's Blog.

Miércoles 16 de septiembre de 2009

Problemas Tecnicos

Entre antes de ayer y ayer tuve problemas tecnicos con el VPS que aloja ahora este blog (si porfin migre de DreamHost a un VPS), el clavo era que el consumo del CPU se disparaba al 400%, esto significa que el servidor se quedaba trabado, la solucion a mi problema la encontre en los foros de Linode.

El problema era especificamente la configuracion del apache, el muy infame no soportaba el trafico entrante y se enloopaba tratando de soportarlo, conclusion server al suelo.

Esperamos no tener mas de estas sorpresas aunque son experiencia =D

salu2

The post Problemas Tecnicos appeared first on SiRGt's Blog.

Domingo 28 de septiembre de 2008

GNU/Linux + Modem Edge USB + Debian Sid

Hoy estuve configurando el modem Edge usb de mi primo, en nuestro sistema operativo favorito. con un #lsusb Bus 001 Device 002: ID 22b8:4902 Motorola PCS Triplet GSM Phone (AT) Luego de buscar, gracias a msamour , con un par de cambios para Guatemala. Primero un rápido #apt-get install wvdial Luego el archivo de configuración […]

Lunes 01 de septiembre de 2008

Heartbeat, mi configuración

Cuando estaba leyendo documentación, acerca de heartbeat lo que más me gustó, es el nombre de la técnica utilizada para nodeFencing, STONITH: “Shut the other node in the head”, que buen hack ;), a groso modo cuando un nodo del cluster es declarado muerto, este se asegura de que realmente lo esté, con un tiro […]

Miércoles 09 de abril de 2008

El hack en el Incompatible Timesharing System

Cada vez que leía o escuchaba a Stallman decir: “El Laboratorio de IA usaba un sistema operativo denominado ITS (Incompatible Timesharing System)” no comprendia el hack que decía tener el nombre del sistema “Incompatible Timesharing System”, hasta hace un par de días. Me encontraba en la biblioteca central de la universidad, con el libro del […]