Configurar DNS Server en router Jazztel ZTE F680

Recientemente he actualizado mi conexión a fibra óptica (Jazztel). Como tengo un equipo dedicado a servidor, me ha parecido interesante poder utilizar el router como servidor DNS. De esta forma es posible acceder al servidor por nombre lo que es mejor que andar tocando el fichero /etc/hosts en cada equipo que se conecta a la red.

El router es ZTE F680.

En primer lugar, en el apartado:

Network -> Lan -> DHCP Server

Marcaremos el check Assign DNS y en el campo DNS Server1 IP Address pondremos la IP del router. Pulsaremos el botón “submit” para confirmar.

zte-network-lan

A continuación, en el apartado:

Application -> DNS Service -> Domain Name

Configuraremos el nombre del dominio que queramos utilizar. En mi caso es “sourcerebels.com”.

zte-application-dns-domain

En el apartado:

Application -> DNS Service -> DNS

Configuraremos la ip del router (192.168.1.1) y el servidor DNS de Google (8.8.8.8):

zte-application-dns-dns

Para finalizar, en el apartado:

Application -> DNS Service -> Hosts

Definiremos los hosts que queramos así como la IP, en mi caso he definido el host con nombre “dev”.

zte-application-dns-hosts

De esta manera podemos ver los DNS que utiliza nuestro equipo (Mac o Linux):

cat /etc/resolv.conf

La salida de este comando en mi caso es:

 
#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#
domain sourcerebels.com
nameserver 192.168.1.1
nameserver 8.8.8.8

También comprobamos que la maquina es visible por nombre.

ping dev.sourcerebels.com

La salida de este comando en mi caso es:

PING dev.sourcerebels.com (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=39.791 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=60.916 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=84.559 ms
^C
--- dev.sourcerebels.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 39.791/61.755/84.559/18.286 ms

Crear el lanzador de Android Studio en GNU/Linux

Me gusta poder ejecutar las apps que tengo instaladas desde el lanzador de aplicaciones de gnome (unity, o en mac spotlight) sin ayuda del ratón, únicamente teclando su nombre.

Hasta ahora, en GNU/Linux, venía utilizando menulibre para crear manualmente la entrada de Android Studio (o cualquier otro programa no instalado vía gestor de paquetes del sistema).

Hoy he descubierto que existe una opción de menú para hacerlo:

tools -> Create Desktop Entry...

Bueno es saberlo 😀

img_20160930_073546

Centralizar las versiones de las librerías utilizadas por Gradle

Cuando tenemos un proyecto con varios módulos, a veces, nos interesa tener un lugar centralizado dónde definir las versiones de las librerías que utilizaremos.

De esta manera, si varios módulos del proyecto, utilizan la misma librería nos aseguraremos que todos estén usando la misma versión.

En el fichero build.gradle de la carpeta raíz, en el apartado “ext”, definiremos las versiones a utilizar:

ext {
    supportLibrary = '24.2.0'
    googlePlayServices = '9.4.0'
    junit = '4.12'
}

En el fichero build.gradle de cada uno de los módulos, en el apartado “dependencies”, haremos referencia a las versiones definidas de la siguiente manera:

dependencies {

    def versions = rootProject.ext

    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile "junit:junit:" + versions.junit
    androidTestCompile "junit:junit:" + versions.junit
    compile "com.android.support:appcompat-v7:" + versions.supportLibrary
    compile "com.android.support:design:" + versions.supportLibrary
    compile "com.google.android.gms:play-services-maps:" + versions.googlePlayServices
    compile "com.google.android.gms:play-services-location:" + versions.googlePlayServices
}

Abrir la navegación en la app de Google Maps con un Intent

La documentación se puede consultar en la página Google Maps Intents.

public static void navigateExternalTo(Context context, double latitude, double longitude) {
    String uri = String.format(Locale.ENGLISH, "google.navigation:q=%1$f,%2$f", latitude, longitude);
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
    intent.setPackage("com.google.android.apps.maps");
    context.startActivity(intent);
}

Forzar mayúsculas con NavigationView

En el fichero de estilos, definir un nuevo estilo:

<style name="navigation_view_text_style">
    <item name="android:textAllCaps">true</item>
</style>

A la hora de aplicarlo, tenemos dos opciones. Si queremos que aplique a todos los TextView incluyendo los de la vista “header”:

<android.support.design.widget.NavigationView
    ...
    app:theme="@style/navigation_view_text_style" />

Si sólo queremos que aplique a los items del listado:

<android.support.design.widget.NavigationView
    ...
    app:itemTextAppearance="@style/navigation_view_text_style" />

Saludos

Tamaños de texto Material Design

    <dimen name="abc_text_size_body_1_material">14sp</dimen>
    <dimen name="abc_text_size_body_2_material">14sp</dimen>
    <dimen name="abc_text_size_button_material">14sp</dimen>
    <dimen name="abc_text_size_caption_material">12sp</dimen>
    <dimen name="abc_text_size_display_1_material">34sp</dimen>
    <dimen name="abc_text_size_display_2_material">45sp</dimen>
    <dimen name="abc_text_size_display_3_material">56sp</dimen>
    <dimen name="abc_text_size_display_4_material">112sp</dimen>
    <dimen name="abc_text_size_headline_material">24sp</dimen>
    <dimen name="abc_text_size_large_material">22sp</dimen>
    <dimen name="abc_text_size_medium_material">18sp</dimen>
    <dimen name="abc_text_size_menu_material">16sp</dimen>
    <dimen name="abc_text_size_small_material">14sp</dimen>
    <dimen name="abc_text_size_subhead_material">16sp</dimen>
    <dimen name="abc_text_size_subtitle_material_toolbar">16dp</dimen>
    <dimen name="abc_text_size_title_material">20sp</dimen>
    <dimen name="abc_text_size_title_material_toolbar">20dp</dimen>