Offtopic (I/2012)

Muu yhteisön välinen keskustelu.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Offtopic (I/2012)

Post by Jani »

Pettis wrote:Ei kenelläkään sattuis olemaan ylimääräistä beta-kutsua Blizzardin Hearthstoneen?
Niitä ei valitettavasti saanut ylimääräistä, ainoastaan yhden per tunnus. 7.1. alkaa seuraava jako niille, jotka ovat ilmoittautuneet betaan.
EDIT:

I stand corrected.

Last edited by Jani on Mon Jan 06, 2014 10:35 pm, edited 1 time in total.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Offtopic (I/2012)

Post by Pettis »

Jani wrote:
Pettis wrote:Ei kenelläkään sattuis olemaan ylimääräistä beta-kutsua Blizzardin Hearthstoneen?
Niitä ei valitettavasti saanut ylimääräistä, ainoastaan yhden per tunnus. 7.1. alkaa seuraava jako niille, jotka ovat ilmoittautuneet betaan.
Eri kampanjoissa jaetut kutsut eivät ole mitenkään sidoksissa tunnuksiin. Vasta oli esim. Korean Blizzardilla kampanja josta sai sähköpostiosoitteella kutsuja, mutta itse myöhästyin muutamalla tunnilla sen päättymisestä, niin ei ole kutsua näkynyt.

EDIT: Eipä mitään enää. On näemmä ilmestynyt peli tuonne battle.net launcheriin.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Offtopic (I/2012)

Post by MaGetzUb »

Tässä tuli taas pitkästäaikaa räplättyä CoolBasicilla enemmän ja "hakkeroitua" sitä. Ei siis ole kyse kräkkeröinnistä. Huomasin että tekstinhän saa helposti laitettua muistipalaan pelkällä Encrypt kutsulla, kunhan vain luo ensiksi muistipalan jonka pituus on tekstinpituus. :D

Code: Select all

str_ = strmem("Hello world!")

Repeat 
    ClearText 
    s$ = ""
    
    //Luetaan muistipalan koko -1 asti, koska viimmeinen tavu muistipalassa osoittaa vain kohdan,
    //missä tekstinluku pitää lopettaa.
    For i = 0 To MEMBlockSize(str_)-1
        s$ = s$ + Chr(PeekByte(str_, i))
    Next i
    SetWindow ""+s$
    AddText s$ 

DrawScreen
Forever 


Function StrMem(s$)
    mem = MakeMEMBlock(Len(s$))
    Encrypt mem,mem, s$
    Return mem
EndFunction 
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Offtopic (I/2012)

Post by Jare »

MaGetzUb wrote:Tässä tuli taas pitkästäaikaa räplättyä CoolBasicilla enemmän ja "hakkeroitua" sitä. Ei siis ole kyse kräkkeröinnistä. Huomasin että tekstinhän saa helposti laitettua muistipalaan pelkällä Encrypt kutsulla, kunhan vain luo ensiksi muistipalan jonka pituus on tekstinpituus. :D
Mielenkiintoinen havainto. CoolBasic käyttää muutenkin muistipaloja aika laajasti joka puolella. Kirjoitan nyt aika pitkästi, eikä tämä sepustukseni nyt välttämättä liity suoraan mihinkään. Kunhan vain tykkään itsekkin kokeilla erikoisia juttuja CoolBasicissa :).

Jokainen merkkijono itsessään on muistipala. Vähän aikaa sitten koitin hieman räpeltää tyyppien kanssa. Jokainen typin jäsenhän on muistipala, joka sisältää tiedon edeltävästä jäsenestä, seuraavasta jäsenestä, tyyppikokoelmasta johon jäsen kuuluu, jäseneen tallennetut arvot sekä vielä "ylimääräiset" neljä tavua, joiden merkitys ei itselleni auennut. Nuo tavut sijaitsevat jäsenen muistipalan lopussa, ja testeissäni ne olivat aina arvoltaan nollia.

Näissä testeissä havaitsin jäsenen ensimmäisen kentän arvon sijaitsevan positiossa 12. Arvo tulee lukea kentän tyypin mukaisella funktiolla, esimerkiksi kokonaisluvun olessa kyseessä:

Code: Select all

PeekInt(ConvertToInteger(tyypin_jäsen), 12)
Käytännön ongelmaksi muodostuu se, että tietotyyppiä ei saa automaattisesti mistään selville - se täytyy tietää. Itse tyyppikokoelman määritystietoihin en testeissäni päässyt käsiksi. Muuttujien suhteen homma toimii niin, että tyyppijäsenmuuttujat sisältävät suoraan osoittimen jäsenen muistipalaan. Sen sijaan tyyppiekokoelman tunnisteet - joita jopa niitäkin pystyy joissain tapauksissa lukemaan muuttujina - ovat juoksevia numeroita alkaen ykkösestä.

Tällä koodilla saa tyyppikokoelman numeron selville:

Code: Select all

Type HELLO_WORLD
    //Kenttien määritykset tähän....
EndType

Function Blah(type_index)
    MakeError type_index
EndFunction

Blah(HELLO_WORLD)

Voisi kuvitella, että tuosta tulisi syntaksivirheilmoitus. Ei tule. Tyyppikokoelman tunnisteen voi lukea harvoissa tilanteissa, mutta yksi niistä on käyttäminen funktion parametrina.

(Mielenkiintoinen sivuhuomio on se, että tuo juokseva numero vaikuttaa myös objektien juoksevaan numerointiin: jos ohjelmassa ei ole ainuttakaan tyyppikokoelmaa, ensimmäinen objekti saa numerokseen 1, mutta jos tyyppikokoelmia on, ensimmäisen objektin numero ei ole ykkönen, vaan se on riippuvainen tyyppikokoelmien määrästä). Lisäksi ConvertToInteger() ja ConvertToType() ovat varsin kummallisia funktioita. Mihin niitä tarvitaan? Kyseessä on jonkinlainen syntaksitarkistukseen liittyvä kiertotie. Ne eivät varsinaisesti konvertoi tyyppijäsentä millään tavalla. Muistaakseni CoolBasic sallii suoraan tyyppijäsenen asettamisen kokonaislukumuuttujaan ilman ConvertToIntegerin käyttöä. Sen sijaan itse muuttujan tyyppi on tärkeä jos halutaan lukea tai asettaa jäsenen sisältämiä arvoja: kenoviivan käyttö kokonaislukumuuttujan kohdalla ei ole mitenkään mahdollista.

Jäsenen arvojen lukeminen vaatii siis tietoisuuden arvojen tyypeistä. Jos kyseessä on merkkijono, jäsenen muistipalasta löytyy kokonaisluku, joka kertoo osoittimen itse tekstin sisältävään muistipalaan. Tuon muistipalan voi vaikka käydä poistamassa ja asettamassa tilalle toisen muistipalan. Tai voi muokkailla alkuperäistä muistipalaa. Voit vaikka syöttää saman muistipalan osoittimen kaikille tyyppikokoelman jäsenille johonkin kenttään: näin niillä on yhteinen, jaettu merkkijonomuuttuja. En nyt tiedä sitten, mitä järkeä tässä olisi :D.

Näitä jippoja voisi melkein käyttää vaikkapa universaalin tyyppikokoelman tallennusfunktion tekemiseen: funktio kykenisi tallentamaan minkä tahansa tyyppikokoelman kaikki jäsenet. Mutta valitettavasti ei ihan. Periaatteessa jäsenen muistipalan voisi kyllä käydä läpi loopissa ja tallentaa kaikkien kenttien arvot tiedostoon, mutta tekstimuuttujien tunnistaminen ei ikävä kyllä ole mahdollista. Jollain pitäisi saada selville, onko käsiteltävä nelitavuinen tieto osoitin olemassa olevaan muistipalaan vai ei. Kiertotienä voisi käyttää sitä, että funktiolle erikseen kerrotaan, mitkä kentät ovat merkkijonokenttiä.

Tallennusfunktion tekeminen siis kutakuinkin onnistuisi - lataamisfunktiossa taas olisi omat ongelmansa: Koska itse tyyppikokoelman määritykseen ei saa mitään otetta, ei muistipalakomennoilla minun kokemukseni mukaan ole mahdollista vaikuttaa kokoelman First()- ja Last()-arvoihin. Latausfunktio voisi luoda muistipalan, jossa on sama sisältö kuin tallennetulla jäsenellä, mutta sitä ei pystyisi liittämään tyyppikokoelman ensimmäiseksi tai viimeiseksi jäseneksi niin, että CoolBasic sen noteeraisi. Ongelmia seuraisi For Eachia sekä First():a ja Last():a käyttävissä ohjelmissa.

Periaatteessa voisi kuitenkin luopua tyyppikokoelmista järjestettynä listana ja tyytyä luomaan jäseniä ilman listaa. Jäsen saadaan täysin katoamaan tyyppikokoelman listasta jos sen sisältö kopioidaan toiseen muistipalaan (ja sen sisältämät merkkijonot kopioidaan myös ihan uusiin muistipaloihin) ja sen jälkeen poistetaan alkuperäinen jäsen. Jäsenen uuden muistipalan osoitin voidaan asettaa jäsen.TYYPPi-muuttujan arvoksi, jolloin päästään taas suoraan käsiksi jäsenen kenttien arvoihin. Jäsenen voisi jopa syöttää jäseneksi ihan toiseen tyyppikokoelmaan, mutta aiemmin mainittujen ongelmien vuoksi First() ja Last() -funktiot eivät koskaan näkisi kyseistä jäsentä. Myöskään For Each ei osaisi aloittaa lenkkiä uudesta jäsenestä, mutta toki se kävisi tuon uudenkin jäsenen läpi, jos ketjutus on tehty oikein: uuden kokoelman jonkin jäsenen täytyy sisältää tieto siitä että tämä uusi jäsen on sen seuraaja. Tämä on mahdollista toteuttaa, koska kuten aiemmin mainitsin, jokaisen jäsenen muistipala sisältää osoittimen seuraavan jäsenen muistipalaan - ja myös edellisen jäsenen muistipalaan.

Wall of text päättyy. Varmaan jotkut kohdat olivat aika epäselvästi esitettyjä. Jos asia kiinnostaa, juttelen siitä mielelläni lisää. Sähköpostillakin voi ottaa yhteyttä j-jare.fi. Elikkä viiva pitää muuttaa @-merkiksi. En käy täällä nykyään kovin usein, niin tuo meili on parempi vaihtoehto.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Offtopic (I/2012)

Post by MaGetzUb »

Juu tutkiskelin kans Wanhan CoolBasicin tyyppien toimintaa 2012, muutama sivu tätä topikkia taaksepäin.
Voisiko tekstimuistipalan tunnistaa MemblockSize() -komennolla, koska muut tietotyypithän ovat sitten vain 4, 2 tai 1 tavuisia. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Offtopic (I/2012)

Post by Konstaduck »

Hiljaista on ollut, saapa nähdä milloin Zero saa Classicin valmiiksi :)
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Offtopic (I/2012)

Post by Jani »

Onko kukaan muu osallistumassa Ludum Dareen? Itse osallistun Jamiin parin kaverin kanssa. Mitään syytä meillä ei ole edes saada peliä valmiiksi, vaan huvin vuoksihan tähän osallistutaan. Jos joku ei tiedä, mistä on kyse niin tässä vähän selitystä. Ludum Dare Compo/Jam on 48/72h - vastaavasti - pelintekokilpailu. Aihe paljastetaan aamulla kello 4 ja siitä alkaa aika. Lisään tämän viestin loppuun tuotoksemme kun kilpailu on ohi.
Käytämme tälläistä settiä:
  • Kieli: Haxe
  • Pelimoottori: Haxepunk
  • IDE: FlashDevelop
  • Grafiikka: Aseprite / Paint.net
  • Musiikki: FL Studio
  • Ääniefektit: bfxr
Tässä vielä asiaan liittyvä kuva.
Image

EDIT: Aika loppui ja tuotoksemme on tässä: http://www.ludumdare.com/compo/ludum-da ... &uid=34500
Mielipiteitä?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Offtopic (I/2012)

Post by Jare »

Jatkoin CB:n syntaksitarkituksen kanssa leikkimistä.

Ensiksi yksi hieman tylsempi huomio. Muuttujien, funktioiden jne. nimissä ei pitäisi olla sallittuja muut merkit kuin A-Ö,0-9 ja alaviiva. Väärin. Kenoviivan (\) ja pisteen voi myös sijoittaa näihin nimiin - ilman että nimi liittyy mitenkään tyyppeihin - kunhan nimi ei ala pisteellä tai kenoviivalla, tai pääty sellaiseen. Hyötyä tästä ei taida olla, mutta onpahan uusi tapa nimetä vaikka tiettyyn tyyppiin liittyviä vakioita:

Code: Select all

Type Pelaaja
    //Fieldejä tähän....
EndType
Const Pelaaja\Lukumäärä = 5
MakeError Pelaaja\Lukumäärä
CoolBasic tykkää vähän turhan herkästi herjata vääristä tietotyypeistä esimerkiksi perus merkkijonofunktioiden kohdalla: väärän tyyppinen parametri aiheuttaa virheen. Esimerkiksi InStr(oma_funktio(), "haettava") aiheuttaa virheilmoituksen, koska oma_funktio() ei mukamas palauta merkkijonoa. Ratkaisu: lisää funktion nimeen dollarimerkki:

Code: Select all

Function oma_funktio$()
    Return "blaa blaa blaa"
EndFunction
MakeError InStr(oma_funktio(), "haettava")
Samaan tyyliin voit tehdä funktiostasi myös float-tyyppisen (#) tai short-tyyppisen (%). Huomionarvoista on kuitenkin se, että funktion tyyppi ei oikeasti tee funktion paluuarvolle minkäänlaista konversiota: float-tyyppinen funktio palauttaa merkkijonon, jos komennat funktion sisällä Return "abc". Kunhan kusetetaan nipottavaa kääntäjää :).

Jos tykkää lyhyistä funktioiden nimistä, kannattaa vilkaista nämä helmet:

Code: Select all

Function $()
	Return "Dollari"
EndFunction

Function #()
	Return "Risuaita"
EndFunction

Function %()
	Return "Prosentti"
EndFunction

Print $()
Print #()
Print %()
WaitKey
Kuten esimerkistä näkee, noiden kaikkien esittelyt ja kutsut toimivat ilman ongelmia.

Jatketaan. Alan jo tykkäämään näistä kolmesta erikoismerkistä. Oletko koskaan kirjoittanut CoolBasicilla yleiseen käyttöön jotain koodikirjastoa ja toivonut, että sen käyttäjä voisi halutessaan ylikirjoittaa jonkin sinun funktioistasi omalla versiollaan - ilman, että hänen tarvitsisi muokata kirjastosi koodia lainkaan? Näin käyttäjä voisi näppärästi syöttää kirjastollesi pätkän koodia, joka kirjaston tulee ajaa tietyssä tilanteessa.

Yllä mainitut erikoismerkit mahdollistavat ikäänkuin "pohjafunktion" luomisen. Pohjafunktiota kutsutaan silloin, jos toista, ylikirjoittavaa funktioita ei ole määritetty:

Code: Select all

Function funktio#()
	Return "pohjafunktio"
EndFunction

MakeError funktio()
Ei mitään normaalista poikkeavaa tuossa yllä, paitsi että funktion nimeen on lisätty risuaita (voisi olla myös dollari tai prosentti). Huomaa, että kutsuvaiheessa erikoismerkkiä ei käytetä! Sitten koodaaja haluaa ylikirjoittaa pohjafunktion:

Code: Select all

Function funktio#()
	Return "pohjafunktio"
EndFunction

Function funktio()
	Return "ylikirjoittava funktio"
EndFunction

MakeError funktio()
Nyt kun funktio esiintyy kahdella kirjoitustavalla - erikoismerkin kanssa ja ilman sitä - esimerkin kutsu kutsuu nimenomaan sitä funktiota, jossa erikoismerkkiä ei ole. Jos erikoismerkitön funktio puuttuisi, CB osaisi automaattisesti kutsua erikoismerkillistä funktiota. BONUS: Jos haluamme, voimme edelleen kutsua pohjafunktiota, jos lisäämme kutsuun erikoismerkin: MakeError funktio#(), mutta tällöin pohjafunktion esittelyn pitäisi sijaita vasta ylikirjoittavan funktion jälkeen.

Semmosta :)
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Offtopic (I/2012)

Post by Latexi95 »

Hoh... Aina sitä CB:stä vaan löytyy uusia ominaisuuksia :D
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Offtopic (I/2012)

Post by koodaaja »

Vastaavanlaista kikkaa voi käyttää myös globaalien ja lokaalien muuttujien erotteluun, erikoismerkillä varustettuna muuttuja ei viittaakaan alkuperäiseen:

Code: Select all

Global muuttuja#
muuttuja = 5.0

Function printtaa_globaali()
    Print muuttuja
EndFunction

Function printtaa_lokaali()
    Print muuttuja#
EndFunction

printtaa_globaali()
printtaa_lokaali()

WaitKey
En tiedä voiko sitä mihinkään hyödyksi käyttää mutta tietääpähän välttää ainakaan vahingossa määrittelemästä uudelleen.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Offtopic (I/2012)

Post by Jani »

Hieno löytö Jonezilta. Tässä vielä pientä täydennystä. Funktiosta voi olla kolme versiota, joista kahta voidaan kutsua erikseen. Näin uskaltaisin sanoa, että %-merkki olisi parempi super-funktio.

Code: Select all

Print f()
WaitKey

Function f#()
    Print f%()
    Return "risuaita"
EndFunction

Function f%()
    Return "prosentti"
EndFunction

Function f()
    Print f%()
    'Print f#() // No thank you
    Return "override"
EndFunction
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Offtopic (I/2012)

Post by atomimalli »

Tuli mieleen, että jos kaipaa tänne keskustelua niin kannattaa irkissä vinkata kun ei tänne jaksa opiskelukiireessä muutenvaan vilkasta, vaikka välissä löytyisikin hiukan aikaa. coolbasicilla tai cb2:lla.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Offtopic (I/2012)

Post by Awaclus »

Voisin kai sitä tännekin tulla ilmoittamaan, että teen nykyään tällaisia.

https://www.youtube.com/watch?v=eCo4B0YsBI4
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Offtopic (I/2012)

Post by CCE »

Hyvää sunnuntai-iltapäivää.

Image
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Offtopic (I/2012)

Post by Pettis »

MItä tohon nyt sanois... :D
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
User avatar
Zero
Lead Developer
Lead Developer
Posts: 727
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Re: Offtopic (I/2012)

Post by Zero »

Haha
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog
User avatar
Frozen
Advanced Member
Posts: 282
Joined: Fri Jan 01, 2010 4:46 pm
Location: Suomi

Re: Offtopic (I/2012)

Post by Frozen »

Nettikaveri heitti jotain mielenkiintoista :)
Image
Työn alla:
Jotakin epäjulkaistua
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Offtopic (I/2012)

Post by MaGetzUb »

Kiva nähdä hiljaiseloa CB Classic:sta (Zeron uusia blogipäivityksiä oon lueskellut).. :) Onko tämä nyt ~10vuoden kunniaksi? :D
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Mikki0000
Member
Posts: 63
Joined: Tue Dec 27, 2011 11:50 pm
Location: Päijät-Häme

Re: Offtopic (I/2012)

Post by Mikki0000 »

Voisiko joku selittää, että miten vaihdetaan käyttäjänimeä?
Lisäksi sen Coolbasic Classikin pitäsi tulla nopeasti tai muuten se on
liian vanhanaikanen kun se julkaistaan joskus vuonna 2060.
exe tiedosto swf muotoon: Lopetettu
Tervetuloa lukemaan foorumin noloimman käyttäjän viestejä!
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Offtopic (I/2012)

Post by valscion »

Mikki0000 wrote:Voisiko joku selittää, että miten vaihdetaan käyttäjänimeä?
Laita viestiä vaikka Pettikselle, hänellä on oikeudet vaihtaa käyttäjätunnuksia.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Post Reply