TuxErrante

Libertà vo cercando, ch'è sì cara, come sa chi per lei vita rifiuta

[java] Primi passi con le Stringhe

Un semplice esercizio per iniziare a capire come si comporta il Java con le stringhe.

Consegna :

  1. Realizzate una classe java che vi permetta di implementare le seguenti operazioni:
  2. acquisizione di una stringa da tastiera e stampa della stringa
  3. verifica se una stringa contiene il dittongo “ae”;
  4. verifica del valore del primo carattere di una stringa inserita da tastiera; ed il quinto (se c’e’)
  5. produzione di un nuovo array di byte usando l’insieme di caratteri di default sulla piattaforma (getBytes());
  6. trovare la prima occorrenza in cui si trova un carattere in una stringa acquisita da tastiera e stamparla
  7. trovare la prima occorrenza in cui si trova una sottostringa in una stringa acquisita da tastiera e stamparla
  8. trovare la lunghezza di una stringa letta da tastiera
  9. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere;
  10. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere e terminando al carattere 8;
  11. realizzare una nuova stringa che porti in minuscolo TUTTI i caratteri della stringa di partenza letta da tastiera;
  12. realizzare una copia della stringa immessa da tastiera ma senza spazi iniziali e finali;
  13. realizzare una stringa che rappresenti il valore intero dell’intero letto da tastiera;
/home/alex/workspace/stringhe/src/Stringhe.java

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Stringhe {

    /**
     @author Alessandro Affinito
     */
    public static void main(String[] argsthrows IOException {
     
        InputStreamReader reader new InputStreamReader (System.in);
        BufferedReader in new BufferedReader (reader);
     
        // acquisizione di una stringa da tastiera e stampa
        String str new String();
        System.out.println(” Iserisci uno o piu’ caratteri: “);
        try{
            str in.readLine();
        }catch (IOException e){
            System.out.println(” Si è verificato un errore : “+e);
        }
        System.out.println(” Hai inserito : “+str );
     
        // 2. verifica se una stringa contiene il dittongo “ae”;
        String trovami=“ae”;
        System.out.println(“\n La stringa di prova contiene \”ae\”? “str.containstrovami ));
     
//      3. verifica del valore del primo carattere di una stringa inserita da tastiera; ed il quinto (se c’e’)
        System.out.println(“\n il primo carattere della stringa e’ : “str.charAt(0));
        if (str.length()>4)
            System.out.println(” ed il quinto e’ : “str.charAt(4));
        else
            System.out.println(” La stringa inserita ha meno di cinque caratteri.”);
     
//      4. produzione di un nuovo array di byte usando l’insieme di caratteri di default sulla piattaforma (getBytes());
        byte []vettoreBites str.getBytes();
     
//      5. trovare la prima occorrenza in cui si trova un carattere in una stringa acquisita da tastiera e stamparla
        System.out.println(” prima occorrenza della \’a\’: “str.indexOf(‘a’) );
     
//      6. trovare la prima occorrenza in cui si trova una sottostringa in una stringa acquisita da tastiera e stamparla
        String substring “asd”;
        System.out.println(” prima occorrenza della \'”+substring+“\’: “str.indexOf(substring) );
     
     
//      7. trovare la lunghezza di una stringa letta da tastiera
        System.out.println(” Dimensione della stringa inserita = “str.length() );
     
//      8. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere;
        String substr1 str.substring(4);
     
//      9. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere e terminando al carattere 8;
        String substr2 str.substring(47);
     
//      10.realizzare una nuova stringa che porti in minuscolo TUTTI i caratteri della stringa di partenza letta da tastiera;
        String strLow str.toLowerCase();
     
//      11.realizzare una copia della stringa immessa da tastiera ma senza spazi iniziali e finali;
        String cleaned str.trim();
     
//      12.realizzare una stringa che rappresenti il valore intero dell’intero letto da tastiera;
        System.out.println(“Inserisci un intero : “);
        String intValue in.readLine();
        intValue intValue.valueOfintValue );
        System.out.println(“\t Rappresentazione dell’intero come stringa : “+intValue );
     
        System.out.println();
    //endMain

}//endClass

in bici: il terrazzo

Domenica mattina.
Quasi dicembre e un sole impressionante.
Sfrutto l’occasione e accompagno in bici un amico architetto per la città.

Album.

Modding Samsung SL GT-i9003 : firmware + Root



work in progress

Premesse:

  • Serie di procedimenti validi esclusivamente per questo modello.
  • Backup completo dei dati con Titanium Backup ( devi prima rootare il sistema).
  • backup da recovery mode, ogni volta dopo il flash.
  • Froyo 2.2.1.


Programmi::

Linux:

  •  (attualmente non ho accesso a un pc con Linux)

Win: 

  • Odin : flashare i firmware;
  • SuperOneClick : ottenere i permessi di root;



Svolgimento :
tutti i passaggi faranno riferimento a questa  GUIDA


Leggere Prima di eseguire

  1. Ho flashato la gingerbread 2.3.4 XXKPEè una versione di sviluppo, la videocamera non funziona; comunque servirà poi per flasharci sopra la XXKPH ed eventualmente la ultima XXKPM o una versione modificata (Osman Fans 2.1);
  2. flashato una seconda volta, come consigliato in diversi forum; Odin a volte da errore disconnettendo in continuazione il dispositivo! Se state flashando in quel momento dovete ricominciare, aspettate un paio di minuti dopo averlo avviato e aver collegato lo smartphone;
  3. factory reset;
  4. Flash della XXKPHancora reset;
  5. Idem per la XXKPMAttenzione : quando installate il nuovo firmware, o dopo la formattazione, potreste aver attiva la connessione a pacchetto, disabilitatela subito se non vi serve, altrimenti butterete soldi senza accorgervene;
  6. rootare ;
  7. fare un nandroid backup e formattare in ext4;
  8. ripristinare il backup dei dati con Titanium Backup;
  9. enjoy.

  • potrebbe disabilitarsi il wifi, dando errore ogni volta che si cerchi di abilitarlo, nella XXKPM una volta rootata.




Links:











Codici utili : 

*#*#4636#*#* Informazione della batteria, della red e del tempo di utilizzo.
*#*#8255#*#* Monitor Gtalk.
*#*#7780#*#* Reset del sistema (Hard Reset)
*#*#34971539#*#* Informazioni e configurazione della fotocamera. Permette anche accedere a su firmware.
*#*#7594#*#* Cambiare tasto accensione.
*#*#197328640#*#* Modalità di servizio.
*#0*# Modalità prova.
*#06# Numero IMEI.
*#1234# Versione firmware.
*#44336# Per sapere la Built Date (cioé quando é stata creata la rom)
*2767*4387264636# Per sapere il Product Code (lo trovate nella seconda linea)
*#*#1472365#*#* Prova del GPS con rom Eclair 2.1
*#*#3214789650#*#* Prova del GPS con rom Froyo
*#0011# Stato della rete.
*#*#0*#*#* Test del display.
*#301279# attivare e disattivare HSDPA
*#7465625# per verificare qualche limitazione della rete (tipo simlock….)
*7465625*638*# blocco della rete gsm (riattivare simlock)
*#272*HHMM# Cambio Paese / Stato
*2767*3855# Hard Reset del SGS

Foto: barrriera

De Rerum Natura

Tempo già fu che tristemente in terra
languia la vita dé mortali, oppressa
da religiosi orror; dall’alto cielo
sugli uomini incombea, con minaccioso volto,

dé numi il pauroso inganno;
allor che primo un uom di greca stirpe
gli occhi mortali sollevar contr’esso osò,
fissarlo osò.

Né l’ampia fama
del divin poter, né la scagliata
folgore, o il cupo mormorar del cielo,
valse a domarlo, ma di più vivace
impeto in cor gli suscitò la brama
d’infranger, primo, le sbarrate porte
del ciel, drizzando all’universo il volo.
E sua viva virtù vinse, l’estremo
lembo dei mondi.

E l’etere fiammante,
e la profonda immensità del tutto
con l’ala aperta del pensier trascorse;
e vittorioso recò a noi la luce
del novello saper; quali nel mondo
forme di vita nascano, e di quali
non sia concesso il nascere, qual sia
d’ogni cosa creata il fine, e quale
l’irremovibil termine che ad esse
ed al loro poter natura pose.

Onde a sua volta sotto il pié prostrata
della conquisa conoscenza umana
religion si giace, e la vittoria
or l’uomo esalta al culmine dei cieli.

 
 
Tito Lucrezio Caro (I sec. a.C.), De Rerum Natura, I libro, dedica a Epicuro.
Portato alla mia distratta attenzione da Margherita Hack, Il mio infinito.

Stanco

Bus n11, Piramide, Roma

progressive rock italiano

Riapro le danze in questo blog per “parlare” di musica.

Qualche giorno fa ero per la Plaza del Debod di Madrid parlando con un amico di lì che lavora gratuitamente in radio, trattando sempre di musica, presto il discorso si sposta nell’ambito del progressive e, dopo aver citato i soliti Jethro Tull, Genesis, Tool (per quanto non siano strettamente progressive), King Krimson ecc, gli parlo dell’importante corrente che ci fu in Italia in quegli anni.
Però a lui gruppi come Orme, Banco del Mutuo Soccorso, Il Rovescio della Medaglia, Goblin, New Trolls … suonano completamente nuovi. Così mentre cerco qualche informazione su internet da mandargli trovo questa pagina fantastica, che ovviamente non è italiana.

http://italianprogrock.com/top100.php

Ne vogliamo parlare ?

Genesis – Mama

[Python3.1] Trova la pepita 2.0 !

Ed ecco la seconda versione del gioco più appasionante del momento!
Tutti lo vogliono!
Migliorato con la collaborazione di Risca.
Controlla che sia ancora l’ultima versione qui !

  • Migliorata grafica schema;
  • risolto problemi di rilevamento vicinanza alla pepita;
  • inseriti indici numerici del campo;
  • memorizzazione e visualizzazione dei tentativi falliti;
  • eliminata la possibilità di fare più volte lo stesso errore;

 

#! /usr/bin/env python3.1
# -*- coding: utf-8 -*-
"""
Gioco dimostrativo creato per l'Accademia debianizzati.

Copyright 2011 risca
Copyright 2011 TuxErrante

GPLv2 or later

"""

import sys
import random

errore = []
benvenuto = "\n \n \n \n \n \nBenvenuto nella miniera TuxErrante & Risca co.!\n\
Sarò lieto di condividere con te il nostro oro, a patto che \
tu riesca a trovarlo!\n\
Hai {0} cariche di esplosivo e {1} cave da esplorare.\n\
Sei pronto?\nEcco lo schema del cantiere\n"
#pepita = [-10, -10]
def stampaCantiere(campo,pepita=[-10,-10], errore=[]):
# se passo la pepita allora deve controllare cella per cella
# quale sia quella giusta dove metterla
print("-"*50)
print(" ", end=' ')
for i in range(campo):
if i < 9:
print("{} ".format(i+1), end=' ')
else:
print("{}".format(i+1), end=' ')
print()
for r in range(campo):
if r < 9:
print(' {}'.format(r + 1), end=' ')
else:
print(r + 1, end=' ')
for c in range(campo):
if [r , c] in errore:
print(" O ",end='')
elif r == pepita[0] and c == pepita[1]:
print(" X ",end='')
else:
print(" . ",end='')
print() # manda a capo per ogni nuova riga



def trovaPepita(tent,campo):
"""\nCrea una matrice di dimensione campo*campo dove pone una 'pepita' in modo
casuale attraverso la funzione randomint(), che bisognerà cercare di trovare
per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di
uno, ci avvertirà della vicinanza. \n
Puo' essere invocato senza argomenti, nel caso in cui i valori di default
saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove
il numero dei tentativi deve essere inferiore al numero delle cave."""
if tent >= campo * campo:
exit(" Così non si puo' giocare! ")
print(benvenuto.format(tent,campo*campo))
# prendi le coordinate della pepita casualmente tra 0
# e la dimensione del campo-1
pepita = [random.randint(0,campo-1), random.randint(0,campo-1)]
stampaCantiere(campo) # stampa il campo vuoto
while tent > 0:
bangx = input("\n Inserisci le coordinate in cui vuoi piazzare la mina \
comprese tra [1 ..{}] \n x = ".format(campo))
bangy = input(" y = ")
if not bangx.isnumeric() or not bangy.isnumeric():
print(" Inserisci delle coordinate numeriche per favore! \n")
continue
else:
bangx, bangy = int(bangx), int(bangy)
bangx -= 1
bangy -= 1
if bangx < 0 or bangx >= campo or bangy < 0 or bangy >= campo:
print(" Per favore inserisci delle coordinate corrette ! \n \
Ricorda che quelli che hai in mano sono esplosivi !! \n")
continue
else: # coordinate inserite ammissibili
if (pepita[0] == bangx) and (pepita[1] == bangy):
# svela dove è la pepita !
print("coordinate segrete {},{}".format(pepita[0],pepita[1]))
stampaCantiere(campo,pepita,errore)
exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii \n \
Ci devi una percentuale, ricordatelo!!")
elif ([bangx,bangy] in errore):
print(" errare è umano perseverare è diabolico!")
continue
else: # dice se si è lontani o meno dalla pepita
tent -=1
errore.append([bangx, bangy]) # inserisco nella lista errori
print("\n")
stampaCantiere(campo,[-10,-10],errore)
testX = abs(pepita[0] - bangx)
testY = abs(pepita[1] - bangy)
if (testX == 1 or testX == 0) and (testY == 1 or testY == 0):
print(" Ci sei vicino !!")
else:
print(" No, no, non ci siamo. \n")
if tent >= 1:
print(" Dai ritenta !!")
else:
print("\n Peccato che abbia finito l'esplosivo !!\n Ecco dov'era :")
stampaCantiere(campo,pepita,errore)




# chiamata della funzione principale
# se viene chiamata senza argomenti gli verranno passati di default 6 e 6
# chiamare lo script con '-h' per vedere la documentazione
if len(sys.argv) == 3:
trovaPepita(int(sys.argv[1]), int(sys.argv[2]))
elif len(sys.argv) == 2 and sys.argv[1] == '-h':
print (trovaPepita.__doc__)
else:
trovaPepita(6,6)

  • puoi trovarlo anche qui

[Python3.1] Trova la pepita !

Un piccolo gioco in python3.1, giusto per prenderci la mano con la chiamata di funzioni, le doctype e per mettere a frutto un’idea nata nel bus per fornire materiale all’Accademia 🙂

Vai all’ultima versione!

#! /usr/bin/env python3.1
# -*- coding: utf-8 -*-
import sys
import random

def stampaCantiere(campo,pepita=None):
# se passo la pepita allora deve controllare cella per cella
# quale sia quella giusta dove metterla
if pepita != None:
for r in range(campo):
for c in range(campo):
if r == pepita[0] and c == pepita[1]:
print("|X|",end='')
else:
print("|_|",end='')
print()
# altrimenti fai una stampa veloce
# separo i due casi per evitare di eseguire sempre del codice molto pesante
else:
for i in range(campo):
print("|_|"*campo)



def trovaPepita(tent,campo):
"""\nCrea una matrice di dimensione campo*campo dove pone una 'pepita' in modo
casuale attraverso la funzione randomint(), che bisognerà cercare di trovare
per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di
uno, ci avvertirà della vicinanza.

Puo' essere invocato senza argomenti, nel caso in cui i valori di default
saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove
il numero dei tentativi deve essere inferiore al numero delle cave."""

if tent>=campo*campo:
exit(" Così non si puo' giocare! ")
print("\n Benvenuto nella miniera di TuxErrante ! \n Sarò lieto di \
condividere con te il mio oro, a patto che tu riesca a trovarlo!\n \
Hai {0} cariche di esplosivo e {1} cave da esplorare. \n \
Sei pronto ? \n Ecco lo schema del cantiere \n".format(tent,campo*campo))
# prendi le coordinate della pepita casualmente tra 0 e la dimensione del campo-1
pepita=[random.randint(0,campo-1),random.randint(0,campo-1)]
stampaCantiere(campo) # stampa il campo vuoto

while tent>0:
bangx = input("\n Inserisci le coordinate in cui vuoi piazzare la mina \
comprese tra [0 ..{}] \n x = ".format(campo-1))
bangy = input(" y = ")
if not bangx.isnumeric() or not bangy.isnumeric():
print(" Inserisci delle coordinate numeriche per favore! \n")
continue
else:
bangx, bangy = int(bangx), int(bangy)
if bangx < 0 or bangx >= campo or bangy < 0 or bangy >= campo:
print(" Per favore inserisci delle coordinate corrette ! \n \
Ricorda che quelli che hai in mano sono esplosivi !! \n")
continue
else: # coordinate inserite ammissibili
if (pepita[0] == bangx) and (pepita[1] == bangy):
# svela dove è la pepita !
print(" coordinate segrete {},{}".format(pepita[0],pepita[1]))
stampaCantiere(campo,pepita)
exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii !!")
else: # dice se si è lontani o meno dalla pepita
tent -=1
if abs(pepita[0] - bangx) == 1 or abs(pepita[1] - bangy) == 1:
print(" Ci sei vicino !!")
else:
print(" No, no, non ci siamo. \n")
if tent >= 1:
print(" Dai ritenta !!")
else:
print(" Peccato che abbia finito l'esplosivo !! \n Ecco dov'era :")
stampaCantiere(campo,pepita)


# chiamata della funzione principale
# se viene chiamata senza argomenti gli verranno passati di default 6 e 6
# chiamare lo script con '-h' per vedere la documentazione
if len(sys.argv) == 3:
trovaPepita(int(sys.argv[1]), int(sys.argv[2]))
elif len(sys.argv) == 2 and sys.argv[1] == '-h':
print (trovaPepita.__doc__)
else:
trovaPepita(6,6)



Squallor – Sfogo (1977)

Recuperare un hard disk corrotto (e i suoi dati)

Error mounting: mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog – try
       dmesg | tail  or so

Non è mai bello trovarsi di fronte un errore simile, vediamo subito che si può fare..

Dando dmesg | tail otteniamo qualche informazione, più che altro la conferma della possibilità che il nostro ‘superblocco o la tavola delle partizioni siano corrotti‘.

Il primo tentativo è una riparazione tramite fsck, che però nel mio caso non ha dato risultati :
(provare anche con e2fsck -p /dev/device )

sabayon alex # fsck /dev/sdb1
fsck from util-linux-ng 2.18
e2fsck 1.41.12 (17-May-2010)
La dimensione del filesystem (secondo il superblocco) è 116736000 blocco(i)
La dimensione fisica del device è 116735992 blocco(i)
È probabile che il superblocco o la tavola delle partizioni siano corrotti!
Annulla? no

/dev/sdb1 contiene un filesystem con errori, controllo forzato.
Passo 1: Controllo di inode, blocco(i) e dimensioni
Passo 2: Analisi della struttura delle directory
Passo 3: Controllo della connettività di directory
Pass 4: Controllo del numero dei riferimenti
Pass 5: Checking gruppo summary information
/dev/sdb1: 18170/29188096 files (35.3% non-contiguous), 62000359/116736000 blocks

Il secondo passo è quello delle imprecazioni.

Il terzo, invece, è una scelta: possiamo cercare di recuperare direttamente la partizione o cercare invece prima di recuperare i dati.
Procedendo con la massima cautela, andiamo prima a vedere se i nostri dati sono ancora accessibili in qualche modo.
Sì.

Utilizziamo il fantastico debugfs, che ci permette di accedere anche a filesystem corrotti, sia in modalità lettura/scrittura, che in readonly per i casi più disperati.

Quello che voglio fare io è recuperare la mia cartella di Musica e Immagini, per cui darò questo comando

sabayon alex # debugfs -w /dev/sdb1
debugfs 1.41.12 (17-May-2010)
debugfs: help
debugfs: ls
debugfs: rdump Musica /media/2E78ED3D78ED0485/Musica

Prima controllo con help la lista di comandi disponibili, poi con ls la struttura delle cartelle nel mio hard-disk; rdump copia ricorsivamente i file, Musica rappresenta la cartella da copiare, e l’indirizzo successivo è ovviamente quello di destinazione.
Se non funziona l’opzione -w tentare con -c .

E voilà! Avrete recuperato i vostri file apparentemente inaccessibili !

Una volta fatto ciò potete/dovete ripristinare la correttezza del filesystem.

Se, come nel mio caso, è un problema di superblocco potete evitare di formattarlo dando il comando: mke2fs -S /dev/sdb1 che si occupa appunto di ripristinare solo il superblocco, con qualche possibilità quindi che i vostri file rimangano intatti ! (si parla sempre di un file system di tipo EXT !! )

Se questo non funziona, non vi resta che restaurare la partizione sempre con mke2fs, nel caso vogliate un fs ext4 :

mkfs.ext4 /dev/device

Fatto ?

Erasmus

Da settembre a giugno di quest’anno sono in Erasmus a Gran Canaria, nell’università di Las Palmas, e non penso che avrò molto tempo per aggiornare il blog.

È una sofferenza, che in questo caso, posso sopportare.

[PIC 16c57] Contatore a due bit controllato

Progetto per PIC16c57 : contatore controllato da due ingressi : Clear e Jump; dispone di due bit d’uscita.

Se il segnale Clear va ad 1, l’uscita deve azzerarsi e ripartire, se va ad 1 Jump, l’uscita deve portarsi a due stati successivi a quello attuale.
Il segnale Clear è predominante su Jump.

list p=16c57
#include
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF
; portA(0) = Clock; portA(1) = Clear; portA(2)= Jump
; portB(0) = Out1 portB(1) = Out2


RADIX DEC
CK_PREC EQU 0x08
TEMP EQu 0x09 ; cntrolla indirizzo
CONT EQU 0x0A

ORG 0x7ff
goto START

ORG 0x00
START
CLRW
TRIS PORTB
MOVLW b'111'
TRIS PORTA ; 3 ingressi
CLRF CK_PREC
CLRF CONT

LOOP
BTFSC CK_PREC,0
GOTO UPDATE
BTFSS PORTA,0
GOTO UPDATE
GOTO MAIN

UPDATE
MOVF PORTA,CK_PREC
GOTO LOOP

MAIN
BTFSC PORTA,1 ; CLEAR = ?
GOTO CLEAR ; 1
BTFSC PORTA,2 ; JUMP = ?
GOTO JUMP
INCF CONT,F
GOTO CHECK

CLEAR
CLRF CONT
GOTO STAMPA
JUMP
MOVLW 2
ADDWF CONT,F
GOTO CHECK

CHECK
MOVLW 4
SUBWF CONT,W
BTFSC STATUS,Z ; cont=4 ?
GOTO SET_ONE
MOVLW 5
SUBWF CONT,W
BTFSC STATUS,Z
GOTO SET_TWO
STAMPA
MOVF CONT, PORTB
GOTO LOOP

SET_ONE
MOVLW 1
MOVF W, CONT
GOTO STAMPA
SET_TWO
MOVLW 2
MOVF W,CONT
GOTO STAMPA

END
.inc>

Page 3 of 6

Powered by WordPress & Theme by Anders Norén