So I read the paper today. One of the letters to the editor was possibly the stupidest thing I had read in quite a long while, and required a response. I considered writing to the editor myself, but a newspaper is hardly the best place to conduct a flamewar. Besides, no doubt other people would be searching for their cited evidence and come up empty, just as I had. Anyway, here it is.
As someone who is electro-hyper-sensitive, I’m really angry that yet another public service is being denied to me.
That’s right- in the first sentence they essentially claim to have super-powers.
Public buildings – libraries, universities, government offices, hospitals, medical clinics, community centres – and privately-owned restaurants and coffee shops are all infested with “wireless connectivity syndrome”: microwave-emitting cellphones, i-Somethings, Blue Whatevers, Wi-Fi, cordless phones, wireless spy cameras, smart meters, etc.
“Microwave” is a broad term, used to indicate any EM emission between 300Mhz and 300Ghz. This causes confusion amongst those intend on spreading Feay r, Uncertainty, and Doubt because they either do not realize that the spectrum used for cooking and heating items in a Microwave oven are in fact a tiny subset, and are far more powerful than anything emitted by devices such as cellphones or 802.11 networking devices. The common refutation is that Microwaves are “cumulative”. But this is simply false; the specific wavelength used for microwave ovens is designed (or rather discovered by accident) to excite water molecules, which is how it achieves the desired effect of heating or cooking food.
The World Health Organization classified microwave radiation from these gadgets as a Class 2B carcinogen.
What the writer isn’t mentioning here is that “Class 2B” carcinogens are “possible causes”; not verified. More importantly, it is in good company as a class 2B carcinogen; pickled vegetables are in the same category, but anybody crusading against the use of pickles and olives would be classified as insane.
I can’t access those services because my body literally feels microwave radiation inside those buildings. First I itch, then get dizzy and nauseated, lose focus and memory, develop headaches.
the idea of electro-sensitivity is absurd, double-blind studies have shown that proclaimed “electro-sensitive” people report discomfort when they think there is an EM field. It comes as no surprise that these people were crusaders against the evils of newer technology long before they got their “super-powers”.
but long-term effects – DNA damage (cancer, sterility), immune system failure, neurological disorders –will affect us equally.
We have been exposed to various forms of electromagnetic radiation, and in more powerful amounts, for over a hundred years. Power lines, electrical equipment (toasters, ovens, etc) all emit Electromagnetic radiation; junction boxes, light-bulbs, flourescent lights, Television screens, etc all emit EM radiation in similar wavelengths to those used by these later technologies that are being crusaded against. I often wonder why it is only the newer devices being singled-out, particularly since they use far less powerful emissions than those devices we have used for many years without ill effects.
Metal doesn’t always reflect radio waves and EM emissions, for move wavelengths, it absorbs them, because metals have free electrons they absorb EM emissions of most spectral frequencies. (how do you think antennas work?). devices designed to reflect EM emissions need to be designed to do so, and even then will only work at specific wavelengths, such as those- again- used with Microwave ovens.
It’s fun to overgeneralize and assume that because the frequencies emitted by a Microwave oven’s magnetron are reflected by metal, that all EM emissions are, but it’s patently false. Only specific frequencies of EM radiation are reflected by Metals; Microwave ovens happen to use one of this subset specifically because of that property. However, Wireless-G, 802.11, and similar EM devices use wavelengths that are absorbed by metals.
I don’t understand why WorkSafeB.C. allows such gross violations of their own regulations (employees may not be exposed to Class 2B carcinogens if safer options are available) and why our provincial government knowingly microwaves its employees and taxpayers.
Once more, the alarmist jumps out, using the term “microwave” in order to try to connect 802.11g radiation with the EM radiation used for cooking in microwave ovens, the disparity is alarming between these, however; the former- particularly with cellphones and 802.11- are far lower power and of a completely different frequency than the latter, so creating any sort of connection between them is pure FUD. Additionally, I was unable to find any citation as to the regulations stating anything like that; probably because that “regulation” doesn’t exist. Considering such a regulation would be required to prevent employees from eating pickles or olives on the job I’m inclined to believe it’s invented.
The curious thing about this is that the spreaders of such Dark-Age insipid FUD on this issue simply don’t understand some basic principles; first, the EM radiation that they are crusading against is about a million times weaker than that used in a microwave, and the radiation used in a microwave is about a million times weaker than the radiation we are exposed to in direct sunlight. And yet, they seem to have no problems with sunlight.
I propose that the entire thing is based in unfamiliarity and resistance to newer technologies, rather than any genuine concern for health; The sun can cause health problems, but even a second’s worth of exposure is more powerful than a lifetime of using cellphones and other devices. The primary difference is that the Sun has “been there”; it’s an established element. Cellphones and other devices, to many people, are new, unfamiliar, and intrinsically dangerous, not because people don’t understand them, but because those people don’t understand them, nor do they usually understand the principles of electromagnetism, deriving their arguments instead from google searches and unbibliographically sound sources.
Here is an interesting link about “electro-sensitives” and their crusade:
http://www.skepdic.com/electrosensitives.html
My favourite is still the bit about Class 2B carcinogen, and how they said it like it meant it was a deadly poison to be avoided; meanwhile, other things that are classified as Class 2B carcinogens include pickled vegetables. OOOOH SCARY.
1,570 total views, 4 views today
A quick update on the functionality I was trying to use ReferenceCounted List for in BASeBlock.
I ended up not using the class at all. I actually ended up just using a different method- instead of the powerup changing the drawattributes when it starts and ends, instead it is simply called each frame- basically the character is like “OK, before I draw- you abilities got anything to add” and it will change what it wants as needed. The gamecharacter resets it after drawing so if the ability is removed it will “revert” to normal appearance.
Also, this is possibly my shortest blog post ever. In order to bulk it up- I made some changes to the main page as well as the theme of the blog. The main page’s various images were tweaked, and the blog has had it’s font’s changed because the font it was using was annoying. (Windows Vista and later will be unaffected by the change). BASeBlock now has a “BuilderShotPowerup” thingamajig that let’s you shoot blocks and build stuff, which I think will be useful for building a “bridge” for the GameCharacter, and other purposes. (This idea was Mulreay’s, btw, he has great ideas). I tweaked a lot of stuff such as the editor’s sound data list editor now showing progress and being less annoying to use, and a few general tweaks and minor fixes here and there. I documented it all in the changelog which I will post when I finally upload the new version.
366 total views, 2 views today
A completely random rant…
Here’s another thing that pisses me off. You complain about something- maybe it was a poor mannered UPS delivery person, a bad eBay experience (like say it randomly changes languages) or how your car won’t start, or your coffee maker is broken, etc.
Time, and TIME AGAIN I hear people classify these as “First world problems”. It’s not even really a proper response. It’s not even something that falls in that category. a “First world problem” might be something like a hangnail or some shit, or some teenage girl complaining about their like “OMG my nail is like, lopsided” but when you have legitimate issues that the peers in your immediate vicinity aren’t facing, trying to broaden the scope and basically say “well, sorry buddy, I know that your car won’t start so you have to walk 3 hours t owork, but that doesn’t matter because some poor sod in Africa lost his leg to a land mine” or some other shit. Yes, it sucks in third world countries. But here’s the thing- that is why they are called [i] fucking third world countries [/i] . And the thing is, that there are a number of rich folks- the government bureaucrats- in those countries that have plenty of what could be called “first-world” problems, so the statement isn’t even legitimate. Imagine if companies decided this. Your phone service, after three weeks, still hasn’t been hooked up, so you call them. They tell you that is a first-world problem. Great. That still doesn’t address the fucking issue. eBay, or another site, randomly changes it’s language on you in the middle of a purchase. You complain on facebook, or whatever. Some other dick says “first world problems?”. yeah, that’s for that, asshole. How about instead of making unhelpful changes to scope you actually say something constructive. I mean- you could say that for damn near anything in the First world. That is why it’s called a “First world problem” but the thing is that people say it in a derogatory manner- as if to say “your problem is insigificant because a lot of people in the world are suffering more” but that isn’t the case. And the fact is that the very same people making these “accusations” are in fact doing so through first-world communication methods- such as comments on a social networking site, or blog, or what-have-you. So I wonder who is more objective- the person who is basing their opinions and complaints on first-hand experience, or the person who is colouring all their responses and thoughts with some ridiculous overtone to “worry about the third world” because they saw some touching second-hand documentary on National Geographic. I haven’t been in the third world, all I know about it is that it sucks terribly.
Thing is, that we cannot really solve the “problem” of the third world; it is a huge conglomeration that has appeared over the years due to varying socio-economic pressures in the region as well as problems of unstable governments, and most importantly the fact that they don’t really have anything there. It’s a fucking desert, pretty much. Suddenly, the fact that they have problems getting fresh water and food makes more sense. It’s because they are in the fucking desert. Of course most of them would have trouble leaving that desert, but that doesn’t change that simple fact. And more importantly any relief aid would be temporary, because the realy solution is to get the fuck out of the desert . Anyway, I’ve rambled somewhat. Not all developing countries are in a desert- some just have corrupt governments. But I think a more relevant question to ask is- can a single person fix all the corrupted governments, turn a desert into a rainforest, and solve all those problems?
No. Of course not. That makes the scope change of suggesting otherwise pretty damned petty, doesn’t it. It’s like saying “I have nothing constructive to add to your complain about eBay, so I will instead make an idiotic gesture and extend the scope of your problem to make it seem insignificant”. Well no flipping duh it would seem insignificant. hell in the context of the galaxy Earth is pretty damned insigificant, but you don’t see everybody pulling that reasoning out of their ass. “Hello, I notice that even though I paid the bill, you’ve charged me a late fee” “Well you know what Mister, in the grand scheme of things Earth isn’t relevant”. It’s a cop out no matter who says it.
It’s like that bullshit thing that parents always say when their kids say they are full “well there are kids starving in Africa” or something similar. Well guess what- that kid is not the one you are talking to. If you care so god-damned much about the kids starving in Africa, why the hell aren’t you donating time or money to help them? Instead you bring it up when your own kid won’t finish their food, which raises the other issue that we all wonder why kids (in the first-world) are becoming fatter on average, I wonder if maybe it’s related to parents forcing their kids to eat more when they are full?
406 total views, 2 views today
As with most games, BASeBlock has music. Originally, I implemented a naive approach to have “Multiple music” playing; a simple stack. The multiple music idea is sort of like
how games might change the music to a boss music when a boss appears, and change it back when they die, or how a certain powerup might change the music while you have it.
This implementation sat for a while. it used a stack based approach- the Sound manager had PushMusic and PopMusic methods.
However, several critical flaws in this approach became clear after I added an invulnerability powerup. Everything seemed to work fine, (get the powerup, you’re invulnerable and while you are there is different music) however, the problem became clear when I, while still invulnerable, released a boss. The boss music would start playing; however, while the boss was alive, the invincible power would run out; it would “PopMusic” which would revert the music from the boss music to the starman music, and then only when the boss died would it go back to normal. This is obviously not intended. The ideal case would be:
Obviously, my approach failed miserably; it worked fine, but I had only had a single “active” piece of music at a time; how do you manage multiples?
After some thought, I considered the idea of “reference counting” or keeping track of how many times a given piece of music was requested to play. a boss spawning would increment the boss music by one, a second one with the same music would make it two; each time this happens, the sound manager could re-evaluate which piece of music to play based on finding the maximum reference count.
With this idea, I rearchitected some of the code within the SoundManager. The SoundManager (technically cNewSoundManager, since it was a rewrite of a strongly coupled version I had before) is essentially a class that, well, manages sound and music. I have a interface class that allows for different actual implementations of the details of playing sound (“Driver” classes, of you will) The Manager class itself merely deals with the details based on that basic functionality, which exposes a few critical events, such as music stopping and whatnot. The original “PushMusic” and “PopMusic” stack based approach used a small data class, shown here:
A minor explanation may be necessary; iActiveSoundObject is an interface class that is implemented by the “driver”; same for iSoundSourceObject; the details of how they work isn’t important, just that their interface methods do what the interface definition says. A Active Sound object is something that is “active” usually, this means it is playing, but it could also be paused. A Sound Source object can be used to “spawn” Active Sound Objects; in order to actually play music or sound, a iActiveSoundSource object is required. Rather than discard this class I extended from it. Arguably, I could have simply changed the actual class itself but that could always be done later:
Again, another private class. The Implementation of IComparable
Dictionary<String,TemporaryMusicData> to be precise; This indexes the TemporaryMusicData instances by Name (Key); the Name/Key is used by the sound Manager to index Sound sources, so getting the appropriate source is easy given a name, and it’s guaranteed to be unique since the listing is taken from the file system itself, and the loading routine has other considerations to prevent duplicate entries (and error handling for duplicate key Exceptions if they do occur). The Occurences field is basically the entire purpose here; when “Temporary” music is told to play, it merely increments the field for the appropriate entry at the Named Index; then both the Stop and Play routines will call another routine that Ensures that the item with the maximum occurences is playing. The implementation for the relevant routines:
So far, this has worked well.
However, more recently I found that I also need the same sort of “reference count” management for other things related to powerups, such as the “DrawAttributes” of various objects. But it would be foolish to clutter up that code with this sort of thing. Surely there is some way that I can add the feature with little to no changes to existing code? Turns out, that leveraging a few C# features, this is relatively easily accomplished.
Consider the Nullable<T> class. Any struct or value type can be made “Nullable” using it; there is even a shortcut in the language syntax for type definitions to use it, by appending a question mark, (Nullable
ReferenceCounted<T> is the name of the class that I created (or, as I write this, am creating) for this purpose. My original idea was to use implicit cast operators to make it a simple type change; assignments to the object of the “old type” (type T) would “automatically” be added to the reference list; going the other way, the ReferenceCounted<T> Type would be implicitly cast to T by way of taking the T value it currently has with the highest reference Count. This hit a snag, however; the second cast, thankfully, would work fine, but the first would not have the proper information; the cast operator is a static routine and wouldn’t have access to the ReferenceCounted<T> Object that is being assigned.
somewhat miffed but not surprised (it would be silly to provide for overloading of the assignment operator, but in this case I wish there was an exception), I didn’t give up; I just thought about it a little. And it hit me- I don’t need to overload the assignment operator to overload assignment; I could overload the addition operator and implement the “assignment” code there; this is what the Event classes do for event hooking; and I could use -= to remove “references”. Arguably, this would take more code and wouldn’t be quite as clean as I was hoping, but for the most part the actual reference counting logic would be out of the way, handled mostly by the implicit cast to T.
After some effort… it was made. Here is the source code:
Pleased I had created a nice implementation, I set about creating the Comparison routine. Unfortunately, to my horror and surprise, the class which I wanted to use in conjunction with this class in one instance, ImageAttributes, had no way of getting it’s ColorMatrix. This presented an issue since I didn’t want added ColorMatrix values to mess about with the image, and the results could be less than extraordinary unless I cached each ImageAttributes.
And that was the entire purpose. However I decided to consider how else to acheive my goal; the goal here was to prevent powerups from changing the state of GameObject’s appearance in a manner that prevented them from undoing it. So, for example, powerups might have a limited duration, and the results from a overlap of two powerups could result in a confusing ending state for the object. The idea was to replace the GameObject class’s “DrawAttributes” field with a ReferenceCounted
So how do I address this?
I considered possibilities, and the problem, a bit more thoughtfully. Evidently, the ReferenceCounted<T> class would be very useful for it, but what would I use it for.
I’ve decided- though not yet attempted to implement- that I would use the ReferenceCounted class to keep track of The powerups themselves rather than a few fields of the gameobject. Since the powerup classes are what would result in the unwanted behaviour, it makes sense. So how does it work? Well, the framework basically allows a GameCharacter to have a list of GameCharacterAbilities; the GameCharacter calls the draw function of each when it draws, and it calls a frame function when it’s own frame function is called. My idea is to change that to a ReferenceCounted<GameCharacterAbility>. The code could then be changed to only call PerformFrame and Draw for the one with the highest reference count, or something similar.
The other possibility is to change the GameObject’s DrawAttributes field to a read-only property that is created “on the fly” from another new ColorMatrix field; the ColorMatrix item could be a ReferenceCounted object and therefore the use of that object in the property would use the implicit conversion operator. I’m trying to avoid this, even though I cannot foresee a circumstance where the ImageAttributes class provides something that I can’t do with a ColorMatrix (oh it does, but nothing I know how to do) I prefer to keep all my roads open, so to speak. If there was a way to compare the innards of the ImageAttributes, I could just change the DrawAttributes field to a ReferenceCounted object and make a new comparer, but it’s unfortunately not that simple.
236 total views, 5 views today
Well, my posts keep getting deleted off the MC forums (arguably mostly because they are responses to a troll, but damn, trolls can be amusing).
Anyway, there was a discussion where some members seemed to agree that RAM never equals performance. My post on the matter was:
What the hell is wrong with you people?
Run Vista/7 on a system with 512MB of RAM.
Upgrade that system to 4GB. The performance improves. If RAM doesn’t increase performance, than this is only explanable because of MAGIC.
RAM improves performance, but only to a certain point. (which is what you guys are saying, just not very well).
For example, even for Minecraft, RAM matters; less physical memory means more swapping means more jerkiness loading chunks. But beyond 4GB, I doubt MC would see any performance improvement, at least not directly; superfetch might cache chunk file data, which would increase chunk loading, and it can only do that with extra memory which wouldn’t otherwise exist, so there is that; but there is a point of diminishing returns. However to state that those returns do not exist is foolish. MC would run better with 32GB of RAM than with 16 or 8; but the difference would be nearly inperceptible, and certainly not worth the massive price difference.
In response, I got the following:
Hey look dumbo fumbo is back…
YOU ARE STUPID!
READ THE POSTS
IT SAYS: Ram isn’t everything, though each system should get a fair amount of it.
CentrallyProcessed just said that.
No one mentioned 512mb of ram, what are you 2002?
No one needs a 10 minute wall of text…
You probably got that off WIkipedia, since that is pure bs in there.
The only time you need 16gb of ram for minecraft is using a biomebuster…
Plus Minecraft only takes up 912mb of ram…
Press f3 and see that…
Unless you change it of course.
If Notch made it so that minecraft takes 912mb of ram, then you can’t argue with him.
Which though an obvious troll, could not go unpunished:
Hey look dumbo fumbo is back…
AHHH MY FEELINGS!
YOU ARE STUPID!
Well that’s not very nice, but I suppose a true friend would be honest. Perhaps everybody else is just trying to protect me from that truth. I commend you on being a true friend and pointing out where I falter. Thank you.
READ THE POSTS
I did. In fact, the one I was responding to- which was echoed in a few other posts, was quoted quite clearly in my posts.
[quote] IT SAYS: Ram isn’t everything, though each system should get a fair amount of it. [/quote]
I find this curious. You say I am stupid, but you are unable to use the appropriate pluralizations. You speak of “posts” (plural) but then you say “it says”. Obviously this is just a slip-up, easily forgiven, but it makes it difficult to understand what specifically you mean, since I wasn’t addressing all the posts, only those that shared in the thought that I felt was mistaken that more RAM never speeds up a PC. One could argue also that I was attempting to dissolve what certainly looked to be a circle-jerk, too.
CentrallyProcessed just said that.
He also said:
“It entirely depends on the CPU and GPU” < And others said: No one mentioned 512mb of ram, what are you 2002? They didn’t have computers in 10 A.D so I don’t follow your logic. If I was that old I’d probably be pretty famous. People mentioned Memory. are you arguing then, that 512MB of memory is not memory? At what size does RAM become RAM? 512MB is a valid amount of memory, and when you add memory to a system with 512MB of memory using a modern OS, performance improves. This is an undeniable fact. replacing 4GB of memory in a system with 8GB will improve performance as well; same with 16GB over 8GB. Whether it improves to a point that makes it worth that investment is questionable, but the improvements do exist. No one needs a 10 minute wall of text… Actually, the length of text is typically measured in characters, or words- not time. You probably got that off WIkipedia, since that is pure bs in there. Possibly; I am certainly open to refutations of that which I said that are based on intelligent arguments, observations, and other such evidence. Unfortunately, calling me a “dumbo fumbo” does not constitute either an intelligent argument, and observation, or evidence, so I cannot rightly accept that as a valid refutation. The only time you need 16gb of ram for minecraft is using a biomebuster… I never said anything about minecraft needing any particular amount of Memory. I said performance would be better, for the most part because of the better utilization of the memory in most cache schemes for keeping file data- in minecraft’s case chunk information- in the standby pool. Whether that increase is negligible was not debated; in fact I specifically pointed out that the difference would not be worth the investment. However whether something is worth the investment and whether there is a difference that exists are two separate points. Plus Minecraft only takes up 912mb of ram… The minecraft F3 debug screen displays the size of the java heap, which directly relates to the size of data that is being used by the uncollected game objects, but has no bearing on the other structures used by the Virtual Machine, nor does it contain memory consumed by objects resurrected during finalization (which hopefully doesn’t happen). The real information on the memory usage can be readily seen using task manager, process explorer, or, on linux, ps -a -v. I started minecraft on my windows system when I started this post, about 5 minutes ago at this point, though don’t put too much weight on that, I’m also conversing in IRC and uploading a few files via FTP); it has been paused since. it’s virtual memory usage- according to process explorer- is now idling at 1.2GB; This was sitting in one place, so that is essentially the minimum it will probably use, at least at the various settings I’ve chosen. if I was to play the game, memory usage would undoubtedly go up as new objects were created, and more chunks were kept in memory and lazily unloaded. However, whether Minecraft uses more memory than is installed cannot be used as the single judge of whether it would improve performance. You see, Windows, like all modern operating systems, is a protected mode, pre-emptive multi-tasking environment. Processes share memory; this is done by mapping physical memory into the virtual address space of each process, so they all think they “own” memory. this also isolates the memory of each process (‘protecting’ the memory of each application from other applications, giving us the moniker “protected mode”.). Of course, in order to act on memory, it needs to be in physical memory. Memory data in is swapped to and from physical memory as needed by way of a pagefile; if you run an application that allocated over 2 gigabytes of memory, but leave it sitting there, eventually none of it’s data will be in physical RAM, instead replaced by the data of other applications that needed it, and entirely swapped into the pagefile. If you then switch to that application and it accesses some of what it allocated, the required pages will fault, and the memory manager will swap that data back into physical memory. The advantage here is that because various applications, services, and other applications run at the same time, you cannot think in terms of what a single application would need, because you never have a single application running. Also, of particular note is that much of the performance improvement from more memory on modern systems is seen by way of disk caching technologies such as Superfetch; more memory means that more of the “unloaded” chunks that minecraft has saved to disk will in fact be saved in memory, meaning that reloading that data from the disk (from the perspective of the game) will occur much faster. These benefits can be seen by comparing a 4GB and a 8GB system; wandering around a world, chunk loading will be slowed by I/O, but returning to some areas will load faster, because those chunk files’ data is still in the cache. with more memory, more of that data can be cached for faster access. Chunk management is a central task performed by minecraft; it is indisputable that improving the speed of that chunk management would improve the overall performance of the game itself. The fact that the memory that is used to create that increased performance isn’t mapped into the virtual address space of the game is not relevant.
If Notch made it so that minecraft takes 912mb of ram, then you can’t argue with him.
Notch didn’t make it that way. that is how the Java Virtual Machine manages the default java heap size. However, as I noted, the java heap size in no way reflects either the total commit charge of the process nor does it have any bearing on the availability of memory for use in tasks such as Superfetch. While I was amused by your attempts at derogatory comments toward me, I refuse to respond in kind. Which is most certainly a benefit in your favour, for my ability with language would certainly come up with something more creative than “dumbo fumbo” which in no way makes sense. See, the best way to insult somebody is to take advantage of their weaknesses. At the moment, I am unemployed, (well, not legally, but let’s not confuse the issue, we’re trying to insult me, not write a book) so if I may suggest, you should certainly make light of that. Perhaps an insult such as “if you’re so smart why don’t you have a job” or if you want to condense it, “dumbo jobless”. however I think we might be best to eliminate the “dumbo” element altogether, particular since it, at least in my case, provides the image of elephants with big ears, which is actually kind of funny. My ears are not of a disproportionate size, either, so it doesn’t really fit, nor am I sensitive about the size of my ears. However, I’m sure you can think of something! Good luck. I look forward to your intelligent witticisms. Or perhaps you will simply make light of how long my post is! You could surely do that, and it saves you even reading. the bad part is that if somebody does read it, they will see this last part, see your reply, and realize that I in fact predicted your behaviour, which could reflect poorly on your character as being far too predictable. Unfortunately the post was deleted, both mine and the trolls, which was sort of shame. Good thing I drafted it in gedit. Past here for posterity. Also because it has some interesting info on memory management.
424 total views, 2 views today
“RAM does not equate to performance.” << it does. always.
Press f3 and see that…

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 