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.");          
        }
    }
}