AltME groups: search
Help · search scripts · search articles · search mailing listresults summary
world | hits |
r4wp | 4382 |
r3wp | 44224 |
total: | 48606 |
results window for this page: [start: 34201 end: 34300]
world-name: r3wp
Group: Core ... Discuss core issues [web-public] | ||
Maxim: 23-Oct-2009 | put it into curecode and add the above bug within the report... it will add to its relevance (and priority) within the post. | |
Maxim: 23-Oct-2009 | curecode is also for wishes... so if you want R3 to be what you want it to, you have to speak... and curecode is that place... many blog posts where originated from good curecode reports/suggestions. | |
Henrik: 23-Oct-2009 | And I have had one date related issue fixed. | |
Gabriele: 23-Oct-2009 | Graham, the explanation is that dates are not really mutable (or more precisely, are always passed by value and not reference). the date/anything: is a hack. (I sometimes think that, no matter how useful they are, those hacks only hurt a language in the end...) | |
Geomol: 23-Oct-2009 | REDUCE can be used to reduce blocks, and by that evaluate parens within blocks: >> reduce [(1 + 2)] == [3] But REDUCE won't evaluate parens themselves: >> reduce first [(1 + 2)] == (1 + 2) Is that a bug? (Same in R3.) | |
Steeve: 23-Oct-2009 | I see no bugs. REDUCE, acts on blocks, nothing else. TO-PAREN and TO-BLOCK on strings, act like LOAD, but don't bound the result in any context. Both of them have well known behavior. It's perhaps a lack of good documentation but no bugs. | |
Geomol: 23-Oct-2009 | I'm probably wondering, because parens works in many ways the same as blocks, but not when reduced. The same can be said about paths. and Parens and paths are default being evaluated (by the scanner/lexical analysis), blocks are not. And when you reduce blocks, parens and paths within the block are being evaluated. On the other hand reducing parens and paths won't evaluate them. I tend to agree, it's not bugs but lack of documentation. | |
Sunanda: 28-Oct-2009 | No really.....There is Puzzles and Puzzle Answers here, but they aren't very web-public. There have been some nice puzzles on the mailing list: http://www.rebol.org/ml-topic-detail.r?l=p&topic=puzzle | |
Sunanda: 28-Oct-2009 | The big problem with most code golf puzzles is they only ever play one one......It'd be better to have puzzles that are rolled out in stages: each stage being a modification to the previous puzzle spec. that way, generality and flexibility would be rewarded. | |
btiffin: 12-Nov-2009 | Ubuntu 9.04; rebcore (2.7.6) can devmem: open/read/binary %/dev/mem rebview hangs. Do I need to care? I don't need View for this little informational gathering app, but ... We are planning for an embedded system BIOS tweak so we can label an Asset Tag in the SMBIOS; REBOL won the race getting the information decoded for everyone to see; beat Python development by a few minutes (in a highly uncompetitive sharing information back and forth development "race") | |
Graham: 13-Nov-2009 | So, age is displayed as a days for under a week, in weeks for under 3 months, and as months upto 3 years, and then as years/months after that. | |
Graham: 13-Nov-2009 | I ended up using case .. and just straight subtraction of years etc instead of using 'difference which can sometimes lead to numeric overflow. | |
Izkata: 14-Nov-2009 | Something similar I've used: DayConv: func [Days /local Ret Tip][ Ret: copy {} Tip: false foreach Val [[365 y] [31 m] [7 w] [1 d]] [ if Days >= Val/1 [ append Ret join to-integer divide Days Val/1 Val/2 Days: mod Days Val/1 if Tip [return Ret] Tip: true ] ] return Ret ] 'Tip was to make it stop at just two time-indicators (So 2 months, 1 week, and 3 days would display just as 2m1w, omitting the days, for example) (Messy looking implementation is due to being reeaally tired at the time, just never felt like fixing it up...) | |
Geomol: 16-Nov-2009 | When you write d: 'a/:c d become a path! datatype, and it's not connected to your block, a, in any way. If you wanna expand the path, you can do something like: >> join d 'h == a/:c/h Is that what you wanna happen? | |
Geomol: 16-Nov-2009 | It seems path! doesn't work like file! but more like block!, which is also what Gabriele pointed out, I think. >> d/a == :c And that is also, why d/h fails. h is not found in the d path anywhere. | |
Geomol: 16-Nov-2009 | It is a bit confusing, also because both path! and file! are series, so it's easy to think, they should work the same. >> series? d == true >> series? %/a/b/c == true | |
Geomol: 16-Nov-2009 | A question: can it be justified, that file! is a series? >> a: %/c == %/c >> first a == #"/" >> a/1 == %/c/1 Is file! a pseudo-series? What exactly defines a series? It's some sort of a sequence of values, that can be picked individually. And series can be sorted, right? So the methods (or functions), that can be performed on the datatype defines its type. What defines a series in REBOL? | |
Maxim: 16-Nov-2009 | hehe I was writting up the EXACT same reply than geomol pointing out block and how to use do join x y ... had to for an exam at the dentist... I come back and geomol beat me to it ;-) | |
BrianH: 16-Nov-2009 | Geomol: "What defines a series in REBOL?" A series has contents, sequence and persistent position. The characters that make up a file (contents) are in a specific order (sequence) and you can do an offset reference to a later offset in the filename (position). If you do FIRST %a it will return #"a" every time (persistent position). Being a series doesn't mean that it is sortable, though many are. Being sortable means also having the contents be comparable, and the series be modifiable. We were careful to make sure that things that aren't really series-like were removed from the series! typeset in R3. R2 is less consistent in this regard, so you have some types attempting to act series-like, poorly - pots being the worst example. Some of the functions that act on series also act (differently) on non-series, but not all. | |
Maxim: 16-Nov-2009 | I thought that to qualify to be a series, a type also needed to support insertion, not only indexing and content. cause your above definition qualifies tuple! to be a series, but they aren't. | |
BrianH: 16-Nov-2009 | Position: HEAD, TAIL, HEAD?, TAIL?, AT, SKIP, NEXT, BACK Contents: PICK, POKE (for modifiable series), ordinals (FIRST, ..., LAST) Sequence: PICK and POKE can use numbers (used to implement ordinals) Persistent position and sequence: All of the above are repeatable, with no position change side effect. | |
Maxim: 16-Nov-2009 | and INDEX? ;-) | |
BrianH: 16-Nov-2009 | Bitsets, tuples, objects and maps don't have position. Objects and maps don't have sequence either (at least not in theory). | |
BrianH: 16-Nov-2009 | Ports in R3 (or open/direct or command ports in R2) don't have persistent position and sequence, or reference position. This makes them streams, not series. | |
Maxim: 16-Nov-2009 | yes basically, they are always at position 0 and looking at the data, implies you remove it, so ports are like quantum series ;-) | |
BrianH: 17-Nov-2009 | Well, paths are like blocks, not like filenames. You can't make them act like filenames without breaking them *in every other way*. You can build path just fine with JOIN and APPEND, you can fully evaluate them with DO, and you can partially evaluate them with get-paths without ever needing to use GET IN. Functionally, there is no problem with R3's current behavior except bugs 396, 861, 1236, 1339, and maybe 746 and 803. | |
james_nak: 18-Nov-2009 | Anyone know a simple way to transform a block of sub-blocks into a single block while retaining the original type? I have [ [1] [2] [3]] and I'd like [ 1 2 3]. I can do with with form and parse but it then I get ["1" "2" "3"]. | |
Maxim: 19-Nov-2009 | this should be a native in R3... there are MANY places where this is both needed and its always slow. | |
Graham: 20-Nov-2009 | I've got some gui code which I am loading from a text string, and then running it. I am binding it to some local words which I want to use and that works fine. But I also want to invoke functions in the global context and it can't find them. What to do? | |
Graham: 20-Nov-2009 | eg. the text is button "test" [ alert "hello" ] and I get an error clicking on the button. | |
Chris: 20-Nov-2009 | 'isolate takes a block of words, creates an exclusive context, sets words in that context to their value in their current context and returns a word bound to that context. | |
Janko: 27-Nov-2009 | and define a variable/word "pages" in the block like I did .. this word changes the global binding probably? which is not very good because it might owerride some other binding ... am I correct and is there some elegant way to not introduce such negatiev side of this otherwise elegant pattern? | |
Janko: 1-Dec-2009 | Brock: it went okeyish ... otherwise it was great and I did sew some pushed out eyes (from few python programmers) towards the end. The problem was I had very programmer / code - centric presentation , where I was hoping to give (better) coders some clue what and how REBOL is different, but when I asked how many of them were programmers it was just like 20% or less . So I had somewhat hard time trying to show details of code and tons of code examples imagining that the most of listeners will have no clue whatsoever about what I'm talking ... | |
Janko: 1-Dec-2009 | I see now that I should just focused my thoughts on those guys who were programmers instead of seeing all the nonprogrammers not understanding a thing I was saying. Basically I missjudged the audience. And there would probably be more programmers if there werent two very interesting talks with known names at the same time as mine. | |
Janko: 1-Dec-2009 | I am not joking about "pushed out eyes" ... I saw 2 that were programmers that were towards the end really intenselly looking at code I was showing and how I'll explain it. the whole thing about read http:// read %file ... open pop:// and process it as serries qute impressed one guy When I ended a couple of other programmers aproached me and asked me how this can be installed and if it's free etc .. and one pythonista said that email sending really impressed him, but otherwise he doesn't know yet .. there were also questions like "why this and not python" and "community size" and I had some explaining to do about code is data / data is code big deal | |
Henrik: 1-Dec-2009 | It makes me think that the process of downloading and installing REBOL is a great demo in itself. | |
Janko: 1-Dec-2009 | Yes, I was thinking of putting the scripts there but then a lot less people would see it.. you know how people are .. first and foremost LAZY | |
Janko: 1-Dec-2009 | When I asked how many were programmers and only 4 raised hands I almost wanted to stop talking because from that point on almost all slides are code and at the end I was trying to look at concrete scripts which I was worried also coders won't understand so quickly after finding out at rebol | |
Henrik: 1-Dec-2009 | Many scientific talks are divided in two parts: One for the masses and one for the experts. | |
Janko: 1-Dec-2009 | If I knew how it would be I would prepare more light talk , with some cool stuff , only little code and more visual .. like doing a gui to post message on twitter all in few lines and typed in front of them . I had demo of this when I was preparing for talk | |
Janko: 1-Dec-2009 | I will be playing with some erlang soon , did anyone maybe yet work anything on the BERT serialisation .. http://bert-rpc.org/(it's the binary erlang term serialisation). BERT-RPC based on it also is very minimalistic , binary (so you can send over images or anything) , and has some really cool features ? | |
Gregg: 2-Dec-2009 | Talks often dont' go as planned Janko. I'm sure you did fine. For a less technical audience, I try to focus on how little code it takes to do useful things; and how readable that code can be. Having some simple GUI examples is important, because normal people don't want console apps. For programmers, I emphasize that REBOL isn't really a programming language; it's a messaging language. As Carl has said "It was designed for the semantic exchange of information between people and machines." So it's never REBOL compared to Python, or Ruby, but compared to those languages plus XML or JSON. | |
Gregg: 2-Dec-2009 | I haven't seen anything on BERT, but Maarten has done some Erlang and may know. | |
Janko: 2-Dec-2009 | It was ok.. I was not sooo satisfied with situation but I was satisfied on how I handeled it and it was ok. | |
Janko: 2-Dec-2009 | One collegue smalltalker that we meet at previous barcamp wrote me on twitter something like "this is bloody usefull :-)" after seeing the slides and code examples screencast on internet. | |
Geomol: 2-Dec-2009 | I often find myself thinking about, how to categorize REBOL among other programming languages. I think, it's how the language wants us to make sentences and not just give commands, one on each line. In REBOL, we write: insert back tail series my-value and it feels natural. In other languages, you would do something like: int sz = length (series); Series *ptr = &series[sz - 1]; insert (ptr, my_value); You could maybe do: insert ( &series[length (series) - 1], my-value); but it's just far from being as elegant as in REBOL. So most languages are like simple commands all the time, one after each other. With REBOL we make sentences. It's like a huge step up from many traditional programming languages. | |
Gregg: 2-Dec-2009 | Yes. I think of this aspect as combing the best elements from Forth and Lisp/Logo in a natural way. That is, lists (blocks) are the foundation, and you build up a vocabulary to do what you want. It also encourages us to structure and doc things a little more, compared to Forth; but you have the freedom to express things any way you want. It's a very different view from Python, where (my opinion), the goal is to make all programs look the same, no matter what the problem domain is. | |
Janko: 3-Dec-2009 | I remember from Factor irc where they tried to make smtp compat with gmail that gmail does something a little different that with regular ssl connections. I think it starts without ssl and initiates it in the middle of communications or something like that | |
Graham: 3-Dec-2009 | This script http://accessories.s3.amazonaws.com/hotmailer.r uses a secure pop protocol to login to hotmail and download messages, and remove attachments. Should work with gmail. | |
Graham: 4-Dec-2009 | >> to-decimal "0 " ** Script Error: Invalid argument: 0 ** Where: to-decimal ** Near: to decimal! :value now it seems to me that if you're going to allow string input to 'to-decimal then the most likely instances of this type of data is where it has been parsed in or comes in via a form and so it should by default handle whitespaces | |
Graham: 7-Dec-2009 | Some guy got Arc to run on one of these and setup a web server | |
Claude: 8-Dec-2009 | hi, i would like to know if R2 and R3 have a scheme for LDAP ? | |
Pekr: 8-Dec-2009 | MikeL: I think that we are at the very beginning of such topics. You can read my marketing/strategy related material in Article REBOL adoption, and I reduced it to two words - EASY DEPLOYMENT: http://www.rebol.net/wiki/Marketing_Strategy_Websites | |
Pekr: 8-Dec-2009 | To answer your question in more concrete manner - I think that we have to stop and prevent our past ttitude of "you can code it yourself". Many ppl who come or will come to REBOL, are seeking a solution, they are not interested to do the work themselves. I think that R3/Extensions open some door to link to many outer system. But the hard work still needs to be done. As we are a small community, I once again propose some kind of Bounty system, so that we can sponsor most popular requests. This should address one aspect of the problem - REBOL devs not necessarily working only for free ... | |
Gregg: 9-Dec-2009 | Steve, I always use CALL these days. Or Gabriele and Doc's async-call. By using system/options/boot, you can launch the interpreter you're running under. | |
Gregg: 9-Dec-2009 | Alan, I haven't done it from the command line, but a quick search makes me think it might be possible using Windows Fax and Scan, if your on the right OS. I did a fax interface for Bo a few years back, but it used APIs. Graham may have thoughts here as well. He's done a lot with Hylafax I believe. | |
Graham: 9-Dec-2009 | and in so much as rebol runs as a command line client, then it can be readily done. | |
Gabriele: 10-Dec-2009 | when you use file! call does a to-local-file automatically, and wraps it in quotes. | |
eFishAnt: 10-Dec-2009 | wow, thanks guys, for the "launch buffet" I was hungry, and you gave me to eat. | |
Graham: 11-Dec-2009 | the first line is redundant, and the second line can be changed to a parse ... if parse headers/content-type [ thru "boundary=" opt {"} [ copy boundary to {"} to end | copy boundary to end ]][ ;remove back tail boundary print ["Boundary string:" boundary] ] which I think fixes it. | |
Graham: 11-Dec-2009 | Just testing my script that logs into hotmail with gmail instead .. to download new email, and detach any attachments. Seems to be working now. | |
Henrik: 11-Dec-2009 | I'm debugging some code here and found that the ARRAY mezzanine has at some point been rewritten during R2 versions. Does anyone know when this happened? | |
Henrik: 12-Dec-2009 | looks like the change was made between 2.7.5 and 2.7.6. | |
Maxim: 12-Dec-2009 | most smtp servers do ip filtering on the input. this allows them to know who is sending the email to them and will only allow ips they serve to connect. since your hosting account is probably on a remote server, it won't be allowed to send data via your home smtp server account. | |
Von: 12-Dec-2009 | Sorry for the redundant posts. Altme was updating and msg board wasn't being updated at the time. I thought I was losing the info. | |
Von: 12-Dec-2009 | SMTP Relay lets you send email messages through your email account using your existing email service. For example, you can continue to use Microsoft Outlook to compose, receive, and send email messages, but the actual email messages are processed through our SMTP relaying services. This lets you bypass ISP restrictions on your outbound email messages and allows you to use your professional looking "[sales-:-coolexample-:-com]" email address rather than a general “[sales-:-ispname]” address. | |
Maxim: 12-Dec-2009 | set-net is the rebol networking setup function. it is usually run on install and is stored in your user.r | |
Graham: 12-Dec-2009 | and if you're not on your ISP ... it probably won't even let you send the email | |
Von: 12-Dec-2009 | I've supplied all necessary info in set-net, which includes username and password. | |
Graham: 12-Dec-2009 | make it a cgi script and see what is written to %log.txt | |
Von: 12-Dec-2009 | Wow, that's it! :-) I've spent almost 10 hours trying to resolve this and I had the wrong smtp relay, duh me! I really appreciate your help! | |
Maxim: 12-Dec-2009 | and who said we coudn't make profit by reboling ;-) | |
Von: 13-Dec-2009 | Graham, you mentioned that I should encode the password. Is this in case someone hacks into my host? If I use the encloak function, couldn't someone also find my readable key in the script and then decloak my password using Rebol? | |
Henrik: 13-Dec-2009 | would there be instances where write/lines/append would write a quarter or half a line? I'm logging tests of several script instances into the same file and write/lines/append sometimes produces only half a line in the log. | |
Maxim: 13-Dec-2009 | but when things are in the millions, sometimes using a disk-based on-demand caching algorithm is fastest... it really depends on the application. cause think of it this way. every byte used by each element becomes a MB so adds up quickly. 5 million pairs of (10 byte) strings and pairs... is just about 350MB ! >> b: make block! 5000010 >> m: stats == 84172417 >> loop 5000000 [append b copy random "1234567890" append b random 10000000] == ["5862713409" 4765171 "2546013987" 2726704 "9528013746" 3565380 "4591302786" ... >> stats - m == 348435008 | |
Maxim: 13-Dec-2009 | (oops 'strings and pairs' > 'string and *integers*' ) | |
Janko: 13-Dec-2009 | aha, I see that it depends .. I increased the length of string and block increased in size while hash stayed the same | |
Pavel: 14-Dec-2009 | Transfering memory based hash! (map! in R3) datatype into disk based shema automatically keeping the hash table computation and lookup hidden from user gives you a RIF. Holly grail of all rebollers :) long long time promissed, still waiting to be done. Anyway hash tables are always usually unsorted, when necessary to search in usually some type of additional index is used (B-tree for example), for simple information if the key is in the set, bitmap vectors are used with advantage, when the set is really big (and bitmap vector doesn fit into memory) comressed bitmap may be used and usually bitwise operations on those vectors are much quicker than on uncompressed. Thisi is why it should be used for bitset! datatype anyway. The number of byte aligned (BBC,Packbit,RLE)od word aligned (WAH) schemes exists. It is used in very large datasets when index also resides in disk file. Once again bitwise operation may be much quickier even in memory on those schemes. | |
Maxim: 14-Dec-2009 | when map! will added to extensions, you might be able implement an example for us and Carl might consider adding your code directly in the host or r3lib if you agree to it. :-) | |
Maxim: 15-Dec-2009 | I will be rebuilding the callback example with a much better/simpler design. but they work very well, basically I have mapped the Reb_Do_String() and Reb_Print() functions so that they can be called from within any extension. | |
Maxim: 15-Dec-2009 | this way we can create rebol code directly from strings and native data very easily. there is currently a size limit on executed strings, its a simple question of optimisation. this means we can't use the wiredf function for creating large datasets via strings (for now). but I'm already doing stuff like: wiredf("rogl-event-handler make wr-event [new-size: %p]", win-w, win-h); calls rebol's do with %p replaced by a pair, using 2 ints. this is a varargs function. | |
Gabriele: 18-Dec-2009 | i was just thinking again about the idea of IF (etc.) keeping a reference to the condition argument for you, that is, so that instead of writing: if x: select block value [do-something-with x] you can write: if select block value [do-something-with it] The reason people say it's not worth it is usually that of having to bind/copy the block - you don't want that in every IF call and probably not even in the ones where it would be useful (and, there's really no other name you could use for the function). | |
Gabriele: 18-Dec-2009 | so, I thought, can we avoid the bind/copy in any way? actually, i think we can. some people would run in horror maybe, and Brian will complain about it not being thread safe (we still have no threads though), but what about the native was changed to do something like: func [condition block /local it*] [ set/any 'it* get/any 'it it: :condition also if :condition block set/any 'it get/any 'it* ] | |
BrianH: 18-Dec-2009 | IT could be a function that returns the thread-local top of the stack of implied subject values. IF would then push a value on that stack, and pop the value off when it returns. Might be tricky to make error-throw-safe, but easy to make thread-safe :) | |
BrianH: 18-Dec-2009 | It is mostly used in combination with ANY and ALL for control flow. | |
Steeve: 18-Dec-2009 | For complex control flow rules, i rather prefer CASE. Most of the time, combitations of ALL ANY, can be replaced by a CASE structure (which is faster and more readable) | |
BrianH: 18-Dec-2009 | I prefer CASE too, and have rewritten many mezzanines to use it :) | |
BrianH: 18-Dec-2009 | It doesn't always apply to the task at hand though. The IF and UNLESS return values have been applied to the general R3 control flow model, as have the changes to the ordinal return values, map! behavior, ... | |
BrianH: 18-Dec-2009 | The advantage to this approach is that it would be error-throw-safe, as well as thread-safe, and require no changes to IF or UNLESS :) | |
Maxim: 18-Dec-2009 | I like Gabriele's idea. I am one of those that has been using the if/unless return value for years, and quite often. | |
Gabriele: 19-Dec-2009 | Re: IT - the problem in looking up the stack is knowing which argument to look it up. I guess the first would work and be useful enough, though. | |
Paul: 19-Dec-2009 | Isn't something like this code already built-in in REBOL and I'm just missing it: copy-to: func [series [series!] arg /local cpd d][ cpd: make type? series 10 foreach item series [ either not-equal? arg item [insert tail cpd item][break] ] cpd ] | |
Paul: 19-Dec-2009 | This function returns a copy of everything until it finds the value specified and then it breaks. | |
Steeve: 19-Dec-2009 | If it was possible, the 'IT function could be emulated like this: IT: does [push pop] ; pop the and repush the last stacked value (just to read it without modifying the stack). | |
BrianH: 19-Dec-2009 | Oh, and suffix-map is used by the codec system, afaik. | |
BrianH: 19-Dec-2009 | Sorry Bolek, I should have been more specific. I meant Steeve's POP proposal and the CONCAT example wouldn't work (for reason's stated above). Gabriele's IT proposal and Steeve's sample implementation of it would work a little, but would need modification. | |
Gabriele: 22-Dec-2009 | and, how many of them do something like: var: unless ... | |
Rebolek: 3-Jan-2010 | I was reading http://www.chalicegames.com/swym/SwymWebIntro.html and some concepts were interesting to me(especially ETC), so I made REBOL equivalents: http://box.lebeda.ws/~rebolek/rebol/swyv.r There's a documentation in the script, so just few examples of what it can do: SERIE: >> serie [etc 1 2 4 .. 20 cycle [1 2 3] length 5 iterate [x: x + 10] from 10 5] == [1 2 4 8 16 1 2 3 1 2 10 20 30 40 50] COMPARE: a: [1 2 3 4 5 6 7 8 9] b: [2 4 6] >> compare a b [some a > every b] == true >> compare a b [one a > every b] == false FILTER: >> filter serie [iterate [x: x + 1] 10 ] [[x > 2] [x < 5]] == [3 4] >> filter etc [3 6 9] 100 [x > 250] == [252 255 258 261 264 267 270 273 276 279 282 285 288 291 294 297 300] >> filter serie [1 .. 10] [[x > 5][zero? x // 2]] == [6 8 10] It's written in R3 but should also work in R2 (not tested). It's not optimized so if you're interested in it, feel free to do whatever you want to improve it (more patterns that ETC can recognize...). | |
Dockimbel: 3-Jan-2010 | Rebolek: thanks for the link, lots of good food for thought here. That would be great to support it at native level (using a R3 extension). I also wonder how much of it could be implemented efficiently using 'map-each and 'apply. Anyway, this could be a really great addition to R3 (or even R2). Keep up the good work. | |
Steeve: 3-Jan-2010 | Well it's interesting as a study dialect. But to be honest guys, i don't see the interest to have them in Rebol. Because we can do much of the use cases rebolek showed us with one or two lines of rebol code. And i don't need to say that it will got lightning speed by comparison But anyway, It's lot of fun to do such things with Rebol. |
34201 / 48606 | 1 | 2 | 3 | 4 | 5 | ... | 341 | 342 | [343] | 344 | 345 | ... | 483 | 484 | 485 | 486 | 487 |