01:16:42 infinite meta regress is not your friend 01:28:52 adu joined #tunes 01:28:56 hello 01:30:36 hi 01:31:00 21hows tunes 01:31:13 have you gotten anycode yet? 01:31:23 I'm not working on tunes 01:38:36 why are you here? 01:38:42 just hanging? 01:38:47 I'm interested in programming languages 01:38:52 why are you here? 01:39:09 i'm interested in tunes 01:39:15 but i'm also interested in pl 01:39:23 especially hll 01:39:34 cool 01:39:35 because those are really the only ones you can be creative in 01:39:56 asm only lets engineers be creative.....to an extent 01:40:10 you can be creative in many mediums 01:40:13 what langs do you know? 01:40:23 several 01:40:34 i'm doing a site on langs.....you wanna see the index? (its very under constrcn) 01:40:39 sure 01:42:22 http://216.248.201.24/andrew/test/progrm/progrm-bbidx.html 01:43:20 http://216.248.201.24/andrew/test/main.html is the real main page, but none of its children except programming - index really has any contents. 01:44:22 cool 01:44:55 its just a list for now 01:45:01 i'm slowly filling in the blanks 01:45:44 the links don't seem to work 01:45:48 my nick is what i thought of when i was chatting on my sick day. 01:46:00 i know 01:46:30 as i was saying content is an issue, but it is slowly resolving.... i just need to finnish the tutorials 01:46:41 ah ok 01:46:45 my goal is no have at least 10 up to start with 01:47:05 and i have 1 really good one and about 5 unfinnished, so i'm getting there 01:47:19 and 4 totaly crap 01:47:34 do you see any possible additions that i missed? 01:47:48 i don't think i mentioned Oracle 01:47:53 let's see 01:48:03 befunge 01:48:05 funge 98 01:48:15 omega 01:48:20 transframe 01:48:25 beta 01:48:27 o and Brainf*** 01:48:33 yup 01:49:46 tcl 01:50:01 o, didn't i put that? 01:50:11 oh, you've got tcl 01:50:13 didn't see that 01:50:33 i've also added x86 chips to the list, but didn't upload it yet 01:50:54 ok 01:51:41 are there any dialects of lisp i should be aware of? 01:52:07 i know 3 actually, O script-fu! 01:52:12 thats it! 01:52:20 is that just for gimp? 01:53:08 there are lots of lisp dialects 01:53:09 wanna know what I'm trying to do? 01:53:16 what's that? 01:53:36 i'm trying to make a language that is recrusivly reflective, and i'm not sure if thats possible..... 01:53:45 which is different than reflective 01:54:06 and i'm still trying to figure out what that means. 01:54:06 you can't have infinite meta regress 01:54:19 ya, its probably an illution 01:54:24 but i'm making progress 01:54:39 how are you handling the regression? 01:55:06 its always evolving, just when i figure out something to base it on, i find something that could make it work better.... 01:55:13 i'm starting out with the basics 01:55:24 that's the way to go 01:55:33 types, and instances 01:56:03 first i tried enumerating my types i would have in my lang 01:56:13 so your language is statically typed? 01:56:28 and there are lots of types that are very similar, like array, list, hash, mul-dim-array....etc 01:56:42 kinda, i'm not sure yet 01:56:55 but then i tried a heierchical type system 01:57:05 kinda like classes, in java 01:57:33 right 01:58:06 and then i took a different aproach, and tried making tables of the capabilities of different types at different stages. (i.e. declaration, instantiation, initiation, and using) 01:58:21 and i noticed something while making the tables. 01:58:33 what's that? 01:59:03 maybe this is obvious to programmers, but it really made an impact on me. 01:59:21 i had different deffinitions for initialization and instanciation 01:59:38 ya? 01:59:49 and objects can't be initialized, and primitive variables can't be instantated 02:00:42 why not? 02:03:15 so instantiation is just an inderect form of initializtion for objects 02:03:15 and i wanted a lang that coud instantiate vars, and init objs....... :( 02:03:15 make any sense? 02:03:15 or am i just slow? 02:03:21 sorry, net lag 02:03:46 what is the difference between instantiation and initialization? 02:03:54 if you keep those defns separate i don't see y not... 02:05:44 I'm not sure I see the difference 02:06:25 because i've always thouse objects were a good idea, i just don't like the fact you have to make a class for them, what if you just wanted one object of that type? the use of a class would be a waste 02:06:25 s/thouse/thought/, sorry 02:07:40 you don't have to make a class for them 02:07:52 many languages are object-oriented but have no classes 02:08:11 i'll use abbrvs. inst is when you form an item from a template, and init, is when you assign a value to a predeclared item. 02:08:21 thats cool 02:09:00 okay.. 02:09:08 I just never form an item froma template I guess 02:09:20 i wanna learn them. but its not a big issue, i assumed smalltalk , or something oo, already did it... maybe i just don't like java... but i want to have my lang include as many cools things as possible 02:09:46 cool things are good :) 02:09:48 in certain langs, everything is a template, like C 02:09:59 int is a template for making an integer 02:10:03 in certain langs, everything is an object, like self 02:10:10 or omega, or beta, or newtonscript 02:10:16 hmm i need to add that one too 02:10:27 oooo newtonscript? 02:10:29 ) 02:10:55 o and whats semi-thue grammar? 02:11:05 semi-thue? 02:11:16 i read about it on a buttfuck page 02:11:23 s/butt/brain/ 02:11:24 haha 02:11:30 oops 02:12:00 maybe its not a word 02:12:16 never heard of it myself 02:12:18 what are these omega + beta you kep referring to? 02:12:47 o i didn't include PDF + ps did i? hmm, maybe i should put those in the format area... 02:13:02 just two object-oriented classless prototype-based languages 02:13:07 dunno 02:13:46 i usually try at least to have an overview of a lang b4 i talkabout it 02:13:56 good rule of thumb 02:14:13 like i know C very thuroughly, even though i've never programmed much in it 02:14:32 i made a program that made a window appear on mac 02:14:47 cool 02:15:10 and i made a parser in linux that spit back words you say separated by "\n" 02:15:15 in C 02:15:45 and i've written a lttle in perl, but it didn't work the way i wanted it to, i'm still working on it somewhat... 02:16:10 perl is funky 02:16:15 i like perl, but i love python, you should really take a look at that lang.... its pretty 02:16:32 pretty contageous 02:16:35 hehe 02:17:04 i agree, perl is pretty WIERD, but it makes many things very easy, like text manip 02:18:02 yeah 02:18:06 that's what it's good for 02:18:10 I've used python 02:18:33 it really sucks tho, theres this guy in #python that i REALLY HATE, but i kinda wanna go in and chat, but i dont' really want to with him in there... 02:19:19 and my lang will support multiple item passing. 02:19:39 multiple item passing? 02:19:49 wanna know the name of my lang right now? (i've changed the name 2 times already) 02:19:56 sure 02:20:00 item= parameter/argument 02:20:07 Passion 02:20:24 cool 02:20:27 Parameter Argument Signal System I/O Neogrid 02:20:31 haha 02:20:56 a neogrid is a concept i worked up thinking about AI... 02:21:33 which is? 02:21:46 its basically a table of threads, and each has a very unique purpose, like to see what the topic relates, to or to check whether something is ready to say back to the user 02:22:12 i was trying to write a smart chat bot 02:22:25 and eventually test it online 02:23:14 those are tough 02:23:23 yup 02:23:32 i like chalenges tho 02:23:34 ) 02:23:45 but don't you think thats a good idea? 02:24:08 its probably done b4, but everythings worth a try from another prespective...... 02:25:04 I think challenges are good 02:25:09 sometimes you just haveto reinvent the wheel to see that other wheels really are 02:25:13 but you've gotta know the limits of what's possible/realistic 02:25:18 I agree 02:25:22 ya :( 02:25:41 i hate that word, because it makes me give up hope 02:25:43 realistic 02:25:46 ( 02:25:46 it shouldn't 02:25:55 i like possible :) 02:25:57 it should just help you evalulate what you're doing 02:26:00 and help you do it better 02:26:02 ya i know 02:26:03 hehe 02:26:46 realistic has a bad connotation in my mind, no matter what dictionary def you give me 02:26:52 I suppose 02:27:19 because the only time i've heard it used is "BE REALISTIC!" 02:27:31 you know that dream commercial? 02:27:35 nope 02:27:52 think of how many times they've said "it won't work" 02:28:03 think of how many time they've been wrong 02:28:05 ) 02:28:26 I know 02:28:28 I'm not saying that 02:28:31 www.bankofamerica.com 02:28:35 ) 02:28:45 no i just like that commercial 02:28:47 ) 02:29:13 hehe 02:29:26 haven't seen it 02:29:28 k 02:29:29 don't watch much tv 02:29:34 o, ic 02:29:47 do you program much? 02:29:52 yup 02:29:56 cool 02:29:58 I love programming 02:30:16 whats your 'primary language' as the jargon file says 02:30:33 I suppose it's C++ 02:30:43 although I'm trying to make another one 02:31:02 it says only c/c++/lisp/perl can be primlangs :P i don't like the jargon file, i love python too much 02:31:13 another lang? 02:31:17 yup 02:31:28 or switch prim langs? 02:31:56 have you come up with much stuff yet? 02:32:10 yeah, but nothing really to distribute as of yet 02:32:34 i don't really either, except maybe my built-in type tree 02:32:44 i made a new type 02:32:52 its called a multiref 02:33:21 what is it? 02:34:36 its an array made of references..... not in a row like usual, but internally its an [int,*ptr] struct is suppose, and it follows the pointer int times 02:35:01 so if its [4,*ptr] its efectively ****ptr 02:35:03 hehe 02:35:54 I don't really understand 02:36:23 it could be used for lowlevel functions using it to provide more dynamism by jumping allong addresses until the specified routine is encountered... 02:36:32 hm ok 02:36:41 but its much less constant/direct 02:36:50 dynamic is the goal here. 02:37:05 do you know what a pointer is? 02:37:20 i define pointers and references as the same thing 02:37:39 yes, I know what a pointer is 02:37:43 ok 02:39:21 k, then the value that is stored in the only pointer the real structre keeps track of is used to find the next pointer, and the pointer is used to find the next and so on.. and int tells the prgram how far to go. 02:40:10 in asm i suppose it would be represented by a seiries of jumps.... 02:40:52 linked list? 02:41:02 nate37 joined #tunes 02:41:10 hrm... 02:41:17 nate? 02:41:27 yes? 02:41:33 witten: i suppose thats one way you can think of it 02:41:47 nate: n/m 02:42:25 witten: but you can specify which on the chain you want.... 02:43:14 i'm still trying to see how its useful, but i'm sure they looked at the wheel for awhile before they put 4 on a wagon 02:43:18 adu: #osdev 02:45:48 hello? 02:49:28 hey what kinda things would you have in your lang? 02:49:55 oh, I'd have it prototype-based 02:50:17 nate37 left #tunes 02:50:23 most people who make their own things usually do so for 1 of 3 reasons: competition, interest, or dissatisfaction 02:50:51 i assume your one of the latter 2 02:51:20 but for example M$ made c# to compete with java 02:52:06 2 and 3 02:52:11 as in 'C' type prototypes? like declarations? 02:52:17 no 02:52:31 like objects that you clone to get other objects.. instead of classes you instantiate to get objects 02:52:36 what then? 02:52:54 hmm 02:53:02 then can you extend them? 02:53:14 sure 02:53:17 cool 02:53:39 so this would have to be more like an environment too.... like smalltalk 02:53:58 the more i learn about smalltalk, the more inpressed i am 02:54:48 read about self 02:54:52 that's pretty damn impressive too 02:54:59 its asstounding that such a break though had to be diminishingly named, and misunderstood by those that made replacement langs/environments 02:55:05 k 02:55:28 i mean who would ever read about a lang with small in the name? 02:55:33 haha 02:56:19 New: try "Useless" now with MMX and TCP/IP support! 02:56:47 "Wow, hey boss! we need the newest version of Useless!" 02:57:47 "no, we already have Goodsoundingname 4.0, what else do we need?" 02:58:35 "But we have to buy it ITS USELESS!" 02:58:55 imagine that. 02:59:26 would you read a book called evalidity? 02:59:35 I don't know 03:00:03 i'm thinking of becoming a writer someday 03:00:32 what about "Demeaningless" 03:01:36 have you read about slate? 03:01:40 I don't know.. write it first, then name it :) 03:01:46 its the #tunes HLL subproj 03:01:54 good idea 03:02:08 me tierd 03:02:16 me goto bed 03:03:17 but i'll never get there you know y? 03:03:22 void andrew(int num) { 03:03:23 bed: 03:03:23 goto bed; 03:03:23 } 03:03:30 hehe 03:03:49 g'nite 03:04:01 nite 03:04:18 adu left #tunes 03:07:43 [QUIT] Fare quit: Ping timeout for Fare[ppp99-net1-idf2-bas1.isdnet.net] 03:16:45 witten left #tunes 03:20:01 smkl joined #tunes 05:56:57 smkl joined #tunes 08:18:10 hcf joined #tunes 09:13:34 [QUIT] JALH quit: changing servers 10:13:26 water joined #tunes 10:26:13 [QUIT] gREMLiNs quit: I am one who is many 10:36:44 abi: picool is Publications in Concurrent Object-Oriented Languages at http://yangtze.cs.uiuc.edu/Papers/Language.html or see also coop 10:46:40 lar1 joined #tunes 11:07:52 eihrul joined #tunes 11:11:59 abi: salsa is Simple Actor Language, System and Applications, a dialect of Java, w/ support for Concurrent programming with actors at http://yangtze.cs.uiuc.edu/~cvarela/mspls99/outline.html 11:22:02 abi: clara is an Actor Language for High Performance Distributed Computing at http://citeseer.nj.nec.com/339462.html http://citeseer.nj.nec.com/318841.html 11:49:32 abi: schematic is a concurrent object-oriented extension to scheme at http://web.yl.is.s.u-tokyo.ac.jp/pl/schematic.html 12:01:53 [QUIT] hcf quit: Read error to hcf[207-172-225-74.s74.tnt1.pld.me.dialup.rcn.com]: Connection reset by peer 12:04:43 hcf joined #tunes 12:07:04 [QUIT] JALH quit: brb, isp 12:14:53 abi: oof is Object-oriented Frameworks at http://psl.korea.ac.kr/~deasoo/fw.html 12:18:36 abi: oof is also http://www.jps.net/nikboyd/papers/framewks/index.htm 12:18:36 okay, hcf. 12:20:31 largish bookmarks file w/ potentially interesting links at http://lal.cs.byu.edu/people/larson/bookmarks.html 12:44:25 [QUIT] eihrul quit: Leaving 13:08:49 [TOPIC] ChanServ: http://tunes.org/ 13:11:21 [TOPIC] hcf: TUNES: Free Reflective Computing System http://www.tunes.org || Slate Programming Language http://slate.tunes.org || http://lambda.weblogs.com || Updated Mailing List Archives http://lists.tunes.org 13:20:54 [QUIT] JALH quit: brb, isp 14:00:00 abi: macgs is MacGhostScript, a Macintosh Port of Ghostscript (which sucks) at http://www.glyphic.com/free/macgs.html 14:00:00 abi: macgv is MacGhostView, a Macintosh Port of Ghostscript (which doesnt suck) at http://www.kiffe.com/macghostview.html 14:13:56 You might want to point macgs factoid to macgv factoid 14:14:42 abi: macgv is see also macgs 14:14:42 ...but macgv is MacGhostView, a Macintosh Port of Ghostscript (which doesnt suck) at http://www.kiffe.com/macghostview.html... 14:14:45 abi: macgv is also see also macgs 14:14:46 okay, hcf. 14:14:49 abi: macgs is also see also macgv 14:14:49 okay, hcf. 14:21:22 eihrul joined #tunes 14:24:51 [QUIT] gREMLiNs quit: Read error to gREMLiNs[as36-01-66-58.urc.bl.ac.yu]: Connection reset by peer 14:37:38 abi: beep water 14:37:38 i beeped water 14:38:38 [QUIT] gREMLiNs quit: Ping timeout for gREMLiNs[195.252.66.55] 14:48:03 log readers: slate discussion currently in #{}, logs at http://www.tunes.org/~nef/logs/noise/ 14:48:42 well, not quite sure what you mean by "*modes*" :) 14:48:50 that's the source of misunderstanding :) 14:49:02 ok 14:49:36 take your smalltalk message category as a basic concept to start from 14:49:59 of course, it has no semantic meaning, but then the metaclass system in smalltalk is poor 14:50:19 let's see an example 14:51:39 i could have a slot named "foo", but maybe i want another slot to access something within "foo" named "bar"... in a low-level way (old-style), i would name it "foo bar" or "foo/bar" or something 14:51:58 [QUIT] JALH quit: g'night 14:52:30 but in the system i am suggesting, it would be more like "foo"x"bar" ("x" being a cartesian multiplier) 14:52:57 ok, but where does this tie in with modes? :) 14:53:07 i'm suggesting that if you could make this *implicit*... 14:53:13 i'm getting there :) 14:54:01 ...then you would, when typing things into the prompt or making an expression, automatically have your slotnames mentioned transformed 14:54:47 hm i lost my train of thought 14:54:53 i.e. foo => foo bar? 14:55:01 yes e.g. 14:55:34 can't this be done in the MO? 14:56:13 or is the signifigance here that "foo" can have different meanings in different environments, but with the same objects? 14:56:16 yep :) 14:56:31 the whole point of this is to use to MO 14:56:37 even in that case, could still be done with MO 14:56:39 since we 14:56:45 're talking about lookup 14:57:11 another thing... 14:57:22 i'm wondering if our protocol is TOO simplistic :) 14:57:34 heh 14:57:39 well, it's a start 14:57:40 sure, it makes a pretty little minimal calculus 14:57:45 but it makes certain things laborious 14:57:58 besides, it's just a top-level factoring 14:58:13 obviously the MO needs more features than TWO 14:58:23 even if just to implement those two 14:58:39 well, i mean, while the idea of message passing can be reduced to a simple lookup + apply 14:58:52 this is not necessarily useful, while maybe expedient :) 14:59:06 anyway, one application of this quotation mode scheme is that we could pass the "stack" around as a slot 14:59:22 *shrug* 14:59:37 what would be more useful? 15:00:08 well, either making the MOP a bit more powerful, or a strong system of syntactic extension which we talked about 15:00:28 referring to what? 15:01:15 eh? 15:01:36 well, menial little things, such as parameter passing, and other things :) 15:02:00 water scratches his head 15:02:19 you mean the (dreaded word) meta-compiler scheme? 15:03:54 well, x + ^ y: number ............... ad infinitum gets tiresome :) 15:04:39 yeah i know 15:04:44 anyway, that's just at the interface level 15:06:38 and besides, this quotation modes scheme is useful as a generic kind of function 15:07:18 well, if this is all stuff in the lookup system, then where does quotation come in, though? :) 15:07:41 potentially, we could set it up so that quotation could be generalized to a generic scheme for type-coercion 15:07:47 huh? 15:08:04 i thought lookup involved quotation implicitly :) 15:08:26 well, sure, you get a symbol 15:09:11 but, i think that's more reflection perse than "quotation" 15:09:23 why? 15:09:42 dunn, i always though of quotation as a syntactic mechanism 15:09:43 as fare has said, quotation is a big part of reflection 15:10:13 well, syntax is just an object-structure as interface 15:10:22 which is a big part of reflection, but a syntactic part of it :) 15:11:17 heh sure 15:41:21 [QUIT] eihrul quit: Later. 15:43:12 mibin joined #tunes 15:47:12 hey mibin 15:47:24 hi water =) 15:47:33 good news: pidgin is in progress again 15:48:43 oh cool 15:50:37 is some code for it available? 15:50:45 abi: pidgin? 15:50:45 pidgin is the Slate implementation in C++ that eihrul is writing to use self-like meta-objects by default. 15:52:20 check eihrul's home page 15:52:40 abi eihrul 15:52:41 eihrul is at http://www.lvdi.net/~lee.salzman 15:58:21 [QUIT] mibin quit: Ping timeout for mibin[an1-719.dialup.tiscalinet.it] 16:04:45 [QUIT] hcf quit: Leaving 16:58:46 Kyle joined #tunes 17:03:01 hey kyle 17:09:54 hi. You're back! 17:10:48 [QUIT] Kyle quit: Leaving 17:11:22 heh oh well 17:57:31 Fare joined #tunes 18:28:32 malc joined #tunes 18:50:09 [QUIT] malc quit: Changing server... 18:59:57 eihrul joined #tunes 19:03:25 re 19:15:14 [QUIT] Fare quit: Ping timeout for Fare[ppp19-net1-idf2-bas1.isdnet.net] 19:21:03 hcf joined #tunes 19:28:29 mibin joined #tunes 19:29:59 re 19:31:55 re water 19:32:21 i have some criticism for the slate tutorial ... 19:32:47 no doubt 19:33:00 which reminds me, i have updates for it 19:33:12 should listSlots itself be message or not ? 19:33:13 but what are your comments? 19:33:49 everything in slate is a message (i.e. a slotname) 19:34:18 are there primitive messages? 19:34:34 that is messages with no parent object? 19:34:56 building tunes means no messages will be primitive 19:35:40 well 19:35:53 a message can be primitive and still have a parent 19:36:14 the question is whether it is implemented from within the language or not 19:36:54 water: well, doesn't mean nothing will be primitive, it just won 19:37:00 't *matter* what is primitive 19:37:01 at first, yes, of course there must be primitive messages, or at least handles for the primitives supported by the implementation 19:37:13 eih: ok right 19:37:25 because if what is primitive can be changed :) 19:40:04 can numbers be considered primitive messages? 19:41:28 most likely in slate, numbers won't be primitive but the MOs associated with them will 19:42:23 because you can't expect users to be satisfied with lambda-calculus formulations of the natural numbers ;) 19:43:07 damn straight :) 19:44:08 eih: how has laziness of evaluation affected the way you're working on the implementation? 19:45:07 well, i haven't considered laziness yet, atleast not for pidgin :) 19:45:23 hm 19:45:40 but as long as we have maps available to manipulate, we can encode laziness above that 19:47:17 well, i'm trying to stay humble with pidgin, or else i'll definitely never finish :) 19:47:29 having enough trouble with that as is 19:47:48 sure 19:53:40 another issue ... 19:54:19 the tutorial seems to assume that namespaces have implicit reference to the parent namespace 19:54:47 which is different from the parent object ... 19:56:02 i think you should not be allowed to go from one namespace to the upper one 19:56:11 or at least there should be a way to prevent that 19:56:27 otherwise any object could access any other 19:57:03 oh that's been addressed 19:57:14 two ways... 19:57:15 ie there should be something like 'chroot' 19:57:56 for one, meta-objects control what happens (including exceptions being thrown) when you try to access a slot (including the "<" upward slot) 19:58:36 furthermore, the user-security settings could be applied to meta-objects to enforce security user-per-user if desired 19:59:11 IOW security is not primitively-enforced, but the MOs make it easily possible 20:00:04 and yes, we like security, but a primitively-enforced policy with no open implementation of such is not useful (major tunes point there) 20:01:59 the other option we are looking at would allow us to make slots invisible dynamically, using a different quotation methods to hide lookup possibilities 20:05:48 [QUIT] water quit: Read error to water[c207-202-221-160.sea1.cablespeed.com]: Connection reset by peer 20:06:29 water joined #tunes 20:06:42 re 20:07:42 re 20:09:03 can the same object have multiple instances? 20:09:41 yes, through cloning with specialized MOs 20:09:42 that would be required if it would be a member of different objects at the same time 20:09:54 water nods 20:10:02 or the member of the same object multiple times 20:10:16 heh yep 20:11:22 now, we want the object system to be a generic linear graph (with pseudo-exceptions), so it's possible that this could be done without cloning, but i'm not ready to address that 20:11:45 iow probably more trouble than it's worth 20:11:59 hm what about the < slot of such an object? 20:12:08 exactly my point 20:12:10 it would point to two different namespaces then 20:12:13 no 20:12:22 you would need multiple < slots 20:12:31 oh clever 20:12:35 each in a different aspect of the object 20:12:45 which means you'd never see more than one at a time 20:12:58 but this is speculative 20:13:26 for now, clones with specially-parametrized MOs is the strategy 20:14:09 the MOs would basically forward state-updates up the chain as appropriate to maintain consistency between the views of the object 20:14:31 sounds a bit hard to implement tho 20:15:35 maybe 20:16:00 it depends on how state gets treated by code 20:17:20 a similar issue exists in filesystems that support links and the .. dir at the same time 20:17:48 that is 20:18:27 you are not sure that when you do cd dir ; cd .. you end up in the original directory 20:19:46 sure 20:27:18 [QUIT] hcf quit: Leaving 21:26:02 Fare joined #tunes 21:31:04 re fare 21:42:23 [QUIT] Fare quit: 3053 23:47:43 lar1 left #tunes 01:48:40 adu joined #tunes