Archivi per la categoria post a caso

Crisis Management

02-07-2011 22:55:21 CEST Postato in: post a caso, nerdate | Commenta

Quando offri un servizio online può capitare di avere dei problemi (bug, DDoS, guasti hardware, router impazziti, ecc.) che precludono l'accesso al servizio a buona parte dell'utenza (se non tutta).

Ci sono almeno due modi per affrontare la comunicazione con gli utenti durante una crisi:

  1. far finta di nulla;
  2. ammettere che si sta verificando un problema.

Il primo modo di replicare - a mio personalissimo parere - è inutile, a meno che non si stia affrontando una crisi che potrebbe avere ripercussioni gravissime sulla sicurezza degli utenti. In quel caso, è sempre buona norma dispensare le informazioni col contagocce e spiegare solo a problema risolto.

Il secondo modo, invece, porterà inevitabilmente alla domanda da un milione di dollari:

Quando risolverete il problema?

E qui scatta a chiunque la molla del VAFFANCULOPEZZODIMERDANONMIROMPERELEPALLECHEGIAHOIMIEICASINIDARISOLVERECIMANCHISOLOTU, specialmente se il servizio è gratuito. Reazione comprensibilissima, per carità, ma che non deve durare più di 5 millisecondi e che non deve assolutamente diventare di pubblico dominio.

A mio avviso, in una situazione di crisi bisogna osservare alcune semplici regole:

  • spiegare onestamente all'utenza quale problema si sta verificando e quali sono i tempi previsti per la risoluzione (se ce ne sono, altrimenti ammettere tranquillamente di non sapere quanto tempo ci vorrà);
  • mordersi le dita prima di rispondere male ad un utente, anche al più insistente;
  • staccarsi le dita prima di limitare l'accesso ad un utente che chiede spiegazioni (questa è in assoluto la peggior cazzata che si possa fare);
  • se non si è in grado di reggere la pressione lasciare che siano altri ad occuparsi del crisis management;
  • risolvere il problema nel minor tempo possibile :-)

Insomma...

07-03-2011 23:04:27 CET Postato in: post a caso | Commenta

... s'è dimesso o no?

Addio, Nokia

12-02-2011 16:12:10 CET Postato in: post a caso | Commenta

Non mi mancherai.

QuickLaTeX

03-02-2011 16:18:13 CET Postato in: post a caso | Commenta

Lo so, le formule sono allineate alla cazzo, appena avrò dieci minuti di tempo le sistemerò. Risolto (era un bug del plugin).

Giochini in Erlang

24-12-2010 19:41:36 CET Postato in: erlang, post a caso | Commenta

Esempio rubato spudoratamente da OpenDLM:

-module(dig_test).
-export([run_test/0]).
-export([init/0]).

-spec(run_test() -> pid()).

run_test() ->
    spawn(?MODULE, init, []).

-spec(init() -> none()).

init() ->
    TWFG = digraph:new(),
    %% Simulate the same TWFG present in OpenDLM specs
    C1 = add_client(TWFG, c1),
    R1 = add_resource(TWFG, r1),
    C2 = add_client(TWFG, c2),
    R2 = add_resource(TWFG, r2),
    R3 = add_resource(TWFG, r3),
    C3 = add_client(TWFG, c3),
    digraph:add_edge(TWFG, C1, R1),
    digraph:add_edge(TWFG, R1, C2),
    digraph:add_edge(TWFG, C2, R2),
    digraph:add_edge(TWFG, C2, R3),
    digraph:add_edge(TWFG, R2, C3),
    digraph:add_edge(TWFG, R3, C1),
    detect_deadlock_for(TWFG, R1),
    digraph:delete(TWFG),
    exit(normal).

-spec(add_client(digraph(), atom()) -> digraph:vertex()).

add_client(WaitForGraph, ClientName) ->
    add_vertex(WaitForGraph, {client, ClientName}).

-spec(add_resource(digraph(), atom()) -> digraph:vertex()).

add_resource(WaitForGraph, ResourceName) ->
    add_vertex(WaitForGraph, {resource, ResourceName}).

-spec(add_vertex(digraph(), term()) -> digraph:vertex()).

add_vertex(WaitForGraph, Label) ->
    Vertex = digraph:add_vertex(WaitForGraph),
    digraph:add_vertex(WaitForGraph, Vertex, Label).

-spec(detect_deadlock_for(digraph(), digraph:vertex()) -> ok).

detect_deadlock_for(WaitForGraph, Vertex) ->
    case digraph:get_cycle(WaitForGraph, Vertex) of
        false ->
            io:format("No deadlocks detected for ~p~n", [vertex_name(WaitForGraph, Vertex)]);
        VList ->
            io:format("Deadlock detected between ~p~n", [vertices_names(WaitForGraph, VList)])
    end.

-spec(vertex_name(digraph(), digraph:vertex()) -> term()).

vertex_name(WaitForGraph, Vertex) ->
    {_, Name} = digraph:vertex(WaitForGraph, Vertex),
    Name.

-spec(vertices_names(digraph(), nil() | [digraph:vertex()]) -> nil() | [term()]).

vertices_names(WaitForGraph, VList) ->
    vertices_names(WaitForGraph, VList, []).

-spec(vertices_names(digraph(), nil() | [digraph:vertex()], nil() | [term()]) -> nil() | [term()]).

vertices_names(_WaitForGraph, [], Acc) ->
    lists:reverse(Acc);
vertices_names(WaitForGraph, [Vertex|Tail], Acc) ->
    vertices_names(WaitForGraph, Tail, [vertex_name(WaitForGraph, Vertex)|Acc]).

(se vi state chiedendo perché TWFG non varia, la risposta è che digraph usa ETS per mantenere lo stato del grafo).

Yet another switch

02-12-2010 22:47:38 CET Postato in: nerdate, post a caso | Commenta

Stavolta da lighttpd a nginx. Appena ho 5 minuti di tempo posto un po' di dettagli.

Pretendo spiegazioni

09-09-2010 02:32:41 CEST Postato in: post a caso | Commenta

Fino a 20 minuti fa l'adsl funzionava regolarmente, portante a circa 5 Mbps downstream. Di botto la connessione si resetta, la portante non syncha a più di 1.8 Mbps e ho questi valori di rumore e attenuazione:

relative capacity occupation: 99%
noise margin downstream: 12.0 db
output power upstream: 12.0 dbm
attenuation downstream: 40.0 db

A questo punto, PRETENDO delle spiegazioni da Telecom.

E no, eh...

26-06-2010 19:07:35 CEST Postato in: post a caso | Commenta
PID: 349
    Process: WindowServer
    Kernel stack:
    machine_switch_context (in /mach_kernel) + 753 (0x2a6a37)
      thread_dispatch (in /mach_kernel) + 1966 (0x226e4b)
        thread_block_reason (in /mach_kernel) + 331 (0x2270ea)
          thread_block (in /mach_kernel) + 33 (0x227178)
            lck_mtx_sleep (in /mach_kernel) + 87 (0x22193c)
              IOLockSleep (in /mach_kernel) + 39 (0x52a716)
                0x0097fe90 (0x97fe90)
                  0x00994e5c (0x994e5c)
                    shim_io_connect_method_structureI_structureO (in /mach_kernel) + 350 (0x561322)
                      IOUserClient::externalMethod(unsigned int, IOExternalMethodArguments*, IOExternalMethodDispatch*, OSObject*, void*) (in /mach_kernel) + 894 (0x562422)
                        is_io_connect_method (in /mach_kernel) + 467 (0x562c9c)
                          iokit_server_routine (in /mach_kernel) + 4669 (0x28499c)
                            ipc_kobject_server (in /mach_kernel) + 244 (0x21d7eb)
                              ipc_kmsg_send (in /mach_kernel) + 111 (0x210977)
                                mach_msg_overwrite_trap (in /mach_kernel) + 274 (0x216bda)
                                  thread_setuserstack (in /mach_kernel) + 405 (0x293dd1)
                                    lo64_mach_scall (in /mach_kernel) + 77 (0x29f48d)
    User stack:
    mach_msg_trap (in libSystem.B.dylib) + 10 (0x7fff8077b75a)
      io_connect_method (in IOKit) + 490 (0x7fff8884b166)
        IOConnectCallMethod (in IOKit) + 325 (0x7fff888098c8)
          gldCreateBuffer (in ATIRadeonX2000GLDriver) + 317 (0x1122c2bfd)
            gldFinish (in ATIRadeonX2000GLDriver) + 12916 (0x1122da474)
              gldDestroyVertexArray (in ATIRadeonX2000GLDriver) + 587 (0x1122d56fb)
                gldGetTextureLevelImage (in ATIRadeonX2000GLDriver) + 192880 (0x11233a9a0)
                  gldGetTextureLevelImage (in ATIRadeonX2000GLDriver) + 193712 (0x11233ace0)
                    gldUpdateDispatch (in ATIRadeonX2000GLDriver) + 65969 (0x1122f9581)
                      gldUpdateDispatch (in ATIRadeonX2000GLDriver) + 66508 (0x1122f979c)
                        gldUpdateDispatch (in ATIRadeonX2000GLDriver) + 98523 (0x1123014ab)
                          gldUpdateDispatch (in ATIRadeonX2000GLDriver) + 1144 (0x1122e9848)
                            gleDoDrawDispatchCore (in GLEngine) + 259 (0x1121d92f5)
                              glBegin_Exec (in GLEngine) + 104 (0x112116aea)
                                _CGXGLCompositeLayer_ (in CoreGraphics) + 6583 (0x7fff81c5786f)
                                  _CGXGLCompositeLayers (in CoreGraphics) + 1177 (0x7fff81c55def)
                                    CGXGLAccelComposite (in CoreGraphics) + 794 (0x7fff81c552cd)
                                      CGLayerComposite (in CoreGraphics) + 242 (0x7fff81c54272)
                                        CGXUpdateDisplay (in CoreGraphics) + 7110 (0x7fff81c300cc)
                                          _CGXRunTimerPass (in CoreGraphics) + 344 (0x7fff81c28e6c)
                                            CGXRunOneServicesPass (in CoreGraphics) + 138 (0x7fff81c3fd77)
                                              CGXServerLoop (in CoreGraphics) + 139 (0x7fff81c48e8e)
                                                CGXGetRootAdminCredentials (in CoreGraphics) + 0 (0x7fff81c13956)
                                                  main (in WindowServer) + 9 (0x100000f29)
                                                    start (in WindowServer) + 52 (0x100000f18)
                                                      0x00000002 (in WindowServer) (0x2)

Ora, non vorrei dire qualcosa, ma è la 2130989432esima volta che mi s'inchioda l'iMac con 10.6.3, ed è la seconda volta che catturo lo stesso stacktrace di WindowServer. Qualcosa mi dice che Apple ha fatto un piiiiiccolo SNAFU nel passaggio da 10.6.2 a 10.6.3.

Speriamo che 10.6.4 + reset della PRAM abbiano risolto il problema...

Lighttpd e IPv6: workaround per gli indirizzi v4mapped

24-02-2010 18:24:35 CET Postato in: post a caso | Commenta

Da un po di tempo ho abilitato IPv6 su lighttpd, in modo tale da rendere raggiungibili sia il mio blog che devel.azzurra.org da chi utilizza connettività IPv6. Questa "genialata", però, ha causato un po' di casino con i logfile, perché lighttpd NON apre due socket (uno v4 e uno v6), bensì apre un singolo socket v6 e si aspetta che il sistema operativo permetta l'utilizzo dei malefici indirizzi v4mapped (per chi è a digiuno di IPv6, indirizzi del tipo ::ffff:NNN.NNN.NNN.NNN).

Leggendo il bugreport relativo, ho trovato uno squisito scambio di battute tra un certo sysadmin italiano ed uno degli sviluppatori di lighttpd che ha tagliato corto dicendo "se non volete gli indirizzi v4mapped aprite due socket, non ho intenzione di cambiare il codice".

In sostanza, quindi, il modo migliore per far funzionare un server dual-stack IPv4-IPv6 è di avere queste righe nel file di configurazione:

server.use-ipv6 = "enable"
server.port = 80
server.bind = "[::1]"

$SERVER["socket"] == "0.0.0.0:80" { }
$SERVER["socket"] == "[2001:41d0:1:89df::1]:80" { }

sostituendo a 2001:41d0:1:89df::1 il vostro indirizzo IPv6 su cui volete porre in ascolto lighttpd. Lo stesso procedimento vale per SSL.

Assurdo? Sì. Lo risolveranno? Credo di no.

Scala di intensità sismica Aquilana

04-05-2009 20:05:28 CEST Postato in: post a caso, real life, terremoto | Commenta
  1. Essiju
  2. bottarella
  3. bella botta
  4. sileppa
  5. slenghera
  6. saraga
  7. petenga
  8. 'ngulallazia

Si ringrazia Angelo De Nicola per aver condiviso questa perla su Il Messaggero :)

CNCPO Fail

25-02-2009 17:12:27 CET Postato in: censura, gente di un certo livello, post a caso | Commenta

A quanto pare, img5.imageshack.us per il CNCPO è un gran covo di pedofili, visto che il sito suddetto da alcuni giorni è nella famigerata lista nera dei siti i cui record DNS sono sottoposti all'hijacking di stato.

Mi viene da chiedermi se chi ha ordinato l'inserimento in blacklist si sia accorto che in fondo ad ogni immagine c'è il tasto "Report Abuse".
O se sia stato minimamente sfiorato dal dubbio che su quel server ci sono (decine di) migliaia di immagini perfettamente legittime.

Per contro, ho preso 30 a Sistemi Operativi, quindi chissenefrega :D

Anno nuovo, template nuovo

02-01-2009 21:37:55 CET Postato in: post a caso | Commenta

Sono in vena di esperimenti...
Questo template fa schifo oppure posso tenerlo?

(PS: almeno questo è XHTML 1.0 Transitional valido - quando mi ricordo di scrivere decentemente i post, ovvio)
(PPS: il CSS non viene validato per via di una cazzata chiamata IE...come non detto, con un po' di olio di gomito e "qualche" modifica a mano ora anche il CSS è valido)

La gran madre di tutte le minchiate

15-12-2008 18:39:19 CET Postato in: gente di un certo livello, post a caso, stronzate abissali | Commenta

E noi ci crediamo che è una notizia dell'ANSA...

---EDIT---
A quanto pare, era veramente una notizia ANSA riservata agli abbonati e passata su La Nuova Sardegna.
Mi chiedo se l'ANSA verifichi le fonti (o quantomeno che i presunti "giornalisti" siano tali, ma vabbè...).

« Post Precedenti