Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - ShInKurO

Pagine: 1 [2] 3 4 5
16
Risposta breve: non lo so e non me lo ricordo.

Risposta estesa:
MUI dovrebbe gestire le notifiche gerarchicamente secondo la filosofia top down, quindi dalla finestra ai figli, andando sempre più all'interno.
Devi anche aggiungere il fatto che l'esecuzione effettiva di una notifica dipende dalla lunghezza della catena di notifiche che deve attraversare. Più lunga la catena, più tempo impiegherà ad arrivare la notifica.
MUI garantisce solo che la notifica arriverà, non quando. Quindi non puoi sapere se una notifica verrà eseguita prima di un'altra.

Questo è "aggirabile" con un metodo bellissimo che io amo, si chiama MUIM_Application_PushMethod. Ovviamente PushMethod funziona diversamente in ciascuna versione di MUI, quindi ti consiglio di fare un grep sui sorgenti di NoWinED per vedere come lo uso io, o aspettare che io abbia tempo per farlo e incollare il significato intrinseco delle minchiate che avrò scritto :)

Cmq se hai dubbi io ti consiglio di leggere due fonti ottime per MUI (le trovi su aminet):

MUIUndoc18;
mui_htmlhelp;

E vedrai che si aprirà un nuovo mondo :)

17
AROS / Re: Zune enhancement bounty [AROS]
« il: 06 Marzo 2012, 07:37:15 »
Citazione
 
Debug current Zune codebase and,where possible, improve existing MUI 3.x compatibility adding missing functions and fixing current broken features: proper MUIA_ShowMe handling + redrawing, Implementing MUIM_Application_Save/Load for most of classes, Dataspace class/Import/Export, etc...
    Implement in Zune those MUI 4 functions and features that are needed to compile Fab1's OWB web browser, which currently only runs on MorphOS.
    Implement a new API of Dtpic class.
    Move List class and its child from Area children to Group children and implement all new features and APIs of these classes.
    Implement Title class.
    Implement new API of Family class.
    Implement new API of Area class.
    Implement new API of Group class.
    Implement new API of menu classes.
    Implement Process class. This bounty should be closed as soon as it will be possible to compile and use Fab1's OWB web browser on AROS with all its features that are available to users running MorphOS 2.x and the included MUI 4 toolkit.

Inglese maccheronico a parte, non dovrebbe ignorare tutti i punti e concentrarsi solo sul secondo...vedremo!

18
AROS / Re: Zune enhancement bounty [AROS]
« il: 05 Marzo 2012, 20:26:17 »
A proposito, ma chi è Mark K (donut123)?
E' un grande, sta confrontando AROS68k con AmigaOS e fa dei report dettagliatissimi sulle incompatibilità di AROS con tutte le funzioni AmigaOS, principalmente AmigaDOS, ma non solo...
Dovrebbero fargli una statua... sono proprio curioso di vedere quando questi report verranno fixati  :)

19
AROS / Re: Zune enhancement bounty [AROS]
« il: 05 Marzo 2012, 20:12:56 »
Citazione da: "rebraist"
The bounty has been assigned to Krzysztof Smiechowicz. The goal of the bounty is to implement the missing functionality in Zune so that Odyssey Web Browser can be compiled on AROS and has the same set of features MUI-wise as on MorphOS and AmigaOS 4.
...

Odyssey Web Browser is a WebKit-based browser developped by Fabien Coeurjoly for MorphOS and ported to AmigaOS 4.
:lol:
Non facciamo i furbi. Il bounty l'ho progettato in modo che vengano implementate le classi necessarie per far diventare Zune meglio di MUI3.9 che si trova su OS4. Quindi se lui vuol portare OWB-ka1ste su AROS mi spiace ma non è proprio la stessa cosa. Se invece dai sorgenti del porting di ka1sle recupera parti di codice per scrivere la Title Class, e robe simili allora ok.
Se Zune non otterrà tutte le classi scritte sul bounty allora quest'ultimo non sarà rispettato.

Citazione
altro che conflitto d'interessi divina-shinkuro per il powermac. ...

Ma va, era solo per fare rumore, c'è gente che non scriveva da anni e si è pure messa a remarci contro, figurati...

Cmq mi scuso con paolo perchè per ora non ho avuto tempo di mettere le mani sul codice di NoWinED... cmq dovrò quasi certamente fixarlo da WinUAE visto che Mos3.0 non è ancora uscito, e programmare su DevC++ le API Amiga è praticamente impossibile :)

20
MorphOS / Re: MorphOS 3.0
« il: 20 Febbraio 2012, 23:29:14 »
Citazione da: "TheKaneB"
Non proprio... solo i programmi che usano Forbid() / Permit() potrebbero avere problemi. Si tratta di una tecnica arcaica di programmazione che blocca gli interrupt di sistema per manipolare le strutture dell'OS manualmente.
Se un programma sfrutta solo le API moderne, dovrebbe uscire illeso dal processo di introduzione dell'SMP.

Non è così raro usare il blocco Forbid()/Permit(), leggi il  paragrafo 5.3.4 della mia guida... :)

21
Programmi e applicazioni / Re: Bring Zune to level of MUI 3.8
« il: 19 Febbraio 2012, 15:09:21 »
Il progetto di AmiDevCPP usava di default g++ invece di gcc, e dunque certe cose erano invalid perchè compilava NoWinED come fosse codice c++ invece che c. Risolto questo banale problema ho una compilazione senza errori ne warning (mi ero impegnato a non avere alcun warning!)

22
Programmi e applicazioni / Re: Bring Zune to level of MUI 3.8
« il: 19 Febbraio 2012, 10:57:42 »
Risolto, nelle prossime settimane cercherò di capire se ci sono problemi con il nuovo AROS :-P

23
Programmi e applicazioni / Re: Bring Zune to level of MUI 3.8
« il: 18 Febbraio 2012, 10:46:12 »
Ok dopo aver sostituito gli include con quelli trovati dentro l'ultima nightbuild le SDI non danno più errori, il punto è che adesso come errori ho le invalid conversion del gcc, per la serie una banale:

struct appData    *data = INST_DATA(cl,obj);

mi dà:

693 C:UsersShInKurODesktopNoWinEDtrunksourcesapp.c invalid conversion from 'void*' to 'appData*'

Per intenderci, per andare a buon fine dovrei scrivere:

struct appData    *data = (struct appData *) INST_DATA(cl,obj);

e anche per i messaggi BOOPSI è lo stesso. Praticamente un incubo, ma magari c'è qualche parametro nella compilazione che devo aggiungere per ignorare queste robe... altrimenti tutti i sorgenti Amiga non potrebbero essere portati su AROS a meno di non fare cast espliciti, mi pare una boiata francamente :)
Sono molto arruginito :)

24
Programmi e applicazioni / Re: Bring Zune to level of MUI 3.8
« il: 16 Febbraio 2012, 06:46:11 »
Citazione da: "paolone"
Intanto, non e' che potresti dare un'occhiatina a nowined? ultimamente ho notato che facendo clic sul pulsante per salvare i file (salva sul file stesso, per capirci), il programma va spesso in crash.
Ci provo questo weekend...

...scaricati i sorgenti di nowined, messo su ambiente qemu, aros installato ecc... amidevcpp risalente all'anno scorso, provo a compilare nowined ed ho problemi con SDI, buongiorno mondo :)

39 C:UsersShInKurODesktopNoWinEDtrunksourcesabout.c invalid conversion from 'IPTR (*)(Hook*, void*, void*)' to 'IPTR (*)()'

ovviamente una loro macro.

Io ho incluso tutto quello che dovevo includere in C:CrossCompilerAmiDevCppusrlocalamigai386-aros, però nulla, vedremo nei prossimi giorni... sicuramente ci sarà qualcosa che non ricordo minimamente della compilazione per AROS su AmiDevCPP.
Se sono stati fatti degli aggiornamenti sugli include di AROS fammelo sapere, devo reinstallare AmiDevCPP con una versione più nuova ?

25
AmigaOS 4.x / Re: AMD RadeonHD: Nuovo Driver e Demo
« il: 08 Febbraio 2012, 23:47:24 »
Citazione da: "Amig4be"
oddio ma dopo 30 anni stanno ancora appresso a sta palla? x''''''D
Appena posso ne farò una parodia :P Una stanza da bagno con un wc e la palla che rimbalza casualmente, quando cadrà nel water...sciacquone...e si ricomincia da capo
Ho pensato la stessa cosa... ma basta co sta caxxo di palla, tra l'altro era più carina l'immagine di quella che rifecero per la nascita di A1 10 anni fa...

26
A proposito di bounty, nessuno ha commentato quello aperto per rendere opensource DOpus Magellan2.
Trovo davvero uno spreco di denaro fare un bounty per DOpus Magellan2 per sistemi come OS4 e AROS quando opensource è possibile trovare Ambient.
Purtroppo come nella maggior parte dei casi gli amighisti non si rendono conto che un sw che usavano 15 anni fa e con cui si trovavano bene potrebbe non essere all'altezza delle altre alternative che durante gli anni sono uscite.
DOpus non supporta nemmeno le icone di OS3.5, genera i propri gadget con GadTools senza probabilmente passare nemmeno per BOOPSI.
In pratica su OS4 avrebbe un aspetto osceno, inoltre non utilizza API nuove (le richieste minime erano OS3.0 o meno?), e questo vuol dire anche che avrà grosse difficoltà a gestire robe come il compositing.

Davvero mi chiedo come la gente abbia potuto raccogliere la bellezza di 900$+ per una roba così datata.  Aveva senso quando uscì OS4.0, ma non accadde. Sembra che gli amighisti non si rendano conto che il tempo passa, anche per il loro OS.

Con 1000$+ sicuramente gente come ka1sle sicuramente si sarebbe trovata. Il codice di Ambient è una delle risorse da cui attingere quando si parla di programmazione Amiga moderna, è sempre uno spettacolo leggere certe soluzioni. Di certo non si può dire lo stesso di DOpusMagellan che nasce quando ancora nemmeno il gcc era il compilatore di default su Amiga e ci sono svariate parti scritte in assembly 68k.

Un'altra occasione per Ambient andata persa. Ambient potrebbe diventare ciò che sono Gnome e KDE per i sistemi UNIX, e invece solo MorphOS ha il privilegio di utilizzarlo.

27
Citazione da: "rebraist"
ok. devo ripensare l'app in modo diverso.
correggimi se sbaglio:
i singoli gadget a questo punto devono essere degli oggetti a tutti gli effetti: se ci deve essere una comunicazione di set/get tra le cycle e l'area è ovvio che devo gestire anche le cycle come oggetti con i loro bravi metodi in override, giusto?


Hai compreso  :D
Difatti funziona proprio così:

il cycle e l'area immagino stiano dentro a un group, quindi se dall'esterno il group deve comunicare qualcosa all'interno (per esempio i menu e le loro funzionalità sono molto in alto nella gerarchia di contenimento) lo farà chiamando o un metodo di cycle e/o di area o dei set di cycle e/o di area. Se cycle deve comunicare con area lo farà nello stesso modo. Gli oggetti allo stesso livello comunicano tra di loro tramite notifiche agganciate tra essi dal contenitore genitore, mentre comunicano con quest'ultimo attraverso attributi notificabili.

Per la serie che cycle non potrà mai chiamare un metodo o settare/gettare qualcosa del group che lo contiene, può solo autosettare un proprio attributo, questo cambiamento verrà notificato al group che eventualmente svolgerà un'azione ("toh, è cambiato il valore di pippo, invoco myCorro()").

Un oggetto può conoscere quello che sta al suo interno, ma MAI quello che sta al suo esterno.
Ricordati sempre l'information hiding e le gerarchie di contenimento, altrimenti incorri nello spaghetti code all'interno dell'oop.
Non saltare passaggi per rendere tutto più veloce (tipo da menu salti il group e comunichi subito con area) perchè se dovrai scovare un bug sarà impossibile da individuare.
Se mantieni correttamente le gerarchie di contenimento e l'information hiding tra le classi, se avrai un bug sarà facilmente individuabile.

Devi sempre subclassare tutto, in modo da incapsulare anche le minchiate dentro classi e oggetti e far comunicare tutto tramite metodi oop, solo così sfrutterai al massimo mui e il paradigma oop.

28
Te l'ho detto che dovresti leggere proprio qualcosa relativo all'oop, perchè non hai chiare alcune cose fondamentali  ;)

Cioè che rende un attributo publico BOOPSI una variabile privata di un'area dati della tua classe sono proprio gli overriding dei metodi principali dell'oop.

Pensaci bene: mica il C è Skynet, non potrà mai sapere che pluto è pubblica e pippo è privata, glielo devi dire tu. Come? facendo override dei metodi oop.

Se overridi new e ti parsi la taglist alla ricerca di un eventuale valore settato che si riferisce al tuo attributo  allora in questo caso BOOPSI chiama il tuo attributo I, cioè settabile solo all'istanziazione.
Se overridi get e parsi la tag list allora il tuo attributo sarà solo G, cioè gettable.
Se overridi set e parsi la tag list allora il tuo attributo sarà solo S, cioè settable.

Se overridi tutti e tre e parsi la tag list in tutti e tre e controlli il tuo attributo in tutti e tre allora il tuo attributo sarà ISG, è questa la nomenclatura che trovi nella documentazione degli attributi delle classi BOOPSI/MUI.

Dunque è ovvio che ti devi parsare la taglist nel set/get e/o new, perchè altrimenti BOOPSI non viene informato degli attributi pubblici.

Ricordati che il C non è OOP, è BOOPSI che dà al linguaggio C delle proprietà OOP. Quindi è come se tu implementassi con il C il C++ o altri linguaggi ad oggetti attraverso una libreria.

Dovresti vedere gli attributi BOOPSI/MUI come le proprietà del C#, magari se lo hai studiato ti viene più semplice un accostamento simile.

In pratica

SetAttr() non fa altro che andare a chiamare il tuo override a set se la invochi su un oggetto della tua classe, poi se ben ricordi alla fine del metodo si mette un return DoSuperMethodA() che andrà a chiamare il set della superclasse della tua classe e cosivvia fino alla classe root.

è C puro che implementa l'OOP, non pensare che i linguaggi ad oggetti siano implementati in modo differente, solo che in quel caso tu non vedi questi meccanismi e non li implementi, mentre su librerie OOP per il C tu hai pieno potere sulla filosofia stessa dell'OOP.

Secondo me è affascinante  :geek:

29
Citazione da: "rebraist"
ti faranno santo per la pazienza...
/me rimette a posto lo stroustrup e tira un sospiro di sollievo...

Secondo me dovresti semplicemente leggerti un libro che introduca in modo generico l'OOP e poi applicare in modo pratico le cose che hai letto sfruttando BOOPSI/MUI. Devi pensare ad oggetti, il resto è relativamente semplice  ;)

30
Citazione
Domanda: questo chiaramente non è fattibile in C o sbaglio?

C'è un altro moodo di programmare sugli AmigaOS che non sia il C? :)
Tutte le API AmigaOS prevedono interfacciamento con C (ed eventualmente assembly, ma non lo considero), quindi qualsiasi cosa che scrivo vale per il linguaggio C. Hai mai provato a scrivere programmi C++ su AmigaOS3.x? E' una cosa quasi impossibile, tra l'altro consumano il triplo di memoria e molte tecniche di programmazione del C++ sono mal supportate dai compilatori di OS3.x. Qualche programma scritto in C++ esiste, tipo HTMLView, ma è buggatissimo.

Citazione
Altra domanda ancor più scema di quella di prima: dichiarare un attributo pubblico (che non ho capito se si parla di una costante simbolica del c oppure di un effettivo attributo pubblico di una classe c++),
Un attributo pubblico è una variabile dell'area dati della tua classe visibile da altre classi perchè è associata a un simbolo ed è gestita attraverso l'override di almeno uno dei metodi OOP new, get, set.

per la serie:

Codice: [Seleziona]
#define MUIA_MiaClasse_MioAttributo  18328439692438424

IPTR SetClasse1(struct IClass *cl,Object *obj,struct opSet *msg)
{
  struct areaDati1  *data = INST_DATA(cl,obj);

  {/*blocco per la lettura della tag list*/
    struct TagItem *tags, *tag;
    tags=((struct opSet *)msg)->ops_AttrList;

    while (tag=NextTagItem((TAGITEM)&tags))
    {
      switch (tag->ti_Tag)
      {
        case MUIA_MiaClasse_MioAttributo:
         if (data->attr1==tag->ti_Data) tag->ti_Tag = TAG_IGNORE;
        else  
        {                                                                      
          data->attr1 = (STRPTR) tag->ti_Data;
          //E' CAMBIATO IL MIO ATTRIBUTO, FACCIO QUALCOSA
        }
        break;

        ...
      }
    }
  }

  return DoSuperMethodA(cl,obj,(Msg)msg);
}

 
E dall'esterno lo potrai dunque settare:

Codice: [Seleziona]
SetAttrs(objIstanziatoDallaMiaClasse, MUIA_MiaClasse_MioAttributo, "Cambio DI Valore", TAG_DONE);

Citazione
considerando che gli unici punti in cui i miei due oggetti si incontrano è nei metodi predefiniti (per quanto in override) non comporta necessariamente un aumento della lista parametri rispetto ai 3 canonici (cl, obj e msg)?
Come puoi vedere NO :)

Pagine: 1 [2] 3 4 5