mardi 30 décembre 2014

Alcaltel One Touch Pop C3, Low cost mais boostable

J'ai troqué mon Xperia E1 d'une valeur de 150€ contre un One Touch Pop C3 à 64€ que j'ai acheté à Electro Dépot à Brie Comte Robert.

Je me suis cassé pas mal la tête mais j'ai pu le booster, car à la base, il capte beaucoup mieux que le E1, mais il est loin d'être aussi réactif que les mobiles qui valent au moins 5 fois plus cher...

Donc premièrement, il faut désinstaller un maximum d'applications manuellement.

Puis il faut installer Framaroot, et sélectionner le deuxième exploit dans la liste proposée.

Une fois le Pop C3 rooté, il faut installer Apus Booster+, puis Root Booster, Busybox, et je vous conseille aussi Root Browser et No-Frills CPU Control.

Apus Booster va vous permettre, à la demande, de forcer rapidement la fermeture de tous les programmes en cours d'exécution afin de libérer rapidement beaucoup de RAM (qui n'est que de 512Mo sur l'Alcaltel One Touch Pop C3).

Root Booster va vous permettre de régler automatiquement les paramètres du CPU pour avoir des performances optimales.

Root Browser est un navigateur de fichiers avancé en mode root.

Busybox vous offre la possibilité d'utiliser les commandes Linux sur votre Androïd, qui n'est autre qu'un système Linux-like à la base.

Amusez-vous bien avec votre système survolté !!!

vendredi 14 novembre 2014

Activer le mode debug sur Sony Xperia E1

Les options pour développeur ne sont pas visibles par défaut sur le Sony Xperia E1 et probablement sur d'autres modèles, depuis Android 4.2 si j'ai bien saisi.

Pour activer les options pour développeur sur le Sony Xperia E1 et accessoirement sur les autres modèles, il faut aller dans :

Réglages/A propos du téléphone

Puis il faut cliquer 7 fois sur le champs "Numéro de build".

Have fun !

vendredi 7 novembre 2014

Arduino / CAN-Bus Shield, l'arnaque ?

J'ai acheté récemment une carte Arduino, un CAN-Bus Shield et une prise OBD-II

Il y a un faux contact entre deux parties métalliques entre l'Arduino et le CAN-Bus Shield.

Après avoir contacté le constructeur du CAN-Bus Shield, il semble effectivement qu'ils soient au courant du problème.

Ils m'ont dit qu'ils ne remboursaient pas et que je devais coller un morceau de carton entre les deux parties métalliques qui se touchent (les deux prises en faite, donc le connecteur PC-USB et la prise style DB9)... J'ai tout essayé mais rien à faire.

J'ai donc perdu environs 60€ pour un ensemble qui ne fonctionne pas...

Je vais donc repasser chez le vendeur (Lextronic de La-Queue-En-Brie), mais j'ai dépassé les sept jours !

Edit : Au 25/08/2015, le magasin m'a échangé les deux modules pour des neufs :)

Sony Xperia E1 et mauvaise réception du signal GSM, la solution !

J'ai cru comprendre que le Sony Xperia E1 avait par défaut à l'achat des problèmes de réception dus au logiciel interne du téléphone. La solution, après l'avoir expérimenté ce matin, est de mettre à jour le système avec la dernière version !

Pour cela, il faut paramétrer une connexion Wifi, et cliquer sur l'icône "Centre de mise à jour" et aller ensuite sur l'onglet "Système", puis lancer le téléchargement et installer la mise à jour.

En allant alors dans le menu "Réglages" puis "A propos du téléphone", les informations suivantes devraient s'afficher (version en date du 7 novembre 2014):

Numéro du modèle : D2005
Information processeur : Qualcomm MSM8210
Version Android : 4.4.2
Version de bande de base : 8x10-BAAAANWZQ-104060-31
Version du noyau : 3.4.0-perf administrator@ubuntu-scm08 #1 Fri Oct 10 14:14:32 CST 2014
Numéro de build : 20.1.A.2.13

Enjoy !

samedi 18 octobre 2014

Arduino Uno / CAN-Bus Shield

Le programme Arduino utilisé :
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13
// some code added by reunisoft ntic974
#include <SPI.h>
#include "mcp_can.h"

unsigned char Flag_Recv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];

MCP_CAN CAN(10);                                            // Set CS to pin 10

void setup()
{
    Serial.begin(115200);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}

INT32U canId = 0x000;

void loop()
{
    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf
      
        canId = CAN.getCanId();
        if(canId<16)
        {
          Serial.print('0');
        }
        Serial.print(canId, HEX); Serial.print('>');
      
        for(int i = 0; i<len; i++)    // print the data
        {
          if (buf[i]<16)
          {
            Serial.print('0');
          }
        
          Serial.print(buf[i],HEX);
        
          if (i<len-1)
          {
            Serial.print(":");
          }
        }
      
        Serial.println();
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/


Exemple de sortie sur le moniteur série (PORT COM5: sur mon poste), à l'arrêt du module :
50005>00:00:00:00:00:00:C0:00:00:05:00:05:00:05:00
00>E7:E0:00:00
00>
00>
17>
17>
1E30F0>
1E30F0>
30F00005>FF:FF:FF:FF:FF:FF:FF|F:FF:FF:FF:01:05:00:F0:30:1E:00

mercredi 8 octobre 2014

C# WebServer CrashTest :) Hosting = somee.com

Ce code source crashe complètement le serveur web sur lequel il est exécuté, et le rend indisponible un bon moment. Il est nécessaire de copier le fichier exécutable PhantomJS sur le serveur distant, dans le répertoire \bin.

    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 1000; i++)
        {
            System.Threading.Thread t = new System.Threading.Thread(new ThreadStart(mythread));
            t.Start();
        }                                
    }

    private void mythread()
    {
        logcrlf(Guid.NewGuid().ToString());

        try
        {
            IWebDriver driver = new PhantomJSDriver();
            driver.Navigate().GoToUrl("http://www.any-web-address-here.re");
            logcrlf(driver.PageSource);
            logcrlf(driver.Title);
            driver.Quit();
        }        catch (Exception ex)
        {
            logcrlf(ex.Message);
        }
    }

    private void logcrlf(string s)
    {
        Response.Write(s + "<br/>");

    }
   
    private void log(string s)
    {
        Response.Write(s);
    }

jeudi 18 septembre 2014

Bloquer les connexions furtives sur Androïd (Sony Xperia E1)

Les systèmes Androïd qu'on retrouve sur de nombreux téléphones mobiles contiennent des applications qui se connectent de façon furtive sur internet quand vous êtes connectés (donc probablement constamment pour une majorité des lecteurs).

Quand vous installez une nouvelle application depuis Google Play Store, votre téléphone vous avertit et vous montre quels droits vous accordez à l'application installée, comme par exemple le droit de se connecter sur internet, celui d'utiliser le GPS, celui de se connecter en WIFI etc etc...

Mais en ce qui concerne les applications déjà installées sur votre téléphone à l'achat, vous ne savez pas lesquelles communiquent sur internet, lesquelles ont quels droits etc... C'est embêtant, et c'est bien malin de la part de Google, car ainsi ils installent à votre insu des mouchards qui vous espionnent potentiellement :)

Pour pouvoir contrôler tous les flux qui entrent et sortent de votre téléphone, utilisez la fameuse application "Pare-feu sans root". Cela fonctionne à merveille ! Je n'ai plus à tenter de détruire tous les processus qui communiquent (c'est impossible, et au bout d'un moment, après la désinstallation d'un paquet d'applications, l'Androïd est inutilisable et il faut tout reflasher).

Voilà ! Merci aux créateur de ce merveilleux firewall pour téléphones mobiles !!!!

dimanche 14 septembre 2014

C# + PhantomJS + Google Directions API

        private string googleApiKey = "enter your api key here after activating api";
        internal void StartGoogleAPIScraper()
        {
            string origin = "A";
            string dest = "B";

            while (true)
            {
                this.websiteToDatamine = "https://maps.googleapis.com/maps/api/directions/xml?origin=" + origin + "&destination=" + dest + "&key=" + googleApiKey;

                driver.Navigate().GoToUrl(websiteToDatamine);
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.LoadXml(driver.PageSource);

                string status = xmldoc.SelectSingleNode("DirectionsResponse/status").InnerText;
                if (status == "OK")
                {
                    log("good response from server");
                    XmlNodeList nodelist = xmldoc.SelectNodes("DirectionsResponse/route/leg/step/duration/value");
                    int totalseconds = 0;
                    foreach (XmlNode node in nodelist)
                        totalseconds = totalseconds + Int32.Parse(node.InnerText);
                    log("total seconds = " + totalseconds + " or " + ((double)totalseconds / 60) + " minutes or " + ((double) totalseconds/60/60) + " hours");

                    nodelist = xmldoc.SelectNodes("DirectionsResponse/route/leg/step/distance/value");
                    int totalmeters = 0;
                    foreach (XmlNode node in nodelist)
                        totalmeters = totalmeters + Int32.Parse(node.InnerText);
                    log("total meters = " + totalmeters + " or " + ((double)totalmeters / 1000) + " kilometers");
                }
                else
                {
                    log("bad response from server = " + status);
                }

                System.Threading.Thread.Sleep(1000);
            }
        }

vendredi 12 septembre 2014

c# / lire fichier xlsx / dk.xlsxreader

            FileStream f = File.Open(@"C:\MYFILE.xlsx", FileMode.Open);

            XlsxReader xr = new XlsxReader(f);
            TRJsonFactoryProcessor.XlsxReader.Sheet s = xr.FirstSheet;
            log(s.Rows.Count().ToString());

            int rowCounter = 0;
            IEnumerable<IEnumerable<KeyValuePair<string, string>>> ikvp = s.Rows;
            foreach (IEnumerable<KeyValuePair<string, string>> kvp in ikvp)
            {
                string strText = string.Empty;

                rowCounter++;

                IEnumerable<KeyValuePair<string, string>> currentRow = kvp;

                List<string> json_content = new List<string>();
                int currentColIndex = 0;
                foreach (KeyValuePair<string, string> currentCell in currentRow)
                { ... here you access your data ... }
            }

 

 

lundi 8 septembre 2014

C# / Autofac / Interface + Classe de base et "fonction de base" + Classes héritantes résolues pour appel de la "fonction de base".

Programme principal déclencheur du BusinessProcess, dont l'objectif est de d'enregistrer dans un ContainerBuilder Autofac, des classes héritantes d'une classe de base héritant elle-même d'une interface unique. Ensuite, objectif de résoudre les classes héritantes qui sont dans le container pour pouvoir appeler la méthode dans la classe de base (OUF!) :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace AutofacTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ContainerBuilder builder = new ContainerBuilder();
            builder.RegisterType<BusinessProcessNormal>().SingleInstance();
            builder.RegisterType<BusinessProcessAdvanced>().SingleInstance();
            IContainer container = builder.Build();

            container.Resolve<BusinessProcessAdvanced>().WaitForHumanDecision();
            container.Resolve<BusinessProcessNormal>().WaitForHumanDecision();

            Console.WriteLine("Fin du BusinessProcess.");
            Console.ReadLine();
        }
    }
}


Interface de laquelle hérite uniquement la classe de base :

using System;
namespace AutofacTest
{
    interface IBusinessProcess
    {
        void Buy();
        void Sell();
    }
}


Classe de base héritant de l'interface IBusinessProcess et comportant entre autres la méthode WaitForHumanDecision, puis ensuite déclaration de deux classes héritantes de la classe de base :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autofac;

namespace AutofacTest
{
    public class BusinessProcessBase : IBusinessProcess
    {
        public virtual void Sell()
        {
            Console.WriteLine("Default Selling.");
        }

        public virtual void Buy()
        {
            Console.WriteLine("Default Buying.");
        }

        public void WaitForHumanDecision()
        {
            Console.WriteLine("Waiting for human decision.");
        }
    }

    public class BusinessProcessAdvanced : BusinessProcessBase
    {
        public override void Sell()
        {
            Console.WriteLine("Advanced Selling.");
        }

        public override void Buy()
        {
            Console.WriteLine("Advanced Buying.");
        }
    }

    public class BusinessProcessNormal : BusinessProcessBase
    {
        public override void Sell()
        {
            Console.WriteLine("Normal Selling.");
        }
      
        public override void Buy()
        {
            Console.WriteLine("Normal Buying.");          
        }
    }
}

dimanche 31 août 2014

ContextSwitchDeadlock was detected / C#

ContextSwitchDeadlock was detected Message: Le CLR n'a pas pu effectuer de transition du contexte COM 0x443080 au contexte COM 0x442f10 pendant 60 secondes. Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.
Un lien intéressant pour désactiver cette fonction : http://harriyott.com/2006/05/contextswitchdeadlock-was-detected

jeudi 28 août 2014

commandlinefu.com is the place to record those command-line gems that you return to again and again.

http://www.commandlinefu.com/commands/browse
What's this? commandlinefu.com is the place to record those command-line gems that you return to again and again. Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

how-to-write-your-own-metric-monitors (gmetric)

http://unixindia.blogspot.fr/2010/08/how-to-write-your-own-metric-monitors.html

mercredi 27 août 2014

BA431 - True/Deterministic Random Number Generator

http://www.barco-silex.com/ip-cores/encryption-engine/BA431

Selenium WebDriver ; Les "user pref" (ex : pour modifier le User Agent)

En C#, modifiables par exemple comme ceci :
private IWebDriver GetFirefoxDriver() { FirefoxProfile profile = new FirefoxProfile(); profile.SetPreference("general.useragent.override", CustomUserAgent.Firefox31UserAgent1); return new FirefoxDriver(profile); } public static class CustomUserAgent { public static string Firefox31UserAgent1 = "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"; }
La liste (disponible sur Windows dans le répertoire suivant par exemple) : C:\Users\[Utilisateur]\AppData\Local\Temp\anonymous.7e548eeaffbc4ad5ac7eb557795ad7f1.webdriver-profile\
user_pref("app.update.auto", false); user_pref("app.update.enabled", false); user_pref("browser.download.manager.showWhenStarting", false); user_pref("browser.EULA.override", true); user_pref("browser.EULA.3.accepted", true); user_pref("browser.link.open_external", 2); user_pref("browser.link.open_newwindow", 2); user_pref("browser.offline", false); user_pref("browser.safebrowsing.enabled", false); user_pref("browser.safebrowsing.malware.enabled", false); user_pref("browser.search.update", false); user_pref("browser.sessionstore.resume_from_crash", false); user_pref("browser.shell.checkDefaultBrowser", false); user_pref("browser.tabs.warnOnClose", false); user_pref("browser.tabs.warnOnOpen", false); user_pref("devtools.errorconsole.enabled", true); user_pref("dom.disable_open_during_load", false); user_pref("extensions.autoDisableScopes", 10); user_pref("extensions.blocklist.enabled", false); user_pref("extensions.logging.enabled", true); user_pref("extensions.update.enabled", false); user_pref("extensions.update.notifyUser", false); user_pref("layout.css.devPixelsPerPx", "1.0"); user_pref("network.manage-offline-status", false); user_pref("network.http.phishy-userpass-length", 255); user_pref("offline-apps.allow_by_default", true); user_pref("prompts.tab_modal.enabled", false); user_pref("security.csp.enable", false); user_pref("security.fileuri.origin_policy", 3); user_pref("security.fileuri.strict_origin_policy", false); user_pref("security.warn_entering_secure", false); user_pref("security.warn_entering_secure.show_once", false); user_pref("security.warn_entering_weak", false); user_pref("security.warn_entering_weak.show_once", false); user_pref("security.warn_leaving_secure", false); user_pref("security.warn_leaving_secure.show_once", false); user_pref("security.warn_submit_insecure", false); user_pref("security.warn_viewing_mixed", false); user_pref("security.warn_viewing_mixed.show_once", false); user_pref("signon.rememberSignons", false); user_pref("toolkit.networkmanager.disable", true); user_pref("toolkit.telemetry.prompted", 2); user_pref("toolkit.telemetry.enabled", false); user_pref("toolkit.telemetry.rejected", true); user_pref("browser.dom.window.dump.enabled", true); user_pref("browser.newtab.url", "about:blank"); user_pref("browser.newtabpage.enabled", false); user_pref("browser.startup.page", 1); user_pref("browser.startup.homepage", "about:blank"); user_pref("dom.max_chrome_script_run_time", 30); user_pref("dom.max_script_run_time", 30); user_pref("dom.report_all_js_exceptions", true); user_pref("javascript.options.showInConsole", true); user_pref("network.http.max-connections-per-server", 10); user_pref("startup.homepage_welcome_url", ""); user_pref("webdriver_accept_untrusted_certs", true); user_pref("webdriver_assume_untrusted_issuer", true); user_pref("general.useragent.override", "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"); user_pref("webdriver_firefox_port", 7055); user_pref("webdriver_enable_native_events", true);

mercredi 13 août 2014

CleanCacheScript v2.0 : Fermer FF+IE+Chrome et nettoyer les cache FF+IE+Chrome ainsi que Opéra+Safari+Flash

KillBrowsers and clean cache v2.0 : CleanCacheScript v2.0
@REM FROM MYSELF

taskkill /F /IM firefox.exe
taskkill /F /IM iexplore.exe
taskkill /F /IM chrome.exe

@REM FROM STACKOVERFLOW https://stackoverflow.com/questions/12621969/clear-cache-of-browser-by-command-line

erase "%TEMP%\*.*" /f /s /q
for /D %%i in ("%TEMP%\*") do RD /S /Q "%%i"

erase "%TMP%\*.*" /f /s /q
for /D %%i in ("%TMP%\*") do RD /S /Q "%%i"

erase "%ALLUSERSPROFILE%\TEMP\*.*" /f /s /q
for /D %%i in ("%ALLUSERSPROFILE%\TEMP\*") do RD /S /Q "%%i"

erase "%SystemRoot%\TEMP\*.*" /f /s /q
for /D %%i in ("%SystemRoot%\TEMP\*") do RD /S /Q "%%i"

@rem Clear IE cache - (Deletes Temporary Internet Files Only)
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
erase "%LOCALAPPDATA%\Microsoft\Windows\Tempor~1\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Microsoft\Windows\Tempor~1\*") do RD /S /Q "%%i"

@rem Clear Google Chrome cache
erase "%LOCALAPPDATA%\Google\Chrome\User Data\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Google\Chrome\User Data\*") do RD /S /Q "%%i"

@rem Clear Firefox cache
erase "%LOCALAPPDATA%\Mozilla\Firefox\Profiles\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Mozilla\Firefox\Profiles\*") do RD /S /Q "%%i"

@FROM STACKOVERFLOW http://www.catonmat.net/blog/clear-privacy-ie-firefox-opera-chrome-safari/

set ChromeDir=C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data

del /q /s /f "%ChromeDir%"
rd /s /q "%ChromeDir%"

set DataDir=C:\Users\%USERNAME%\AppData\Local\Mozilla\Firefox\Profiles

del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"

for /d %%x in (C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do del /q /s /f %%x\*sqlite

set DataDir=C:\Users\%USERNAME%\AppData\Local\Opera\Opera
set DataDir2=C:\Users\%USERNAME%\AppData\Roaming\Opera\Opera

del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"

del /q /s /f "%DataDir2%"
rd /s /q "%DataDir2%"

set DataDir=C:\Users\%USERNAME%\AppData\Local\Applec~1\Safari
set DataDir2=C:\Users\%USERNAME%\AppData\Roaming\Applec~1\Safari

del /q /s /f "%DataDir%\History"
rd /s /q "%DataDir%\History"

del /q /s /f "%DataDir%\Cache.db"
del /q /s /f "%DataDir%\WebpageIcons.db"

del /q /s /f "%DataDir2%"
rd /s /q "%DataDir2%"

set FlashCookies=C:\Users\%USERNAME%\AppData\Roaming\Macromedia\Flashp~1

del /q /s /f "%FlashCookies%"
rd /s /q "%FlashCookies%"


pause

(CleanCacheScript v1.0) Script pour stopper Firefox, Internet Explorer, Chrome et pour nettoyer les caches concernés

A l'aide de cet article sur StackOverflow et de quelques commandes "taskkill" que j'ai ajoutées, voici un script qui vous permets de fermer immédiatement Firefox, Google Chrome et Internet Explorer et de nettoyer les caches de ces applications. Créez un fichier KillNCleanFF_IE_CH.bat et mettez le contenu suivant dans le fichier :
taskkill /F /IM firefox.exe
taskkill /F /IM iexplore.exe
taskkill /F /IM chrome.exe

erase "%TEMP%\*.*" /f /s /q
for /D %%i in ("%TEMP%\*") do RD /S /Q "%%i"

erase "%TMP%\*.*" /f /s /q
for /D %%i in ("%TMP%\*") do RD /S /Q "%%i"

erase "%ALLUSERSPROFILE%\TEMP\*.*" /f /s /q
for /D %%i in ("%ALLUSERSPROFILE%\TEMP\*") do RD /S /Q "%%i"

erase "%SystemRoot%\TEMP\*.*" /f /s /q
for /D %%i in ("%SystemRoot%\TEMP\*") do RD /S /Q "%%i"

@rem Clear IE cache - (Deletes Temporary Internet Files Only)
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
erase "%LOCALAPPDATA%\Microsoft\Windows\Tempor~1\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Microsoft\Windows\Tempor~1\*") do RD /S /Q "%%i"

@rem Clear Google Chrome cache
erase "%LOCALAPPDATA%\Google\Chrome\User Data\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Google\Chrome\User Data\*") do RD /S /Q "%%i"

@rem Clear Firefox cache
erase "%LOCALAPPDATA%\Mozilla\Firefox\Profiles\*.*" /f /s /q
for /D %%i in ("%LOCALAPPDATA%\Mozilla\Firefox\Profiles\*") do RD /S /Q "%%i"

pause

Et à chaque fois que votre patron passe à votre bureau, cliquez sur le fichier et ni vu ni connu, tout est clean sur les navigateurs web lol !!!!!! (Pensez à enlever la dernière ligne "Pause" pour plus de furtivité, et à renommer le fichier en "ILoveMyBoss.Bat" hahaha).

lundi 14 juillet 2014

API DM et JQuery : Obtenir les 100 meilleures videos dailymotion du canal music contenant dancehall, et les trailers associes, mis a jour en temps-reel

<!DOCTYPE html>
<!-- Source code from http://ntic974.blogspot.com 13/07/2014 -->
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
    $.getJSON("https://api.dailymotion.com/videos?fields=title,url,embed_html%2Cviews_last_day%2Cviews_last_hour%2Cviews_last_month%2Cviews_last_week%2Cviews_total&channel=music&search=dancehall&sort=visited-hour&limit=5",
    function( data ) {
        console.log(data);
        var items = [];
        $.each( data, function( key, val ) {
            console.log(key);
            if (key=='list'){
                $.each(val, function(subkey,subval){
                    console.log(subkey + ":" + subval);
                    $.each(subval, function(subkey2, subval2){
                        console.log(subkey2 + ":" + subval2);
                        var $title = '';
                        if (subkey2=='title'){
                            title = subval2;
                        }
                        if (subkey2=='url'){
                            items.push("<a href='" + subval2 + "'>" + title + "</a><br/>");
                        }
                        if (subkey2=='embed_html'){
                            //console.log(subval2);
                            items.push(subval2 + '<br/><br/><br/>');
                        }
                    });
                });
            }
        });
       
    $( "<ul/>", {
        "class": "my-new-list",
        html: items.join( "" )
        }).appendTo( "body" );
    }); 
});
</script>
</head>
<body>
Sorted by visited month<br/>
<br/>
</body>
</html>

dimanche 13 juillet 2014

API Dailymotion et JQuery, afficher les 100 news les plus consultées sur Dailymotion durant les dernières 24h

<!DOCTYPE html>
<!-- Source code from http://ntic974.blogspot.com 13/07/2014 -->
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
    $.getJSON("https://api.dailymotion.com/videos?fields=url&channel=news&sort=visited-today&limit=100",
    function( data ) {
        console.log(data);
        var items = [];
        $.each( data, function( key, val ) {
            console.log(key);
            //items.push( "<li id='" + key + "'>key = " + key + " : val = " + val + "</li>" );
            if (key=='list'){
                //items.push("List detected");
                $.each(val, function(subkey,subval){
                    console.log(subkey + ":" + subval);
                    //items.push( "<li id='" + subkey + "'>subkey = " + subkey + " : subval = " + subval + "</li>" );               
                    $.each(subval, function(subkey2, subval2){
                        console.log(subkey2 + ":" + subval2);
                        //items.push( "<li id='" + subkey2 + "'>subkey2 = " + subkey2 + " : subval2 = " + subval2 + "</li>" );               
                        if (subkey2=='views_last_day'){
                            items.push("views_last_day = " + subval2 + "<br/>");
                        }
                        if (subkey2=='url'){
                            items.push("<a href='" + subval2 + "'>" + subval2 + "</a><br/>");
                        }
                    });
                });
            }
        });
       
    $( "<ul/>", {
        "class": "my-new-list",
        html: items.join( "" )
        }).appendTo( "body" );
    }); 
});
</script>
</head>
<body>
</body>
</html>

API Dailymotion et JQuery, évolution du dernier code posté

Cette version n'affiche que les 100 premiers liens canal music pays France les plus consultés sur Dailymotion durant la dernière heure, et affiche aussi le nombre de vues sur la dernière journée, sans les sorties debug...

<!DOCTYPE html>
<!-- Source code from http://ntic974.blogspot.com 13/07/2014 -->
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
    $.getJSON("https://api.dailymotion.com/videos?channel=music&sort=visited-hour&fields=url,views_last_day,country,description&limit=100",
    function( data ) {
        console.log(data);
        var items = [];
        $.each( data, function( key, val ) {
            console.log(key);
            //items.push( "<li id='" + key + "'>key = " + key + " : val = " + val + "</li>" );
            if (key=='list'){
                //items.push("List detected");
                $.each(val, function(subkey,subval){
                    console.log(subkey + ":" + subval);
                    //items.push( "<li id='" + subkey + "'>subkey = " + subkey + " : subval = " + subval + "</li>" );               
                    $.each(subval, function(subkey2, subval2){
                        console.log(subkey2 + ":" + subval2);
                        //items.push( "<li id='" + subkey2 + "'>subkey2 = " + subkey2 + " : subval2 = " + subval2 + "</li>" );               
                        if (subkey2=='views_last_day'){
                            items.push("views_last_day = " + subval2 + "<br/>");
                        }
                        if (subkey2=='url'){
                            items.push("<a href='" + subval2 + "'>" + subval2 + "</a><br/>");
                        }
                    });
                });
            }
        });
       
    $( "<ul/>", {
        "class": "my-new-list",
        html: items.join( "" )
        }).appendTo( "body" );
    }); 
});

</script>
</head>
<body>
</body>
</html>



API Dailymotion et JQuery Part III

Objectif : Obtenir les vidéos du canal music les plus vues pour le pays France la dernière journée et pouvoir générer un lien automatique pour chaque vidéo retournée par l'API Dailymotion.

<!DOCTYPE html>
<!-- Source code from http://ntic974.blogspot.com 13/07/2014 -->
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
    $.getJSON("https://api.dailymotion.com/videos?channel=music&country=FR&sort=visited-hour&fields=url,views_last_day",
    function( data ) {
        console.log(data);
        var items = [];
        $.each( data, function( key, val ) {
            console.log(key);
            items.push( "<li id='" + key + "'>key = " + key + " : val = " + val + "</li>" );
            if (key=='list'){
                //items.push("List detected");
                $.each(val, function(subkey,subval){
                    console.log(subkey + ":" + subval);
                    items.push( "<li id='" + subkey + "'>subkey = " + subkey + " : subval = " + subval + "</li>" );               
                    $.each(subval, function(subkey2, subval2){
                        console.log(subkey2 + ":" + subval2);
                        items.push( "<li id='" + subkey2 + "'>subkey2 = " + subkey2 + " : subval2 = " + subval2 + "</li>" );               
                        if (subkey2=='url'){
                            items.push("url = <a href='" + subval2 + "'>" + subval2 + "</a>");
                        }
                    });
                });
            }
        });
       
    $( "<ul/>", {
        "class": "my-new-list",
        html: items.join( "" )
        }).appendTo( "body" );
    }); 
});
</script>
</head>
<body>
</body>
</html>

API Dailymotion et JQuery part II :)

Obtenir les vidéos du channel "music" qui ont eu le plus de visites durant la dernière heure pour le pays France :

<!DOCTYPE html>
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("p").hide();
  });

//https://api.dailymotion.com/video/xxt41x_glenn-gould-little-prelude-in-c-minor-bwv-934_music?fields=ratings_total,country,comments_total,created_time,description,geoloc,isrc,upc,views_last_day
//https://api.dailymotion.com/videos?channel=music&country=FR&sort=visited-hour
$.getJSON("https://api.dailymotion.com/videos?channel=music&country=FR&sort=visited-hour",
function( data ) {
    console.log(data);
    var items = [];
    $.each( data, function( key, val ) {
        console.log(key);
        items.push( "<li id='" + key + "'>key = " + key + " : val = " + val + "</li>" );
        if (key=='list'){
            //items.push("List detected");
            $.each(val, function(subkey,subval){
                console.log(subkey + ":" + subval);
                items.push( "<li id='" + subkey + "'>subkey = " + subkey + " : subval = " + subval + "</li>" );               
                $.each(subval, function(subkey2, subval2){
                    console.log(subkey2 + ":" + subval2);
                    items.push( "<li id='" + subkey2 + "'>subkey2 = " + subkey2 + " : subval2 = " + subval2 + "</li>" );               
                });
            });
        }
    });
   
$( "<ul/>", {
    "class": "my-new-list",
    html: items.join( "" )
    }).appendTo( "body" );
});
 
});

</script>
</head>
<body>
<h2>This is a heading</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>Click me</button>
</body>
</html>

API Dailymotion et JQuery, petits tests, part I ?


Obtention d'informations à propos d'une oeuvre ; Channel Dailymotion = music.
Importation de JQuery depuis code.jquery.com (nécessité connexion internet).


<!DOCTYPE html>
<html>
<head>
<!--<script src="./jquery-2.1.1.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("p").hide();
  });

//https://api.dailymotion.com/video/xxt41x_glenn-gould-little-prelude-in-c-minor-bwv-934_music?fields=ratings_total,country,comments_total,created_time,description,geoloc,isrc,upc,views_last_day
//https://api.dailymotion.com/videos?channel=music&country=FR&sort=visited-hour
$.getJSON("https://api.dailymotion.com/video/xxt41x_glenn-gould-little-prelude-in-c-minor-bwv-934_music?fields=ratings_total,country,comments_total,created_time,description,geoloc,isrc,upc,views_last_day",
function( data ) {
    console.log(data);
    var items = [];
    $.each( data, function( key, val ) {
        console.log(key);
        items.push( "<li id='" + key + "'>" + key + " : [" + val + "]</li>" );
    });
   
$( "<ul/>", {
    "class": "my-new-list",
    html: items.join( "" )
    }).appendTo( "body" );
});
 
});
</script>
</head>
<body>
<h2>This is a heading</h2>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>Click me</button>
</body>
</html>

samedi 12 juillet 2014

API Dailymotion et découverte de vidéos intéressantes

En jouant avec l'API Dailymotion j'ai émis une requête pour avoir la liste des vidéos qui ont les meilleurs taux de progression, filtrés par vidéos musicales. Voici la requête

https://api.dailymotion.com/videos?fields=country,genre%2Curl%2Cviews_last_day%2Cviews_total&channel=music&personal=0&sort=trending

Au jour d'aujourd'hui, c'est à dire le 12 Juillet 2014, en 3ème position dans cette liste on a le résultat suivant :

      "country": "KR",
      "genre": null,
      "url": "http://www.dailymotion.com/video/x218dzr_tyalejaj_music",
      "views_last_day": 34665,
      "views_total": 104838

En allant sur la vidéo en question, dont l'URL est http://www.dailymotion.com/video/x218dzr_tyalejaj_music

J'ai découvert une émission coréenne appelée "Show me the money" et qui présente des rappeurs et rappeuses coréens qui ont vraiment un bon niveau pour beaucoup... Voilà, comme quoi l'API Dailymotion peut servir à trouver des vidéos intéressantes. La vidéo de l'émission "Show me the money" est une des vidéos qui ont le plus de progression en ce moment !!

lundi 30 juin 2014

Rooter un Samsung Galaxy GS-S5360 Androïd 2.3.6

Rooter un Samsung Galaxy GS-S5360 Androïd 2.3.6

Version de la bande de base S5360XXMG1

Version Kernel 2.6.35.7 dpi@DELL319 #1 Fri Sep 6 18:12:02 KST 2013

Numéro de version GINGERBREAD.XXMI1

1/ Utiliser le tutoriel à l'emplacement suivant :
http://forums.cnetfrance.fr/topic/1212870-rooter-son-galaxy-y-ace-gt-s5630-sous-android-2-3-6/

Ils fournissent un fichier update.zip à copier sur le téléphone (avec au préalable l'installation de Kies qui est le seul moyen de transférer un fichier du pc vers le tél).

Alternative possible : télécharger directement le fichier zip à la racine du système du fichier du téléphone, sdcard il me semble. Téléchargement depuis le site http://forum.xda-developers.com/attachment.php?attachmentid=1621554&d=1357478494

2/ Si vous n'avez pas suivi le tutoriel donné en 1/ alors après avoir copié le fichier à la racine du système de fichiers de votre tél (ou téléchargé), rebootez votre tél en maintenant la touche Home+On+Vol haut et choisissez le fichier zip et le tél rebootera ensuite.




jeudi 22 mai 2014

Programmation Androïd : Obtention des réseaux Wifi connus

    WifiManager myWifiManager = null;


    public void getConfiguredNetworks(){


        try {
            myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        } catch (Exception e) {
            //log("Exception:" + e.getMessage());
        }

        if ((myWifiManager!=null) && (myWifiManager.isWifiEnabled()==true)){
            log("Getting configured networks...");
            List<WifiConfiguration> lstWifiConfiguration = myWifiManager.getConfiguredNetworks();
            for(int i=0;i<lstWifiConfiguration.size();i++){
                WifiConfiguration wifiConfiguration = lstWifiConfiguration.get(i);
                log("Config" + i + ":SSID="+wifiConfiguration.SSID);
                log("Config" + i + ":   BSSID="+wifiConfiguration.BSSID);
                log("Config" + i + ":   preSharedKey="+wifiConfiguration.preSharedKey);
                String[] strWepKeys = wifiConfiguration.wepKeys;
                for(int j=0;j<strWepKeys.length;j++){
                    log("Config" + i + ":   WepKey" + j + ":" + strWepKeys[j]);
                }
            }
        }
    }

mercredi 21 mai 2014

Nouvelle application Androïd Wififun (Scanner de réseaux WIFI)

Cliquez ici pour télécharger Androïd Wififun 0.2 Beta Release.

Cette version au 31/05/2014 contient en plus une fonction de scan de réseaux wifi dit "additif", c'est-à-dire que chaque nouveau réseau wifi détecté est loggué dans le fichier wififun-scan.log ; Seuls les 5 derniers réseaux wifi détectés sont affichés, et si un réseau est toujours disponible au moment du scan alors une étoile (*) est affichée en face du SSID. Le bouton "Test" contient du code en cours de développement, à savoir l'utilisation du GPS, du réseau WIFI et du réseau télécom pour localiser l'endroit de la détection de chaque antenne par latitude et longitude. L'association entre coordonnées GPS et bornes WIFI détectées n'est pas encore développée.

Cette version au 21/05/2014 permets de scanner les réseaux WIFI (SSID, BSSID, Fréquence, Capacités...) et de logguer les résultats dans un fichier sur /mnt/sdcard/wififun.log

Toutes les fonctions offertes sont :
- Start wifi : Démarrer le wifi et se connecter automatiquement à un réseau connu si possible
- Stop wifi : Arrêter le wifi
- Scan SSIDs : Eventuellement se déconnecter d'un éventuel réseau connu et Scanner les réseaux Wifi environnants
- Get IP : Obtenir l'adresse IP de l'Androïd
- Log to file : Autoriser le log dans un fichier /mnt/sdcard/wififun.log
- Clear log file : Supprimer le fichier de log
- Clear screen : Effacer le log à l'écran
- Test : Fonction beta en cours de développement (Scan de SSID "additif")

La fonction Test en cours de développement liste tous les SSID aux alentours et les stocke dans une liste. Chaque SSID est accompagné de son BSSID. Le couple SSID+BSSID fait office de clé unique ; L'avenir de cette fonction est incertain mais je vais tenter de produire quelque chose de sympa pour les Wifi Addicts :)

s

mardi 20 mai 2014

Androïd ; Playing with storage info


    public void test(){
        try {
            File file = Environment.getExternalStorageDirectory();
            String strFile = file.getPath();
            Log.d("wififun", "ext storage dir ="  + strFile);
            Log.d("wififun", "ext storage length ="  + file.length());
            Log.d("wififun", "ext storage total space ="  + file.getTotalSpace()/1024/1024 + "mb");
            Log.d("wififun", "ext storage free space ="  + file.getFreeSpace()/1024/1024 + "mb");

            File myFile = new File(strFile + "/wififun.log");
            Log.d("wififun","can write new log file= " + myFile.canWrite());
            Log.d("wififun","exists new log file= "+myFile.exists());
            Log.d("wififun","size new log file= "+myFile.length());

            FileOutputStream fileOutputStream = new FileOutputStream(myFile);
            String str = "message debug de test d'écriture dans log file";
            fileOutputStream.write(str.getBytes());

            fileOutputStream.close();

        } catch (Exception e) {
            log("Exception:test:"+e.getMessage());
        }
    }

mercredi 14 mai 2014

Androïd : ScrollView contenant un LinearLayout vertical :

Dans l'activity_main.xml :
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:layout_below="@+id/editText"
        android:layout_above="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/linearLayout"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:orientation="vertical">
        </LinearLayout>
    </ScrollView>


Dans le OnCreate du MainActivity.java :
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
        for(int i=0;i<50;i++) {
            TextView textView = new TextView(this);
            textView.setText("inside_" + i);
            linearLayout.addView(textView);
        }


vendredi 9 mai 2014

Androïd programmation : Tentative (KO) d'arrêt de processus avec su (tél non rooté)

            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(p.getOutputStream());
            String killCommand = "am force-stop com.android.smspush";
            os.writeBytes(killCommand + "\n");
            os.writeBytes("exit\n");
            os.flush();

mercredi 7 mai 2014

Débuter avec le TelephonyManager et l'ActivityManager sur Androïd

package com.reunisoft.gsmhack.gsmhack;

import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.telephony.CellIdentityGsm;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellLocation;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.text.Layout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

// A DVA FREE OPEN SOURCE DEMO
public class MainActivity extends ActionBarActivity {

    int i = 0;

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        refreshAllInfos();

        final Button button = (Button)findViewById(R.id.button);
        button.setText("Refresh");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                refreshAllInfos();
            }
        });
    }

    public void refreshAllInfos() {
        try {
            TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            String str = "IMEI=" + telephonyManager.getDeviceId() + "\r\n";
            str += "Line 1 number=" + telephonyManager.getLine1Number() + "\r\n";
            str += "Network Op = " + telephonyManager.getNetworkOperatorName() + "\r\n";

            boolean roaming = telephonyManager.isNetworkRoaming();
            str += "Roaming = " + String.valueOf(roaming) + "\r\n";
            str += "Soft version = " + telephonyManager.getDeviceSoftwareVersion() + "\r\n";

            final GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
            str += "Cell ID = " + cellLocation.getCid() + "\r\nActive processes ID = ";

            ActivityManager manager =  (ActivityManager)getSystemService(ACTIVITY_SERVICE);
            final List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = manager.getRunningAppProcesses();
            for(int i=0;i<runningAppProcesses.size();i++){
                ActivityManager.RunningAppProcessInfo rapi = (ActivityManager.RunningAppProcessInfo) runningAppProcesses.get(i);
                str += rapi.pid + "/";
            }
          
            updateTextView(str);
        }
        catch (Exception e){
            updateTextView(e.getMessage());
        }

    }

    public void updateTextView(String toThis) {
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(toThis);
        return;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /* Called when the application is minimized */
    @Override
    protected void onPause()
    {
        super.onPause();
    }

    /* Called when the application resumes */
    @Override
    protected void onResume()
    {
        super.onResume();
    }

}

Nouvelle application Androïd : LotoFun

LotoFun est une application Androïd qui vous donne huit numéros au hasard compris entre 1et 49 lorsque vous lancez l'application. Un bouton "Quitter" permets alors de sortir de l'application.

Vous pouvez télécharger la dernière version de LotoFun pour Androïd en cliquant sur le lien ci-dessous (directement depuis votre périphérique Androïd) :


Il est probable que vous ayez à modifier les paramètres de sécurité de votre système Androïd, afin d'autoriser les applications ne provenant pas de Google Play Store.

mardi 6 mai 2014

Programmation Androïd ; Les bases du Wifi

Android Manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.reunisoft.lotofun.lotofunmodule01" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.reunisoft.lotofun.lotofunmodule01.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-feature android:name="android.hardware.wifi" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

</manifest>

Dans le MainActivity.java :
package com.reunisoft.lotofun.lotofunmodule01;

import android.net.wifi.WifiManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.content.Context;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText editText = (EditText) findViewById(R.id.editText);

        try {
            WifiManager myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            boolean wasEnabled = myWifiManager.isWifiEnabled();

            myWifiManager.setWifiEnabled(true);
            while (!myWifiManager.isWifiEnabled()) {
                editText.setText("Enabling Wifi...", TextView.BufferType.NORMAL);
            }

            if (myWifiManager.isWifiEnabled() == true) {
                editText.append("Wifi is enabled");

            }
            else
                editText.append("Wifi is not enabled");

        }
        catch (Exception e) {
            editText.setText(e.getMessage(), TextView.BufferType.NORMAL);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}