tag:blogger.com,1999:blog-73811284421479423772024-03-20T18:09:05.297-07:00Andrea Goes AndroidA SQL data analyst turned Android programmer.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.comBlogger47125tag:blogger.com,1999:blog-7381128442147942377.post-70659072479352725572021-06-21T10:52:00.008-07:002021-06-21T10:57:23.438-07:00Asus ProArt PA248Q and Dell XPS13 video waking<p>This is a very, very specific situation... but posting in case it helps someone else. You never know. I won't be <a href="https://xkcd.com/979/" target="_blank">DenverCoder9</a>.</p><p>When I got the Dell I was struggling a bit to find the right cable to hook up the monitor. That USBC stuff was all new to me. So I got a DisplayPort cable and set the ASUS to use that.</p><p>I pretty much never shut off a laptop at night but just leave and let it go to sleep mode on its own. But I began to notice the monitor turning its backlight on and off, frequently but not always regularly. And it was bright enough that when I had insomnia (rather frequent starting around 2018) it would really annoy me. </p><p>There must have been some signal coming from the XPS13's USB port that was enough to wake up the ProArt, but obviously since no actual video data were sent, the monitor would go back to sleep. What I was seeing was the ProArt's power light going from orange to white (active), the backlight would go on, then after a moment a little window would come up with "No Signal" and everything would shut off. All the USBC ports caused that behavior. </p><p>I could unplug the monitor from the USB port but that didn't seem like an elegant solution. I bought a USB on/off that was actually meant to turn off the USB port on a Raspberry Pi, and that did not work at all. I bought a switchbox that was supposed to allow two computers to share a monitor, figuring that I could just switch the monitor to take its input from a nonexistent computer. That did not work at all either. </p><p>Then while dicking around with the monitor, I accidentally set its input to the VGA port. And got totally stuck because there was no VGA signal, the monitor wouldn't display the menu. I had to RTFM to get it back to taking input from the DisplayPort port. And that's where I found the solution to <i>my</i> problem.</p><p>Just above the power button is the input selector. Its icon is an oblong with an arrow pointing into it. Clicking it cycles through all the input ports. All I have to do is tell it to take input from something that's not DisplayPort, and since there's absolutely nothing coming in there, it never wakes. It seems to be easier on the XPS13 as well, since unplugging the external monitor would cause the laptop screen to wake up and display. Now it just stays black. </p><p>It's nice to solve stuff without having to spend money....</p>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-69019980566183191972021-06-05T15:31:00.010-07:002021-06-06T10:55:58.982-07:00Creating a post on Nordinho<p>Nordinho is kind of an old school forum so things are not super easy to do sometimes. </p><p>You'll need:</p><p></p><ul style="text-align: left;"><li>a screenshot of the game saved on your computer</li><li>the URL of the game (copied from your browser)</li></ul><div>This should really be done from a desktop computer. It's possible to do it from mobile, but it's definitely harder because of the screen size.</div><div><br /></div><div>Up near the top of the games list, click the <span style="font-size: x-small;">NEW THREAD</span> button.</div><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFgI83L4oQlkjWL4gxpBl0Md04gdQSmkRIC3g08fIMiyHA7_361nlbcsde3n1hZJ2xigBmj-aeyICPoSWX6uGQ3WI6-ZJqQKkML9I3J-w8Rb6_lE2wvD9LxUFEfYajpPyZkH_QK_GX9VM/s571/npost1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="571" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFgI83L4oQlkjWL4gxpBl0Md04gdQSmkRIC3g08fIMiyHA7_361nlbcsde3n1hZJ2xigBmj-aeyICPoSWX6uGQ3WI6-ZJqQKkML9I3J-w8Rb6_lE2wvD9LxUFEfYajpPyZkH_QK_GX9VM/w526-h271/npost1.png" width="526" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You'll get the next screen. Write some stuff in the title block (usually the name of the game and the author), and a description of the game. </div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinsD38L6734I56JQL2ziCKns_dsB2FPk1fBCNoS2b7G-2qG9Noi8IoT0uxyw9hsR93K5l3blcwwkovDEBnmc6LLVW_wV5QB2eIkyOfia66P6fHBKP82MqFeqkddOQfp-PvuQuniHL4bm4/s691/npost2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="691" height="383" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinsD38L6734I56JQL2ziCKns_dsB2FPk1fBCNoS2b7G-2qG9Noi8IoT0uxyw9hsR93K5l3blcwwkovDEBnmc6LLVW_wV5QB2eIkyOfia66P6fHBKP82MqFeqkddOQfp-PvuQuniHL4bm4/w529-h383/npost2.png" width="529" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can simply paste the URL of the game directly after the game description. But if you want to make it look tidier, such as a single word "Play" as a button, you can use the link button indicated in the image below. Type the word "Play" (or whatever text you want to use as the button), highlight it, then click the link button.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWg5U2jiNGqKUB8APqiKoYB53LkYpnbASObgX6BSQkw8XAp90e815ap1vlEhp-6if8Uph0E49V3y_VbljYaCDqgiaTBKDNi0sSasb1a6VCMyYyExH0ECt2u4YQum_EAzlUj3Oq3qNGAKQ/s668/npost2a.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="362" data-original-width="668" height="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWg5U2jiNGqKUB8APqiKoYB53LkYpnbASObgX6BSQkw8XAp90e815ap1vlEhp-6if8Uph0E49V3y_VbljYaCDqgiaTBKDNi0sSasb1a6VCMyYyExH0ECt2u4YQum_EAzlUj3Oq3qNGAKQ/w531-h287/npost2a.png" width="531" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>A window will pop up, which is prefilled with "http://". Since we're in the 21st century and we do things securely now (or at least hopefully), erase that and paste the game URL.<br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqxz22tlDlvhRDcndIsamef5O0USw02NIagEusFiC6Tu13_9bELidOf_LulXMlnZRomZzSLFf-h_jdcmQFhx5vQ4GLSF1LXyfRZ6auXEP5Hrf65bQSnD2DBMjMnW7scgu5juw3kBPsbpo/s438/npost2b.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="438" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqxz22tlDlvhRDcndIsamef5O0USw02NIagEusFiC6Tu13_9bELidOf_LulXMlnZRomZzSLFf-h_jdcmQFhx5vQ4GLSF1LXyfRZ6auXEP5Hrf65bQSnD2DBMjMnW7scgu5juw3kBPsbpo/w530-h205/npost2b.png" width="530" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Clicking OK will close that popup. You will see some messy looking text with square brackets and quotes have been added around your URL. Don't delete this stuff, the Nordinho website needs it to create that nice looking link. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Now you need to add your screenshot. Scroll down until you see "Addtional Options". Click <span style="font-size: x-small;">MANAGE ATTACHMENTS</span>.</div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbQ3ax-BRX-chjRQqrYTeu9oRXUgv9pWEnfXHmt6Rfg4nO-_51-5V3Oa6FSv2WfU5rGF-x-dMDzdm-n4Y5sJMWHtLIHuVOhuDs9ryHKFu_FGBYO-y6spXqn6jWgD2_lUml2HHwjseFGzc/s682/npost3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="682" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbQ3ax-BRX-chjRQqrYTeu9oRXUgv9pWEnfXHmt6Rfg4nO-_51-5V3Oa6FSv2WfU5rGF-x-dMDzdm-n4Y5sJMWHtLIHuVOhuDs9ryHKFu_FGBYO-y6spXqn6jWgD2_lUml2HHwjseFGzc/w546-h312/npost3.png" width="546" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Another window will pop up. Click the <span style="font-size: x-small;">CHOOSE FILE</span> button which will open your file manager and select your screenshot from your computer. Then click <span style="font-size: x-small;">UPLOAD</span>. It may take a few seconds but your file name should show up in the area above where it says "Attachment key". Click <span style="font-size: x-small;">CLOSE THIS WINDOW</span> or the red X box in the top right. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Just a note: there are file size limits to what you can upload. If your screenshot is too large you will see an error message show up below the words "Manage Attachments." If that happens you need to find a way to make your screenshot file size smaller before you can use it.</div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUolvFaKQlx8nny4PXliruMx3IccwpDojAwEm1UNZhayhihK3Nd6Rei7an8jDO7El8ThYZ6ePy_wfHpVuBWY8DvoeatMkBGg8x_BhSF_S_Cm72F2GRjwpC61dGqd-31EVRPQMg9DYMmsc/s459/npost4.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="459" height="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUolvFaKQlx8nny4PXliruMx3IccwpDojAwEm1UNZhayhihK3Nd6Rei7an8jDO7El8ThYZ6ePy_wfHpVuBWY8DvoeatMkBGg8x_BhSF_S_Cm72F2GRjwpC61dGqd-31EVRPQMg9DYMmsc/w547-h504/npost4.png" width="547" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">That's everything you need to enter! Scroll down and click the <span style="font-size: x-small;">SUBMIT NEW THREAD</span> button and you should see it in the forum right away. </div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWhMAEEJYJt6cPulYItyF4x0spSNiZ-4mEWKkPu7V2kuM2NkE2u8IZpSMVI87C1y5KzGFuA9Uj4fN1yahjcqR2vK69H-uYcEUUzipce5HWpvsEFRnug5StC-HBzM6J86dpdNJbCP-NpU/s674/npost5.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="417" data-original-width="674" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWhMAEEJYJt6cPulYItyF4x0spSNiZ-4mEWKkPu7V2kuM2NkE2u8IZpSMVI87C1y5KzGFuA9Uj4fN1yahjcqR2vK69H-uYcEUUzipce5HWpvsEFRnug5StC-HBzM6J86dpdNJbCP-NpU/w536-h332/npost5.png" width="536" /></a></div><br /><p><br /></p>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-76940812009373387332019-09-13T22:25:00.026-07:002021-06-05T22:35:22.111-07:00Goodbye MapTag :(<p><span style="background-color: black; color: white; font-family: inherit; font-size: 14px;">Google Cloud platform made some changes to its TOS which resulted in charging me $100 for 1 month of PlayMapTag. A handful of people around the globe play it, but apparently the Maps API access charges exceed the monthly credit by that much, and I don't want to be paying that amount each month for what was a fun learning project. And I'm not about to put advertising on the website, which would probably not offset the cost anyway. </span></p><p style="font-size: 14px; margin: 1em 0px;"><span style="background-color: black; color: white; font-family: inherit;">The Maps API was used by PlayMapTag and Tacotacotruck (which probably nobody used anyway and was probably way out of date, so no tears were shed), so I took down both of those. </span></p><p></p><p style="font-size: 14px; margin: 1em 0px;"><span style="background-color: black; color: white; font-family: inherit;">Had a really good run and a fun time with these projects. I'm not sure there's any way to hit the API less. Streetview, which nearly all of what PlayMapTag was using, is very data intensive as you can imagine. </span></p>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-6608769844798040852016-11-09T14:47:00.001-08:002016-11-09T14:47:14.672-08:00The ever changing APII just played a game after several months' hiatus and discovered labels all over the StreetView. Well, where's the challenge in that? Thanks, Google! So after poking in the API for a few minutes, I found a StreetView <span style="font-family: Courier New, Courier, monospace;">panoramaOption</span> called <a href="https://developers.google.com/maps/documentation/javascript/3.exp/reference#StreetViewPanoramaOptions" target="_blank"><span style="font-family: Courier New, Courier, monospace;">showRoadLabels</span></a>. Easy to fix, but it makes me wonder if I am going to have to play MapTag for the rest of my life to check on API changes. Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-53504787534597827032016-10-09T15:19:00.001-07:002016-10-09T15:40:07.895-07:00ESC by Yukihiro Hozumi - walkthroughNote: there's an in-game help system that will get you through the whole game plus the second ending. You must watch an ad each time to view the help. I assume this generates revenue for Hozumi, and I urge you to open up the help a few times and play the ads anyway <i>because he deserves to be rewarded for these fantastic games that are otherwise free. If he doesn't get enough ad revenue he might have to charge for all his games. And we don't want that, now do we?</i>
<br /><br />First once-over: Ghost leg puzzle, a panel in the wall covered and secured by bolts. A 3x3 cabinet with tools, which you can (initially) only take one at a time. Take, of course, the wrench. Next wall has a door and keypad with missing keycaps. Last wall has 3 keys locked away behind domes.
<br />Open the wall panel and take a keycap, and place it on the keypad.
<br />Solve the ghost leg and enter what would be on the top into the keypad, and press Enter. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>SEAECP.</div></div> Door will open
<br />You're in a very dark room with just 1 lamp. Get closer and take another keycap. You'll need help seeing in this room, and there is one item in the tool cabinet that can help you. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The camera.</div></div> Take that and enter the room again. Use it, then look at it in inventory.
<br />You'll see a note with the word <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>CAST, with sort of a sun symbol.</div></div>
<br />Go out to the keypad, add your keycap, and enter <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>CAST. </div></div>Let there be light!
<br /><br />Check out the room: A book that opens. A "clock", the hands of which will cycle through positions when the button on top is pressed. The sequence <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>of dots is 1, 5, 3, 4. </div></div>You can also collect a battery from the clock at this time. Under the bed, center drawer, is an "O" keycap. The drawers on either side of the center drawer are stuck, but play with the middle drawer some more and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>you'll find they are blocked with screws.</div></div>
<br />Next wall to the right is a large locked door, and a chain. You can yank the chain if you like :) Ooh, secret TV!
<br />Next wall to the right is a water dispenser with red and blue buttons, and some words that may or may not be helpful.
<br />Next wall to the right is a hatch, and a cabinet wired shut.
<br />Go back to the first room. Take the screwdriver and open the left drawer, and take a lens. Return the screwdriver, take the camera and put the lens on. Take a picture of <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the cabinets</div></div> and you'll see a code. Return the camera and take the dice. Click on the faces (there will be no audio feedback when you click, though) for a pair of cutters. Also click the faces <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>according to the clock</div></div> for a second battery.
<br />Return to room 2 and open the wired cabinet with the cutters. Get a - screwdriver and a keycap. Also take a look at the photograph and how it compares to the one on the wall. Use the - driver on the drawer and get a hook (it is not visible :/ just click inside the drawer).
<br />Return to room 1. Swap the - screwdriver for the + driver and take the remote. Put the batteries in and use it on the picture to get a code. Rearrange that code <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>according to the photo in the Room 2 cabinet </div></div>and enter it in the keypad. You can now pick up two items from the 3x3 cabinet.
<br />If you have picked up and looked at all the items you know that one was meant to be used on the other. If you haven't guessed, it's <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the pyramid and the hammer. </div></div>You'll get a keycap and a dial. Don't use the dial yet, though. Take the ball, attach the hook, and hang it on the chain. Take also the remote and use it on the TV for a red/blue pattern.
<br />Return the ball and the remote, and take the spray bottle. Put it in the water dispenser. Note the spiral diagram which will tell you how to press the pattern. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>RBB BRR BRR. </div></div>This will fill the bottle. Spray it on the book. Take the camera and take a picture of the book for another code.
<br />You will need to put the dial on the thing below the ghost leg and turn it before that code will have any effect. Your inventory items will disappear. Go ahead, take all the keys.
<br /><br />I didn't really care for this part too much because the clues seemed pretty vague, but TBH if you're familiar with Hozumi's games, vague clues are kinda par for the course, especially in his longer games.
<br />You should open the door with all the keys just to get a sense of the environment. Use the Wise key and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>turn off the light.</div></div> Use the No Name key for the clue as to where to put all the keys. You should do them in the order listed as well.
<br /><br />The Fool Sits Far From the Moon: open the door using the Fool key and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>face the moon (the exit hatch). Turn twice so you are facing away from it. Step forward until </div></div>you come to a chair. Set the Fool key on the chair.
<br />The Wise Sits in His Hideaway: that key goes back to <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>its niche behind the dome.</div></div>
<br />The No Name Finds His Seat: open the door using the No Name key and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>set it on the chair.</div></div>
<br /><br />Second ending:
<br />After you exit click the cube at the top left corner and click return. Take the key from the chair, which will make the entry door reappear. Go back into the room and enter <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the hatch. Face away from the moon </div></div>and keep going until you come to a room. There are some green words on the wall.
<br />If you've looked at the keys you noticed there are <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>letters on them.</div></div> Use this to click the words on the wall. This will turn the lights on, and now you can see a keypad on the wall.
<br />Have a look at each of the shapes and the shadows they make. The words on the wall said <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>square, circle, triangle. </div></div>Enter the shadow letters into the keypad <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>EOF. </div></div>This will reveal the final door. Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-41558421650235219972016-07-07T22:37:00.000-07:002016-07-07T23:03:09.433-07:00Visiting the One World Observatory<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I was surprised at how emotional this made me. Going up the elevator I felt tightening in my throat, and several times more as we filed out to the entrance hall with the sliding windows and watched the slideshow projected on them. The strength of my reaction seemed disproportionate: </span><span style="color: #eeeeee; font-family: "arial"; font-size: 14.6667px; line-height: 1.38; white-space: pre-wrap;">nobody I knew was directly involved in the event or witnessed it personally; at the time, I had one friend attending Columbia, but he was unaffected. I had watched the event unfold on TV, but when I deemed that I was getting late for work, I turned it off and got in the car. At work, it was unusually quiet. Our office at the time was a huge single room with cubicles, and I could hear someone near the front weeping. I never found out who that was. A few days after the planes destroyed the buildings, the newspaper delivered a flag, printed on 12x18 light card stock. I put it on the mantel and felt strangely comforted by it. </span></div>
<span style="color: #eeeeee;"><b id="docs-internal-guid-85c8a9b0-c8f3-a2ac-6932-7cf5ba47098e" style="font-weight: normal;"><br /></b>
</span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I wouldn’t consider myself seriously patriotic. I was born here, I live here. I like to think I’m reasonably objective when comparing my country to others. There are countries more sane than the United States in a multitude of ways, and there are many countries that are far worse. The United States has not always been welcoming to both my race and me as an individual; I’ve had my share of racial slurs thrown at me, received the micro~ and macroaggressions that call me a foreigner, outsider, and/or second class citizen, been told to “go back” to a country I’ve only seen as a tourist. I’ve been expected to disavow others of my ethnicity because they are immigrants and I am not. And I'm well aware that Asians in other states have it worse. But in the end, I’m an American, I live here, I love California’s weather, diversity, culture, food, and its high proportion of intelligent people, and I’d find it very hard to give up that winning combination. </span></div>
<span style="color: #eeeeee;"><b style="font-weight: normal;"><br /></b>
</span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">We walked around the observatory looking over Manhattan and beyond, looked straight down onto the former footprints of twin towers, now fountains waterfalling over black stone, inward to a square dark hole in the center. It’s symbolically beautiful and appropriate. </span><br />
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9pRaMhww5J5Ys5NTEovE2K5jH8xlsd_tXiAnF6Ou49q9yfUuqJ-aWa_4YdgeVh5jZNdEEaVur-9Eym5g_ZjV5I7F8XUjlkXL4CQdnWZzoIQHlB3I2nWBwLrvJ3cY9lMxTANWYiRvrfj0/s1600/IMG_20160630_135956.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: #eeeeee;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9pRaMhww5J5Ys5NTEovE2K5jH8xlsd_tXiAnF6Ou49q9yfUuqJ-aWa_4YdgeVh5jZNdEEaVur-9Eym5g_ZjV5I7F8XUjlkXL4CQdnWZzoIQHlB3I2nWBwLrvJ3cY9lMxTANWYiRvrfj0/s320/IMG_20160630_135956.jpg" width="320" /></span></a></div>
<span style="color: #eeeeee;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibEHuToMC7jSn2hyphenhyphen4hhQbuNmLG78p8hFGjlqx3yXjlr1z2T67lnkk_3u2jcozKhfhjZRUlFJt-2LnHtuOUKqohh2EfRaq2ffag1Vsw9yMkQnyEisfSyhTU0uNEg45u5kNAJGhLYjfVm1o/s1600/IMG_20160630_135908.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: #eeeeee;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibEHuToMC7jSn2hyphenhyphen4hhQbuNmLG78p8hFGjlqx3yXjlr1z2T67lnkk_3u2jcozKhfhjZRUlFJt-2LnHtuOUKqohh2EfRaq2ffag1Vsw9yMkQnyEisfSyhTU0uNEg45u5kNAJGhLYjfVm1o/s320/IMG_20160630_135908.jpg" width="320" /></span></a></div>
<span style="color: #eeeeee;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5CLXT9tjIO40o9eK9onLl2XqgeX1g2WRKCMjj3apV_xZ6MX_OBz4kPBDOaNY87e1xIaTb3qSosXcXT3LNKLDd6xS6L5mSS3v6mbLp34o9_QpTYgUt-RwLA9A99_oID5mpGd-fNrM4kNw/s1600/IMG_20160630_143859.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: #eeeeee;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5CLXT9tjIO40o9eK9onLl2XqgeX1g2WRKCMjj3apV_xZ6MX_OBz4kPBDOaNY87e1xIaTb3qSosXcXT3LNKLDd6xS6L5mSS3v6mbLp34o9_QpTYgUt-RwLA9A99_oID5mpGd-fNrM4kNw/s320/IMG_20160630_143859.jpg" width="320" /></span></a></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<span style="color: #eeeeee;"><b style="font-weight: normal;"><br /></b>
</span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I think what makes me emotional, what makes me mourn, is not the event itself or the lives lost there, but how it changed this nation so much. We’ve had acts of terrorism before -- from Timothy McVeigh, the Army of God, animal rights terrorists, and the Jewish Defense League, just to mention events in recent memory. But 9/11 indelibly associated terrorism with Muslims, Islam, anyone from the Middle East regardless of their religion, and even any bearded, brown skinned person. 9/11 created the TSA and its security theater. 9/11 divided the United States. One side believes fear is justified, that the nation is under attack, that the Christian religion is under attack, and any measures to protect the nation are necessary. The other group sees terrorists as small groups of people using their religion as a justification for violence, and do not represent Islam as a whole, just as the Westboro Baptist Church, which uses Christianity as an excuse to be as offensive as possible, does not represent all Christians. The United States is no longer the land of the rough and ready, optimistic people who throw in a helping hand and get things done, people who believe every problem has a solution. It seems decreasingly possible to compromise; people now insist on expressing their views, sometimes at the expense of others. Everything has spin. People seem far more inclined to put others in a box in order to more easily dismiss views they don’t agree with.</span></div>
<span style="color: #eeeeee;"><br /></span>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: #eeeeee; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I’m just describing my thoughts/concerns. I don’t have answers or solutions for how to get our mojo back. But I do feel we have to get back to seeing our country as belonging to all its citizens and those who want to become citizens -- not just those who ascribe to our own views. We have to find the middle, the common ground; rate our individual desires by importance and be willing to let go of the less important ones in the interest of unification. </span></div>
Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-20404643933376345392016-05-03T09:42:00.003-07:002016-05-03T09:42:37.162-07:00Compensating for Google Maps, againI'd been trying to avoid it, but the new version of Google Maps has made it really difficult to get exactly 1000 points in <a href="http://playmaptag.appspot.com/" target="_blank">MapTag</a>. It used to be you could step out of the StreetView and it would leave your marker on the point where you were. That doesn't happen anymore; instead, to get your most-precise location you have to rely on the tiny thumbnail in the bottom left. And it's annoying, so I'm planning to widen the high-score area from 2m to maybe 10m.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-53353921050761604072016-04-07T22:28:00.002-07:002016-09-08T23:58:00.262-07:00Walkthrough for Wall by Yukihiro HozumiGreen triangle key <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>top left of “wall” door</div></div><br />
Turn left take <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>blue square key and SD handle from drawers</div></div><br />
Wall w cross: <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>+ blade for the SD top left, </div></div><br />and note screws<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> - on the left arm, + on the right arm</div></div><br />Assemble driver and open a panel.
<br /><br />We need 3 shapes.
<br />Turn left to the square. On top is <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a ruler, and a bunch of shapes. </div></div><br />Place the ruler <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>on the shapes. </div></div>
<br />There's a solid triangle in the left and a solid square on the right. Note the symbols between them.<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>-||-, WWW, circle with a dot</div></div>
<br /><br />Go back to the cross. Insert your keys <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>triangle key in the left keyhole, square key in the right keyhole. </div></div>Change the symbols as appropriate. Press the blue button. This opens a door.
<br /><br />Next room.
<br />Photos on desk: “center” on left side of photo 1, “right” in middle of photo 2, ‘left’ on right side of photo 3.
<br /><br />Desk drawers. Right locked with a bolt on the side. Center has paper with
1 2<br />
3 4<br />
5 6<br />
<br />Left drawer needs 4 symbols to open. Clock on shelf uses same symbols for drawer. Left right buttons trigger a move to a symbol (or the 1 o'clock position with no symbol) every 3 presses.
<br /><br />Picture on wall: 7 red blocks left to right at heights 3,2,3,1,1,3,2
<br /><br />Use these heights on the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>3 drawers</div></div>to get a wrench. Use the wrench to open the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>right drawer</div></div>and get a red circle key.
<br /><br />While the drawer is open, click <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the side</div></div>to see another set or symbols. This indicates to use the<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>square and circle keys</div></div>and the symbols <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>nnnn, |<|, sinewave</div></div>This opens another room.
<br /><br />Take the stool and have a look at each of the windows to see 4 arrow sequences: <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>LLR, RLR, RRL, RLL. Note also the scratch marks below each, pointing <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>L R R L</div></div></div></div>When you click these on the clock (later) they will give the corresponding symbols <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>tree, spiral, eye, mouth, but if you click the first and last <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>[I]backwards[/I], you will get<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> mouth spiral eye tree</div></div></div></div></div></div>
<br /><br />Open the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>pipe with your wrench </div></div>and take a knife.
<br /><br />At this point you can toggle between the rooms just by clicking the blue button, no need to change the keys and sequence. I think those sequences are just for "unlocking".
<br /><br />Go back to the desk room and use the knife on <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the picture, twice</div></div>to get another screwdriver blade and a pair of glasses.
<br /><br />Use the new - screwdriver on <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the left side of the cross</div></div>to show 3 keyholes labeled <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>L, C, R</div></div>The photos on the desk will tell you the order of the keys here. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Square, circle, triangle</div></div>This turns on the eye. If you put on the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>glasses you can play with the eye, but it's not especially useful right now</div></div>
<br /><br />Use your stool and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>have a look at the lamp<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>at the top of the post with the 3 drawers</div></div></div></div> Another sequence:<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Triangle and circle keys, with double-dot, ground, and circle with an X.</div></div>
<br />Now you've got a room with 4 paintings, each with a pretty ridiculous caption, and a button. Write down all the number sequences, and map them to <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the paper in the middle desk drawer.</div></div>You'll come up with numbers 1..4. From left to right <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>3, 2, 4, 1</div></div>Click the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>painting buttons in that order</div></div>and the lights will come on.
<br /><br />Now you can see this is the exit door. Use your glasses on <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the painting captions</div></div>and you'll get 3 <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>color sequences <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>BBB, RBB, GGR</div></div></div></div>
<br /><br />Using those color sequences <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>on the eye, you'll get 3 positions for the square, circle, and triangle. You won't need these until the very end.</div></div>
<br /><br />There's pretty much nothing left to solve but that stupid drawer!
<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>mouth spiral eye tree</div></div>Take a gold key.
<br />Toggle rooms to the exit room, and take your shape keys back.
<br />Unlock the gold lock and you'll see a bunch of keyholes.
<br />Place your shape keys in the positions indicated by the eye and you are out!
<br /><br /><span style="color: #cc0000;">SECOND ENDING</span>
<br /><br />
After completing the game, get back to the main menu, click the cube at the top left corner and select "Resume." You will be placed in the main room, looking toward the exit room. Turn right and instead of the eye in the picture, you'll see an image of the office room. Click on it and you'll be placed in the office room.<br /><br />
There are a bunch of cube objects on the shelves that can be turned different directions. There is one item you can pick up<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a telescope</div></div>Have a look at the exit door and open the hatch in the top. Have a look at that far distant object. It is a <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>another cube object</div></div>Back out and look at the lock on the door: you will need a 5 digit number to get out.<br /><br />
There are 5 columns <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>on the block you see in the door.</div></div>This is going to be a bit of a stretch to try to explain it verbally, but you are wanting to match the color or colors in each <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>column</div></div>to a block on the shelves.<br /><br />
If you played with the blocks already, you might have guessed in this direction. You're on the right track. A block forms <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a number</div></div> in certain orientations.<br /><br />
The order of the digits is, of course, the order of the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>5 columns</div></div>and the colors are going to form the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>digit you need</div></div><br /><br />
Complete spoiler: <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>24137</div></div>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com3tag:blogger.com,1999:blog-7381128442147942377.post-71944196761583922262016-03-27T23:46:00.002-07:002016-03-27T23:46:39.802-07:0099 the Escape Game walkthrough99 the Escape Game walkthrough<br />
<br />
This is an evil, terrible game. You have a countdown clock starting at 99. When it gets to 0, you lose. This is the only time you can reset the game and start over, which makes writing a walkthrough a very, very slow process.<br />
<br />
Even though it's only 4 rooms, you'll definitely want to draw a map. There are multiple sets of clues in the second room and it's hard to keep them all straight. Several solutions are direction-oriented as well. The rooms look very similar, so it can be disorienting.<br />
<br />
If anyone understands the logic or has found the clue to the solutions I don't understand, please post it. I hate doing stuff and not understanding why.<br />
<br />
Room 1<br />
Turning through the room: A plant and a door, a screen, the exit door and a drawer, a pair of dots on the wall.<br />
Open the drawer by the exit door to find a box with 3 buttons, and a book with the clue 1 > > < < 5<br />
Click the center of the front part of the drawer, just above the knob. That unlocks the knob, which I'll call a pin, and you can remove it. You'll eventually get 3 pins in the game, and their colors can be changed by using them in the dots on the wall. The doors can only be opened by a pin of its matching color.<br />
<br />
You can also put the red pin in by the screen, and you'll get a + displayed. Clicking above, below, left, or right of the + will cause dots to be displayed, but you really can't do much with that right now.<br />
The next door is blue, so put your pin in the blue wall dot, then open the door to room 2.<br />
<br />
Nearly everything in room 2 is a clue for something. For right now just take a vase.<br />
<br />
Go back to room 1 and insert your blue pin by the screen. You will see a - , which allegedly implies a shelf.<br />
"North" is to the right as you enter room 2, the wall with the red door lock. Count the number of shelves on each wall.<br />
Starting north and going clockwise, <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> 7 4 5 6</div></div><br />
Get a blue triangle. Take your pin back.<br />
<br />
Face the room 2 door and open it, but do not go through. Use your triangle on the door to block it open. Go back to room 1 and change your pin to red, then go to room 2. Open the next door to continue to Room 3.<br />
<br />
Room 3 -- opening the drawer in the wall.<br />
I do not understand the solution here; I found it on a Chinese page news.4399.com/gonglue/jjhttyx/xinde/m/556729.html . It has to do with the blue, pink, gray and yellow panel in room 2, but if there was any clue to achieve this sequence, I don't know what it was.<br />
<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Face the yellow button on the wall<br />
step forward and it turns blue<br />
step back, turns pink<br />
turn R, there's a pink dot on this wall.<br />
turn R, gray<br />
L, pink<br />
R, pink<br />
R, pink<br />
R, then step forward. The button now looks like a target, and the drawer will open. </div></div>Get a screwdriver.<br />
<br />
Go back to room 2 and remove the screw in the panel with the pin. Take the pin. Insert your red pin in its place. Look around and count the number of shelves intersected by white vertical lines on each wall. Also, while here, count the number of white vertical lines on each wall.<br />
<br />
Go back to room 1. Insert your red pin in screen: +, # of shelves intersected by lines.<br />
As before, "North" is the exit to room 2, with the red door lock.<br />
Starting north and going clockwise:<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> 5 2 4 3</div></div><br />
Get a red ball. Take your pin back.<br />
<br />
Room 3 -- what to do with the ball<br />
The purpose of the ball is to give you a color sequence for the box in Room 1.<br />
Each wall in room 2 has two groups of books, creating a count from 1 to 8. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>These correspond to the holes in the wall in room 3. Starting point is the wall with the drawer. </div></div>If the ball is dropped through the holes it will change colors to red, yellow, or brown. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Following the book count sequence, </div></div>you will end up with <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>RRRBBYRB.<br />
</div></div>Use this sequence on the box and get a wrench. Use the wrench in room 2 and uncover another set of color dots.<br />
<br />
If it isn't there already, take your blue triangle back and use it to block open the door between 2 and 3 (red lock). Use your red pin on the green dot to make it green. Proceed to room 3 and open the green door to room 4.<br />
<br />
Room 4<br />
Stick your blue pin in the fountain straight ahead and fill your jar. Take back the pin when you're done.<br />
<br />
Go back to room 1.<br />
Green pin in screen: |, # of white vertical lines on each wall<br />
Starting north and going clockwise: 2 2 3 3<br />
Get a green cube.<br />
<br />
Time to tackle the little house in Room 2.<br />
Go to the plant in room 1. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Use your water to turn it all green. </div></div><input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The branches indicate directions. The arrow at the bottom indicates to start at the bottom and go up. </div></div><br />
<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>.....6<br />
3......2,5<br />
..1,4,7</div></div><br />
Go to room 2 and put your cube in the little house, then click the sequence. You'll get one last pin. Take your cube back.<br />
<br />
Take the new pin to room 1 and color it red, so you have pins of all 3 colors now. Head toward room 4, taking your triangle blocking the door as you go.<br />
Go to the door diagram in room 4. Place your pins, starting from north and going clockwise, <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>BRG. </div></div>It opens a door back to room 1.<br />
Go to the panel with the spaces for your 3 objects, place them, and take the key.<br />
Finally, on the wall click the following buttons: <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>>>, >, ●, ■ , << . </div></div>(Props again to news.4399.com for this answer.) The TV will go on and display 99. Your timer has also reset to 99.<br />
While your timer is still on 99 you can use the key and exit the door. (If you go wandering off and your timer falls below 99, you can press the sequence again and reset back to 99.<br />
<br />
(Postscript: it occurs to me that the numbers on the three shapes (B=2, R=3, G=4) are actually telling you where to place them around the door. Which implies the number order of everything does not start at north, but rather west. I'm not going to go back and check it out, but it's possible this makes things more sensible? We leave it as an exercise for the reader ;) )Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-6972440528772693672016-03-27T23:40:00.001-07:002016-03-27T23:41:57.834-07:00Escape from the Yellow Room 3 walkthroughEscape from the Yellow Room 3 walkthrough<br />
<br />
This one is long and a bit confounding. But brave escapers will prevail!<br />
<br />
First floor: Quick look and easy item pickup:<br />
“3” on the wall<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> can be rotated, </div></div>and a ladder we can’t go down due to fire<br />
3 dots on the wall, and a lightswitch. You can take <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>one of the dots.</div></div><br />
Another 3 dots you can zoom in on, but nothing there as yet.<br />
3 levers with green buttons.<br />
<br />
Make magic happen: turn off the lights<br />
Look through the 3 dots on the wall and view a branch with 6 leaves, the sun, and 4 trees. Ok, so not that much magic. Lights on.<br />
Play around with the “3”. Note that the switches change<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> colors depending on rotation. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>W = Green Yellow Green. E = YGG. M = GGY.</div></div></div></div><br />
<br />
Hozumi leap: consider the leaves, sun, and trees, and the colors of the levers. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Rotate the “3” to match <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>so they are GYG. </div></div>Then think about the numbers you’ve seen. You have 3 levers and 3 numbers.<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Click the levers the number of times indicated (6, 1, 4).</div></div></div></div> The ceiling will open up and you can climb the ladder.<br />
<br />
Second floor:<br />
The sun on the wall, and a chair with a book. The book reads “cyan magenta yellow black”<br />
Turning left, a sofa and lamp. Nothing to find here.<br />
The ladder and the “3” on its back (echoing the figure on the first floor).<br />
A bed, a yellow tube, and a table. The drawer is empty.<br />
There doesn’t seem to be anything to do here, so let’s continue up<br />
<br />
Third floor:<br />
The sun on the wall, a chair, a mousehole, and a balloon.<br />
To the left, a sofa and floor lamp, and 3 locked cabinets on the wall.<br />
Next wall, 3 on its back, and a cloud.<br />
A bed, a yellow tube with a hole in it, a nightstand. The drawer has 3 indentations on it. You can insert your disk here, so you’ll need to find 2 more. Click some more and you will also find<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> 2 screws on the side.</div></div><br />
There’s also a light switch here, so do<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> lights-out magic. Inside the mousehole is a chair, a lamp, and a drawing of cheese on the wall.</div></div><br />
Also, look a little more closely at one object we’ve been using over and over. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The ladder. At the top you’ll find <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>another black dot, and a flashlight. </div></div></div></div>Go ahead and stick the dot in the nightstand, and check out underneath the bed and sofa. (Sorry, nothing!)<br />
<br />
Keep using your flashlight on other floors. You’ll find a black dot<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> under the bed on the 2nd floor. </div></div>Bring that back to the 3rd floor nightstand and open it to get a roll of tape. You should fix <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>that hole<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>in the pipe.</div></div></div></div><br />
<br />
Fiddle with the lights and rotate the “3”. You’ll discover 2 things:<br />
If the 3 is in the “M” position, the 2nd floor M is purple. Clicking it turns the room purple.<br />
With the 3 in the “3” position, the 3rd floor 3 is clickable, but doesn’t do anything.<br />
<br />
Let’s go check out that purple thing. Turn the room purple, turn around and a moon with 6 stars has appeared on the wall. Also you’ll see 3 groups of numbers on the wall:1-2, 6-4, 5. Keep this in mind for later.<br />
<br />
On the 1st floor, turn the lights off and take a look<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> through the three holes. Y<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>ou now have 3, 7, and 1 star in purple rooms. </div></div></div></div>Notice the switches are<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> all purple now. Do like what you did earlier with the switches. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Go up to the 2nd floor and grab a screwdriver. </div></div></div></div>Turn the “M” off.<br />
<br />
Back to the 1st floor. Rotate the 3 to the 3 position. Go to the 3rd floor and you can solve the cabinets<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Click the 3 cabinets in the order indicated <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>(1-2, 6-4, 5). For 3, click the 3</div></div></div></div>Get a slingshot frame. Remove the screws from the right side of the nightstand and open the drawer further. Get a rubber band and note in the book a drawing of a cloud. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The rain falling is a bit unusual too. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>There are 2, 4, and 3 lines.</div></div></div></div><br />
<br />
Go back to the first floor. Surprise, surprise, the switches <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>are now blue. Do that thing with the switches. </div></div>You’ve put out the fire!<br />
<br />
Go ahead and assemble the slingshot. We need a rock or a dart for it. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Actually, you already have one. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The screwdriver. </div></div></div></div>Head on up to the 3rd floor and shoot that balloon down. You know you've been wanting to do that since you first laid eyes on it!<br />
<br />
Hey! Bad mouse!! He’s taken your key<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> to the mouse hole. </div></div>That naughty mouse is probably why there was <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a hole chewed in the yellow pipe. </div></div>Take the tape <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>off the pipe. You may have to leave the floor and come back. When you do, <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>check the mouse hole again and the key should be gone.<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> It will be in the pipe. </div></div></div></div></div></div><br />
<br />
Finally, we’ll check out Floor 0. You have a sketchy looking door, and a book with a clue: E = Escape. On floor 1, <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>rotate the “3” one last time to </div></div>turn that door into a real door.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-67923705247496037062016-03-27T22:22:00.000-07:002016-03-27T23:33:57.789-07:00 Escape from the Yellow Room 2 WalkthroughI originally wrote this walkthrough for posting on Nordinho.net but I'll put a copy here as well, because Yukihiro Hozumi makes some beautiful and very hard games.<br />
<b>Escape from the Yellow Room 2 Walkthrough</b><br /><br />
<b>First room</b><br />
In the opening scene, there’s a blue doorknob. Above the word “Yellow” is a window to a blue room with the word “blue”. There are two screws in the O.
To the right, take a landscape picture from the wall<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> by clicking the top left.</div></div>On the back is a clue<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> one might interpret as “up up down down.” </div></div>
To the right again, a light switch and a yellow doorknob.
To the right again, a “red” window looking onto a red room, and a red doorknob.
Go to the light switch and zoom in on it. Before you click it, though, zoom in on <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the 2 <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>and take a tack. </div></div></div></div>
Turn off the light and look round the room again.
By the red window you now have a lamp and a table with a vase. If you turn off the tall lamp, you can turn it on again by going to the main light and turning it on then off. The table has a locked drawer. Click the top of the table and find a pattern of 4 dots that can be changed to lines.
By the blue window you have a desk with a lamp, 3 shapes, and a book. The drawer in this desk is unlocked; take an eraser-like object. It has a pattern on the back<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> that could be interpreted as “right left right left”.</div></div>
You now have the clues to go back to the table by the red window and open the drawer. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Combine the two clues from the picture and the brush. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Set the first dot to 3 o’clock, second to 9 o’clock, third to 3:30, fourth to 6:45. </div></div></div></div>Take a jar. It's not empty.
At the desk by the blue window, use the jar<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> on the book for a grid clue.</div></div>
Put the pin in the picture and hang it up over the 2. Turn off all the lights. As you do so, the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>ball on the floor lamp chain will come off. </div></div>When all lights are off<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> you’ll see a pattern on the wall.
BRR
RRB
BBR</div></div>
Combine the grid with the book hint to get a color order. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>RRBBRB</div></div>
Turn on the light and use this clue on the red and blue objects in the room -<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> the doorknobs. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Click them in that order.</div></div>You’ll get… a doorknob. With a convenient screwdriver in it.</div></div>
Use the SD on <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>“Yellow” and get an odd silver object. It’s got an indent with a tiny hole in it. Combine it with <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the thumbtack, then combine this with<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> the ball.</div></div></div></div></div></div> It looks an awful lot like <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a key.</div></div>
Use this on the yellow doorknob and enter<br /><br />
<b>The second room.</b><br />
The door closes behind you... Whew, there’s a light switch.
By the light switch is <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>a smudge on the wall. </div></div>On another wall is a shelf/bowl thingy with a yellow handle. On another wall is a clock without hands. The door you entered by has vanished.
Use the eraser on<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> the smudge to reveal a hand. </div></div>Click where <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>the finger is pointing… there’s a circle, which you also click to reveal <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>another hand.</div></div> </div></div>Click where <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>*that* finger is pointing -- </div></div>a tiny hole.
You have one object that you can use here. Use<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> the screwdriver/doorknob</div></div> and enter<br /><br />
<b>The third room.</b><br />
Did I say this game has some serious atmosphere?
Straight ahead is a table with a book and a vase, which you can take. It’s also very, very dark and there doesn’t seem to be any other lights except the dim one over the table. Go back to room 2 and <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>turn off the light there. Some bloody fool electrician has wired Room 3 to light up when room 2 is off. </div></div>Go back to now-lit Room 3.
That’s much better. Now you can take another object from the desk. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>The lightbulb. </div></div>It combines, eventually, with the yellow handle, and becomes<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> a flashlight.</div></div>
On another wall is another set of dots which behave like the dots on the table in the first room. Also, while here, click around<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> the cone and take a knife.</div></div>
Next, 3 niches shaped like a triangle, a square, and a sphere. Next wall, more or less nothing...
Look for a place to use that handy knife. You’ll find it<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>in the book is a mirror</div></div>Explore the desk a little more and you’ll find a place to use it, <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>toward the back of the desk. </div></div>Get a <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>green cube.</div></div>
Go back to room 2 and use your <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>flashlight to explore. You will find a clue for the dots. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>3, 6, 9:30, 3</div></div>Use that on the <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>dots</div></div> and get a blue triangle.</div></div>
If you're trying to refer as little to this document as possible, you might feel a little stuck at this point, but there <i>is</i> one more thing you can do. <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>Close the door. Yipe! </div></div>And your knife is gone! However, you can do something else with <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>your flashlight.<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> Take it apart, then use the bulb </div></div>in the eye. </div></div>Fill your jar.
Head on back to room 2 and<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> pour the water into the shelf/bowl</div></div> to get your last piece.
Put all 3 items into the niches and everything will fade away. Except for <input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div>4 dots on the wall.</div></div>
Walk on out and keep walking out. You’ll come to a white room with a nightstand with a drawer. Take the key. Use the key on the door.
You’ll come to an end screen with 4 dots. But<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> you're not <i>really</i> done.<input class="spoilerbutton" type="button" value="Show" onclick="this.value=this.value=='Show'?'Hide':'Show';"><div class="spoiler"><div> Recreate the pattern and you’ll finally be able to go to bed.</div></div></div></div>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-40899093967039802272015-08-30T14:30:00.002-07:002016-01-23T22:25:17.280-08:00Website rebirth, fooling around with DartI think I originally built it around 1998 as a way of learning HTML. It was never as awful as <a href="http://www.cameronsworld.net/" target="_blank">Cameron's World</a> but was originally a longish page of text with links to other longish pages, somewhat focused on a wicked good Irish actor. ("Parchment" wallpaper, but mercifully, no animated gifs.) Within a few years a purchase of Macromedia Dreamweaver gave it a menu made of slices (does anyone remember those?) and a frame for content.<br />
<br />
It stayed that way for well over a decade, getting the occasional content update, eventually dropping the Irish actor stuff and just focusing on falconry. For a while I was updating it pretty frequently with my falconry activities, but that got tedious and I doubted anyone was reading it anyway. I kept it around as an archive to the alt.sport.falconry FAQ (does anyone remember Usenet?) and an article about all these little maxims my sponsor taught me.<br />
<br />
Around May I decided I finally had enough knowledge to redo the site with JQuery and CSS. I also had motivation: a chat room frequented by escape game fans was going through a lot of drama due to an out-of-control moderator/admin, and the owner had threatened to shut it down. I had been part of the chat room for about a year and liked the vibe -- very nice people, kind and supportive to each other in trying times. If the chatroom were shut down, it would need to continue elsewhere.<br />
<br />
So I rebuilt the website (<a href="http://www.fallinghawks.net/" target="_blank">all simple and clean looking now</a>) and tested out a couple different chat services. None of them really had the right mix of end-user fun, storing chat history, and security. (The crazy moderator was known for sockpuppetry and allegedly had hacking skills -- although from my perspective, I take "hacking skills" with a grain of salt when the description comes from end-users. Having been IT, I know all too well how end-users like to have one simple password for everywhere they go.) After several weeks experimenting with a few of the old chat users I'd managed to rope in (I'm grateful they stuck with me, registering and re-registering as we test-drove more chatboxes), I finally settled on a nice package called <a href="http://hot-things.net/" target="_blank">Blab!Chat</a>. Granted, it's written in PHP, so aspects of security are suspect, but I could fiddle and tweak with it myself. It's now running happily with the core group of people from the old chat, which the owner shut down about a month after his threat and ran the crazy moderator off his site.<br />
<br />
At about the same time I learned that <a href="http://www.sonic.net/" target="_blank">Sonic</a>, a well-respected Bay Area ISP, had finally begun to offer service in my area. I leaped on the opportunity to ditch my ATT service, with its utter lack of anything useful beyond basic Internet and landline, for slightly more bandwidth, real website hosting (as opposed to ATT's "storage" which hashed the names of uploaded files, making it impossible to build a website), server side scripting, and IP phone for $30 less.<br />
<br />
So, suddenly and finally, I've hit the 21st century ;)<br />
<br />
A couple days ago the bf suggested a new project -- write a Minesweeper game -- using Dart or Elm. I explored Elm but the functional programming paradigm is a little too foreign for moment. Dart is a mix of Java and Javascript with some nice DOM-element functions -- recognizable and comfortable -- indeed, using true Dart functions in a Dart program seems entirely optional. I bashed <a href="http://www.fallinghawks.net/minesweeper/index.html" target="_blank">this</a> out in about four days, needing only general structural questions to the bf. Right now we're doing code review with the goal of making it more Dart-like.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com2tag:blogger.com,1999:blog-7381128442147942377.post-11044766666597153852015-05-08T23:24:00.003-07:002015-05-08T23:27:02.672-07:00Google Maps kml files are now zipped kmz filesApparently I'm bad at keeping up to date when APIs are changed. I looked at <a href="http://tacotacotruck.appspot.com/" target="_blank">TacoTacoTruck</a> recently and it failed to load any map data. It seems that instead of giving a plaintext kml file as it used to, Google Maps returns the file in zip format (kmz), even if you ask for a kml file.<br />
<div>
<br /></div>
<div>
So it needs to be unzipped. Here's some code:</div>
<div>
<br />
<pre style="background-color: #dbdbdb; color: #616161; font-family: 'Courier New'; font-size: 9pt;"><span style="color: navy; font-weight: bold;">class </span>Fetch(webapp2.RequestHandler):
<span style="color: navy; font-weight: bold;">def </span>get(<span style="color: #94558d;">self</span>):
<span style="color: grey; font-style: italic;"># urlToUse is just a little hardcoded map of a filename as key and the url as the value</span>
url = urlToUse[<span style="color: #94558d;">self</span>.request.path]
<span style="color: navy; font-weight: bold;">if </span>url <span style="color: navy; font-weight: bold;">is </span><span style="color: navy;">None</span>:
<span style="color: navy; font-weight: bold;">print</span>(<span style="color: green; font-weight: bold;">"unexpected path: %s" </span>% <span style="color: #94558d;">self</span>.request.path)
<span style="color: navy; font-weight: bold;">return</span><span style="color: navy; font-weight: bold;">
</span><span style="color: navy; font-weight: bold;"> </span>cachedData = memcache.get(<span style="color: #94558d;">self</span>.request.path)
<span style="color: navy; font-weight: bold;">if </span>cachedData <span style="color: navy; font-weight: bold;">is not </span><span style="color: navy;">None</span>:
<span style="color: #94558d;">self</span>.response.write(cachedData)
<span style="color: navy; font-weight: bold;">return</span><span style="color: navy; font-weight: bold;">
</span><span style="color: navy; font-weight: bold;"></span> startDownloadTime = time.time()
result = urlfetch.fetch(url)
<span style="color: navy; font-weight: bold;">if </span>result.status_code == <span style="color: blue;">200</span>:
elapsed = time.time() - startDownloadTime
<span style="color: navy; font-weight: bold;">print</span>(<span style="color: green; font-weight: bold;">"downloaded %s in %s seconds" </span>% (url, elapsed))
bytes = io.BytesIO(result.content)
zip = zipfile.ZipFile(bytes)
<span style="color: grey; font-style: italic;"># retrieve the file name of the first (and only) file in the zipfile</span>
<span style="color: grey; font-style: italic;"> </span>firstName = zip.namelist()[<span style="color: blue;">0</span>]
<span style="color: navy; font-weight: bold;">print</span>(<span style="color: green; font-weight: bold;">"unzipping %s" </span>% firstName)
<span style="color: grey; font-style: italic;"># unzip it into contents</span><span style="color: grey; font-style: italic;"></span>
contents = zip.read(firstName)
memcache.set(<span style="color: #660099;">key</span>=<span style="color: #94558d;">self</span>.request.path, <span style="color: #660099;">value</span>=contents, <span style="color: #660099;">time</span>=cacheTime)
<span style="color: #94558d;">self</span>.response.write(contents)
<span style="color: navy; font-weight: bold;">else</span>:
<span style="color: navy; font-weight: bold;">print</span>(<span style="color: green; font-weight: bold;">"can't fetch kml file for %s. Status=%s" </span>% (<span style="color: #94558d;">self</span>.request.path, result.status_code))
<span style="color: #94558d;">self</span>.response.write(<span style="color: green; font-weight: bold;">''</span>)</pre>
</div>Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-27604789054029260872015-05-01T22:09:00.001-07:002015-05-08T22:47:52.375-07:00Donors, thank you!In the past two months I've received several in-app purchase donations for my <a href="https://play.google.com/store/apps/details?id=com.fallinghawks.napkin" target="_blank">Napkin</a> paint program. Thank you, kind people!Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-4355125520703126172015-05-01T22:05:00.002-07:002015-05-08T22:50:33.078-07:00Small but useful updates to MapTagDue to the increasing number of user-generated panorama shots being uploaded to Google, it's been harder to find a game where you can actually navigate. I was playing today and got 4 user panoramas in a row! So I added a check to look for "Google" in the copyright info. This should nearly eliminate getting a user-generated pano.<br />
<br />
Another minor annoyance came after you got the score window. You could click it and it would close, but the map where you made your guess didn't close along with it. Now it does.<br />
<br />
Finally, I've added a new themed game called "New to the City." It places you in a random location but within a specific city. There's currently 24 cities to choose from, so go get lost!<br />
<br />
Happy wandering!Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-14203804961050170382014-07-08T21:35:00.001-07:002015-05-08T22:49:04.857-07:00Taco trucksAbout a month ago I was browsing <a href="http://www.reddit.com/r/bayarea/" target="_blank">Reddit's SF Bay Area sub</a>, and noticed <a href="http://www.reddit.com/r/bayarea/comments/1ywqp4/my_old_taco_truck_map_east_bay_and_beyond/" target="_blank">a link to maps of taco trucks in the East Bay</a>. Taco trucks take me back to my early days in Silly and my first job (in Mountain View), and a cow-orker who introduced me to the joys of a lengua taco dripping onto a paper plate. The redditor who made the map seemed interested in a web version, so I built <a href="http://tacotacotruck.appspot.com/" target="_blank">TacoTacoTruck</a>. However, he has yet to follow up on whether he liked it, hated it, or just didn't have time to deal. So although the map itself is not my own work, the web version is mine and could be fed any user-made Google map.<br />
<br />Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-87152697809221905692014-07-03T17:48:00.002-07:002015-05-08T22:47:52.379-07:00Finally published Napkin Ideas on Play.<a href="https://play.google.com/store/apps/details?id=com.fallinghawks.napkin" target="_blank">Well, finally.</a><br />
<br />
This was actually done months ago, but I thought it would be really nice to have an ability to edit the background. So I started creating a wizard to do that, and for whatever reason, I just could not get it working the way I wanted, and got kind of depressed about that. So I dropped that bit out of the code and decided to publish as it was before.<br />
<br />
Well, almost as it was before, with one notable exception: I took out the advertising. It's annoying to look at, and probably not going to generate any significant amount of revenue. In its place, I have put in what I'm calling a beg bar: give me a donation, the little yellow bar goes away.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-29755307343932829592014-04-14T13:51:00.003-07:002014-04-14T19:17:33.006-07:00Vertigo: so that's what it's likeMy mom has gotten <a href="http://en.wikipedia.org/wiki/Benign_paroxysmal_positional_vertigo" target="_blank">vertigo spells</a> for the past 20 years or more. As she is incredibly detailed when it comes to her personal health, she has described to me every single episode and what might have caused it to happen. Quite often it's a sudden head turn, one of those unconscious moves you make when driving; sometimes it's having your head at an odd angle for an extended period of time, which happens when she gets her hair washed in the salon. Whenever it happens she usually goes to the hospital because she's old and falling has serious consequences, plus she is often unsure if she's having a heart attack. (To which I often say, Mom, if you had enough time to contemplate if you're having a heart attack, you probably aren't.)<br />
<br />
So this morning I got to experience a bit of the joy of vertigo. And because I'm my mother's daughter, I'll describe it in loving detail.<br />
<br />
Having been on the receiving end of these stories, I almost instantly understood what had happened. I was lying in bed, having just woken up, rolled over to kiss my sweetie, and suddenly felt a bit odd inside my right ear. Almost an itchy feeling, definitely deeper than the canal, and above it, and as I am now looking at pictures of the inner ear, in the region of the semicircular canal.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Blausen_0329_EarAnatomy_InternalEar.png/600px-Blausen_0329_EarAnatomy_InternalEar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Blausen_0329_EarAnatomy_InternalEar.png/600px-Blausen_0329_EarAnatomy_InternalEar.png" height="320" width="320" /></a></div>
<br />
I opened my eyes and things were moving like an animated GIF loop, fortunately not too fast. I sat up and it didn't go away, and that's when I said "Oh crap, I'm having vertigo like my mom gets." I felt clammy and slightly nauseated. After a few minutes holding still (except for my mouth, which was cussing out my mother for passing this weakness on to me), the spin decreased to a twitch. My guts were wanting to get rid of anything offensive, and did, fortunately in the down direction.<br />
<br />
Staring straight ahead was okay. Almost any other direction and the reaction was surprisingly immediate: clamminess and nausea. And it would go away almost as fast when I looked in a "safe" direction. But this was not a gut problem, it was neurological. Looking at the tablet seemed okay, but I couldn't use the computer -- a little too much head tilt there, I think.<br />
<br />
I'd researched <a href="http://en.wikipedia.org/wiki/Epley_maneuver" target="_blank">the Epley maneuver</a> for mom in the past, but was feeling too trembly in the guts to want to try it. When you're feeling this way, the last thing you want to do is something with high potential to make a terrific mess to clean up.<br />
<br />
Sitting up in bed seemed to be the best thing for staying un-dizzy and mitigating the chills. My mom had been advised to sit still and stare at a fixed point, so I focused on the opposite wall. Slowly and gently I started tracking left and right, trying to increase the safe zone. It seemed to work. I pointed my gaze a foot or two higher on the wall and did the same. Repeat, raising a foot or two each time. My toes felt a little achy and I spent some time massaging them. I eventually graduated to turning my head, too. I don't know how long I spent doing this, but somewhere near the end of it, Best Boyfriend Ever came by to check on me, offered to take me to the hospital, and when I said I'd be okay, left for work. Out of everyone I've ever known intimately enough, BBE takes the second-longest time to get ready for work: two hours is average. (My mom is the first.)<br />
<br />
As you might imagine from all this back and forth, I was also getting very sleepy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/g-htl-121019-hypnotized-5p.380;380;7;70;0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://msnbcmedia.msn.com/j/MSNBC/Components/Photo/_new/g-htl-121019-hypnotized-5p.380;380;7;70;0.jpg" height="240" width="320" /></a></div>
<br />
I was pretty sure I was sleeping sitting up, in between tracking. We had had a normal amount of sleep but I was just wiped out. I carefully lay flat, not sure if this would be troublesome. It wasn't.<br />
<br />
I sacked out for several hours. When I woke up things were 100% better. I'm taking it easy and slow this afternoon but I seem to be able to point in most any direction safely. I still itch a little bit in the ear, but I think the crystals are by and large back where they belong.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-8128875056455879142014-01-22T22:57:00.000-08:002014-01-22T22:57:06.115-08:00Positive feedback is always funA short but positive review of Maptag <a href="http://googlemapsmania.blogspot.com/2013/12/wheres-this-street-view-from.html" target="_blank">here</a>.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-82033104156565135032014-01-14T20:51:00.000-08:002014-01-15T13:47:44.251-08:00Done with the paint appThere was a trip to Germany for the boyfriend to attend a conference, and Christmas, and New Year's, so not a whole lot got done between the 15th and the 2nd. But since then it's been chin-rubbing and poking and growling, and finally the app was finished. I still need code review but right now it does just about everything I want it to.<br />
<br />
The sticky bit was adding text. I'd originally set up the button to open an alert dialog where you could enter your text, and select a font size via a slider. That was visually jarring and functionally awkward because you couldn't really tell how large to make your text in relation to the drawing. You would only know after placing it, so you'd have to undo and try again if you found it the wrong size.<br />
<br />
So I found <a href="http://alinberce.wordpress.com/2012/02/20/android-edittext-with-custom-font-and-clear-button/" target="_blank">a bit of code that would include an actionable graphic</a> (an image of an X to clear the text) in an EditText. From that starting point I made the EditText so it would be placed directly on the drawing surface, and it could be resized by dragging at the corner graphic. Clicking the checkmark graphic at the top cements the text in place. It's much smoother than having a dialog box.<br />
<br />
After that, some code to save the drawing in JSON so it can be retrieved later.<br />
<br />
For the next trick I want to put advertising in it. I'd like have a free-with-ads version, and a paid no-ads version. Don't hurt me, please. I'm not crazy about doing it either.<br />
<br />
So to distract you from that last paragraph, here's the code for an edittext that can be moved around and the font resized by dragging. Both the drawing and the EditText are children of a Viewgroup.<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">public class MovableEditText extends EditText {</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // 2 drawables: an OK and a resize handle</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private Drawable closeImg = getResources().getDrawable(R.drawable.text_ok);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private Drawable resizeImg = getResources().getDrawable(R.drawable.text_resize);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private long timeFingerDown;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public InputMethodManager imm;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private App app;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private boolean resizing;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private TextCompletedListener textListener;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private boolean finished = false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private float startDeltaLeft;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private float startDeltaTop;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> float leftMargin = 100;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> float topMargin = 100;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> public MovableEditText(Context context) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> super(context);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> app = (App) context.getApplicationContext();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> init();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> @Override</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void scrollTo(int x, int y) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> super.scrollTo(0, 0);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> @Override</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public boolean onTouchEvent(MotionEvent event) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> switch (event.getAction()) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> case MotionEvent.ACTION_DOWN:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> timeFingerDown = event.getEventTime();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // Remembers where you grabbed the text</span><br />
<span style="font-family: Courier New, Courier, monospace;"> startDeltaLeft = event.getX();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> startDeltaTop = event.getY();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setCursorVisible(true);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> case MotionEvent.ACTION_UP:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizing = false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // clicking on the OK checkbox</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (event.getY() < getPaddingTop() + closeImg.getIntrinsicHeight()) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> MovableEditText.this.okButtonClick();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // otherwise, act like a proper edittext</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (event.getEventTime() - timeFingerDown < 200 && !finished) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> super.onTouchEvent(event);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> case MotionEvent.ACTION_MOVE:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (event.getX() > getWidth() - getPaddingRight() - resizeImg.getIntrinsicWidth()) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizeBox(event);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // we touched the arrow, so we are resizing the box (i.e. increasing font size)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizing = true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (event.getEventTime() - timeFingerDown > 200 && !resizing) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // we are moving the box; close the keyboard</span><br />
<span style="font-family: Courier New, Courier, monospace;"> imm.hideSoftInputFromWindow(getWindowToken(), 0);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> moveBox(event);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> case MotionEvent.ACTION_CANCEL:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizing = false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> public void setTextCompletedListener(TextCompletedListener l) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> textListener = l;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> private void init() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setMinimumHeight(closeImg.getIntrinsicHeight()*2);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setMinimumWidth(closeImg.getIntrinsicWidth()+resizeImg.getIntrinsicWidth() *2);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // Set bounds of the Clear button so it will look ok</span><br />
<span style="font-family: Courier New, Courier, monospace;"> closeImg.setBounds(0, 0, closeImg.getIntrinsicWidth(), closeImg.getIntrinsicHeight());</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizeImg.setBounds(0, 0, resizeImg.getIntrinsicWidth(), resizeImg.getIntrinsicHeight());</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // There may be initial text in the field, so we may need to display the button</span><br />
<span style="font-family: Courier New, Courier, monospace;"> showOkButton();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //if text changes, take care of the button</span><br />
<span style="font-family: Courier New, Courier, monospace;"> this.addTextChangedListener(new TextWatcher() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> @Override</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void onTextChanged(CharSequence s, int start, int before, int count) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> MovableEditText.this.showOkButton();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> @Override</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void afterTextChanged(Editable arg0) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> @Override</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void beforeTextChanged(CharSequence s, int start, int count, int after) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> });</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> private void moveBox(MotionEvent event) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> leftMargin += (int) (event.getX() - startDeltaLeft);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> topMargin += (int) (event.getY() - startDeltaTop);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> requestLayout();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // the following is to be used by drawview when resizing and panning</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void externalMove(float dragX, float dragY) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> leftMargin = (int) (leftMargin + dragX);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> topMargin = (int) (topMargin + dragY);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> requestLayout();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> private void resizeBox(MotionEvent event) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setWidth((int) event.getX());</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setHeight((int) event.getY());</span><br />
<span style="font-family: Courier New, Courier, monospace;"> resizeText();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // change the text size to whatever will fit in the box</span><br />
<span style="font-family: Courier New, Courier, monospace;"> private void resizeText() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> String[] multiline = this.getText().toString().split("\n");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> float adjustedHeight = (getMeasuredHeight()/multiline.length - getCompoundPaddingBottom() - getCompoundPaddingTop())/2;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setTextSize(adjustedHeight);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // if there is text, add the OK button</span><br />
<span style="font-family: Courier New, Courier, monospace;"> void showOkButton() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (this.getText().toString().equals("")) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // remove the clear button</span><br />
<span style="font-family: Courier New, Courier, monospace;"> this.setCompoundDrawables(this.getCompoundDrawables()[0],null, resizeImg, this.getCompoundDrawables()[3] );</span><br />
<span style="font-family: Courier New, Courier, monospace;"> } else {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //add clear button</span><br />
<span style="font-family: Courier New, Courier, monospace;"> this.setCompoundDrawables(this.getCompoundDrawables()[0], closeImg, resizeImg, this.getCompoundDrawables()[3]);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> void okButtonClick() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> MyViewGroup viewGroup = (MyViewGroup) getParent();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // get the text, get the size, get the position, create a Stroke from it</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // locate this view in the viewgroup's coordinate system</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // the screen coordinates minus the location of the MET</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float deltaL = getLeft() - getScrollX() - viewGroup.dv.getCenterX();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float deltaB = getTop() - getScrollY() + getBaseline() - viewGroup.dv.getCenterY() ;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // viewcenterxy are the canvas coordinates</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float dvViewCenterX = viewGroup.dv.getViewCenterX();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float dvViewCenterY = viewGroup.dv.getViewCenterY();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float scaleFactor = viewGroup.dv.getScaleFactor();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // translate that delta to the canvas's coordinates</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float translatedL = dvViewCenterX + (deltaL/scaleFactor);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Float translatedB = dvViewCenterY + (deltaB/scaleFactor);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> if (this.getText().toString().length()>0) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> app.setText(getText().toString());</span><br />
<span style="font-family: Courier New, Courier, monospace;"> app.setTextSize(getTextSize()/2); // i do not know why it keeps doubling the size</span><br />
<span style="font-family: Courier New, Courier, monospace;"> app.strokeInProgress = new TextStrokeBuilder(app, translatedL, translatedB, scaleFactor);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> app.finishStroke();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // tell viewgroup to delete the EditText</span><br />
<span style="font-family: Courier New, Courier, monospace;"> textListener.onTextCompleted();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> finished = true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> imm.hideSoftInputFromWindow(getWindowToken(),0);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> public void setLeftMargin(float left) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> leftMargin = left;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> public void setTopMargin (float top) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> topMargin = top;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<div>
<br /></div>
Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-13239377568451204432013-12-12T00:13:00.000-08:002014-01-15T13:55:21.467-08:00getting close to doneI finally managed to build a resizable EditText box. So you click on the Add Text button, and a little grey box pops up onscreen on top of your drawing. It's semi-transparent so you can see what's going on below. The keyboard pops up and you type your stuff. A double-headed arrow icon on the right: left/right will increase the width of the box, up/down will change the size of the font. Touch the checkmark icon at the top and the text will be placed. Press & hold on the text itself will let you drag it around to where you want it.<br />
<br />
This is getting nice. It's reasonably smooth and intuitive.<br />
<br />
There are several things I need to fix to get it fully working right. At the moment it doesn't place the text where I want, and the size is being measured in actual pixels, so if you're zoomed out on the page, it's freaking teeny tiny. These are scaling issues. The other bit is gracefully deleting the EditText when finished -- I need a hook or a listener or something that the EditText can use to tell the app it's done.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-63784252554542769472013-12-01T13:14:00.000-08:002014-01-20T14:33:36.026-08:00More Play Store piracy<br />
I wrote about <a href="http://andreaandroid.blogspot.com/2013/04/concerns-about-piracy.html" target="_blank">this back in April</a>. I do not browse the Play Store all that often -- once a month, maybe a bit more -- and I found <a href="https://play.google.com/store/apps/details?id=com.rockgamedevelopment.canyouescape" rel="nofollow" target="_blank">another one</a> a couple days ago. The game is the property of Mateusz Skutnik, an artist and Flash programmer lauded by escape gamers for his atmospheric, brain-twisting <a href="http://www.mateuszskutnik.com/submachine/" target="_blank">Submachine</a> series.<br />
<br />
I notified Mateusz and he confirmed that the developer did not have permission to port his work to Android. He'll be taking action on it.<br />
<br />
Because the games they steal are by different developers, pirates' offerings are going to be very diverse in visual style. A developer making his or her own apps will have a certain style, probably more clearly seen in games than other apps. Widgets such as control buttons and menu styles will be re-used, and the flow from one activity to the next will likely have the same feel.<br />
<br />
The ad load of a pirated game will be high. That's one thing that you can count on, because the game is free and this is the sole means of revenue.<br />
<br />
It would be interesting if Google, with its advanced abilities to search images for faces and general concepts, applied this to the Play Store.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-45009342213404056482013-11-17T19:11:00.000-08:002014-01-20T14:32:26.317-08:00working on a new appA few days before Halloween Brian settled on his "costume": a bow tie.<br />
<br />
Not just any ol' bowtie, but<br />
<br />
<div style="text-align: center;">
<b><span style="font-size: large;">>< > the Bowtie of the Future < ><</span></b></div>
<br />
It would be changeable at a touch. It would set the background to the shirt behind it. It would take photos. It would have a +1 button.<br />
<br />
In about 6 hours we cobbled together a bowtie image that would cycle through the Google colors and wiggle when clicked, had a fake +1 button and a counter on the left, a subtle (Google design always runs subtle) "BETA" on the right. "Adjusting" the tie, i.e. rotating the phone back and forth, would take a photo.<br />
<br />
There were a bunch of little quirky things to code for. Because of the front camera's placement, the entire app had to be displayed upside-down from the normal landscape mode, otherwise the camera would have been obscured by his collar. Photos taken by the camera resulted as upside-down, but flipping is easy. Since he's tallish, the camera tended to take photos of the top edge of the opposite wall, and I experimented with carving wedges from packing foam until we decided it was more trouble than it was worth. Brian was dissatisfied with the shake code I'd found and fine-tuned it to use the gyroscope and a specific sequence of motions to listen for.<br />
<br />
And of course we didn't actually use the back camera to divine the clothing behind it. Brian picked a shirt, I slapped it on the scanner, and turned it into the background image.<br />
<br />
But that isn't the 'new app' of the post title. I've started a paint program. Nothing that isn't the same as quite a few paint apps out there, and in fact it may be simpler than most. But it's partly for the experience and partly because I have an idea that will make it special.<br />
<br />
The basics, of course, include:<br />
- a palette of 10 colors, which can be customized<br />
- fill color<br />
- outline thickness<br />
- brush<br />
- point-to-point lines<br />
- rectangles and ovals<br />
- text (nothing fancy, just plain ol' text using the native Android font in the outline color)<br />
- zooming, panning<br />
- undo<br />
- eraser (you won't believe how hard that is to figure out, partially due to sketchy Android documentation).<br />
<br />
All colors include transparency levels.<br />
<br />
You can take a photo or select one from your gallery to slide in as the background layer.<br />
<br />
You can save the drawing+background to the gallery as a jpg, and share it to email, Drive, etc.<br />
<br />
All customizable items (colors, line thickness) are saved in SharedPreferences, so you can always have that perfect 20% transparent purple you love.<br />
<br />
I've just finished coding all the above. Neither Brian nor I are fully satisfied with the sequence of events used to add text. It's not easy to make a not-too-disruptive popup with a space for your text and a slider for your font size when there's a keyboard that will slide in and take up half your screen space.<br />
<br />
More to come...Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com0tag:blogger.com,1999:blog-7381128442147942377.post-52576050608680788772013-08-13T21:10:00.002-07:002014-05-26T17:37:05.732-07:00Ninja Escape by Niwaka Soft - walkthrough all stages<a href="https://play.google.com/store/apps/details?id=com.ns.NinjaEscape" target="_blank">Android app</a><br />
<br />
Stage 1 - Use the shuriken to hit the targets<br />
Stage 2 - Pull the rope 6 times<br />
Stage 3 - Shake your device<br />
Stage 4 - use the sword to kill the tiger<br />
Stage 5 - shake (like a bird!)<br />
Stage 6 - hit the 5 with shuriken<br />
Stage 7 - use the flame to fire up the candle. The candle goes in inventory. Use it to see the Chinese numbers. This is an equation!<br />
Stage 8 - use shuriken on jar for key.<br />
Stage 9 - swipe left and right to move panels away, then swipe up when you see the arrows.<br />
Stage 10 - enter the numbers on the bottom side of the dice. Opposing sides of dice always add up to 7.<br />
Stage 11 - shake to get the key. unlock chest for a brush. paint the eye on the daruma doll.<br />
Stage 12 - use the shuriken to bring the ropes on the sides down. Pull ropes in order 1 2 3 4 5 4 3 2 1. (Thanks, Angela!)<br />
Stage 13 - click each clock dial so it resembles the corresponding "screw" on the fan.<br />
Stage 14 - flip your device upside down and tap the X (I think) 9 times.<br />
Stage 15 - take the brush and brush away all the black marks. I had a hard time distinguishing when all the black was gone, it took me several tries to get it.<br />
Stage 16 - Touch the screen to bring the spiders down, then use the shuriken to kill them in the order indicated.<br />
Stage 17 - move the candles around so there is the indicated quantity in the box.<br />
Stage 18 - turn your device upside down to show 3 0. Shake it to get an arrow. Tap the circle 3 times.<br />
Stage 19 - take the bucket and use it on the branch.<br />
Stage 20 - 704. I brute forced it, so I don't have an explanation for that number. (Edit: apparently the symbol on the banner is supposed to be *, as in multiply, so 88 * 8.<br />
Stage 21 - slide the panels to the center in the order shown.<br />
Stage 22 - take the hook from the left and, using your sword, the rope on the right. It will automatically combine into a grappling hook to use on the ring.<br />
Stage 23 - take the bucket and put the fire out. EZPZ<br />
Stage 24 - Is a little like Simon. Press the 2nd button and a snake (or garden hose?) will pop out from the hole above it. Press the 2nd button again and 2 snakes will come out. Pay attention to which hole and the order, and press the corresponding buttons to get 3 snakes. Once you've gotten all 4 snakes the ladder will come down to exit.<br />
Super spoiler:<br />
2 | 2 | 1, 4 | 3, 1, 2 | 4, 2, 1, 3<br />
Stage 25 - Select the fire tool and shoot the first tube. This will show you which colors to select out of each group of 3 buttons.<br />
Stage 26 - place a red eye on each of the dragons. Swipe them away, then swipe the wall again to get the stairs.<br />
Stage 27 - arrange the sliders to match the heights of the yellow ovals.<br />
Stage 28 - shake your phone to see the symbols on the top of the wall. Click the panels to match.<br />
Stage 29 - use your fire to start the torches, then pull on the rope. Enter the number shown.<br />
Stage 30 - First, the banner shows 2 arrows. Swipe simultaneously using 2 fingers from the center to the edges, i.e. your left finger starts left of the center and swipes to the left edge, and your right finger starts right of center and goes to the right edge. If you've done this correctly, the banner should change to a left arrow. After this, using the same positioning for the swipe -- from the middle outward -- swipe as follows: L L R L L R R L R R. If you mess up it will go back to the 2 arrows and you have to start over again.<br />
Stage 31 - Select your sword and tap on the screen. Arrows will start flying out and your job is to slice them. If you manage to slice them all (they will disappear instead of flying offscreen) you get to the number safe. Code is 332 (again brute forced; no obvious clue except the arrows, which I was unable to count while slicing them).<br />
Stage 32: shake your phone<br />
Stage 33: place the bars on the rack in rainbow order, starting with red at the top.<br />
Stage 34: tilt your phone so that the west arrow points north, then enter the directions.<br />
Stage 35: shake your phone, take the purple ball and place it on the hole. Press the button.<br />
Stage 36: shake your phone to make the warrior go away; shake it again to return with a key. Take the key & shake again to put the key in the lock<br />
Stage 37: the sage advises peace :) set your phone down and wait.<br />
Stage 38: click the circles from small to large.<br />
Stage 39: Shake your device to expose the letters EVE on the banner on the right. The code is a date, the eve of a holiday celebrated nearly worldwide. It seems this has to be the first number you enter, so if you tried others already, restart the level.<br />
Stage 40: touch the small square to the left of the screen to show the code.<br />
Stage 41: swipe the screen in the direction indicated by the deer.<br />
Stage 42: take the gun. Tilt your phone to the left and shoot the ninja.<br />
Stage 43: hold your finger on the thermometer until it gets to the top.<br />
Stage 44: use your sword and slice the painting, then tap the button.<br />
Stage 45: drag the ball to the hole, then flick the arrow in the direction indicated to get a key.<br />
Stage 46: keep "pulling" (flicking) down the corner that hangs down until the screen is torn down.<br />
Stage 47: Turn your device upside down and click the button on the floor. Then turn it right side up and click the button on the wall.<br />
Stage 48: Shake your device to get the blue ball to drop from the banner. Drag it to the first oval "counter" on the floor. Click the 1st counter once (so there is one star/dot showing), click the 2nd counter once, and the 3rd counter 3 times (3 star/dots).<br />
Stage 49: Turn your device upside down 3 times to light the first 3 candles, then shake for the last.<br />
Stage 50: Tap the figure on the right. There are 3 hotspots that will light the candles, mostly on the left side of the figure.<br />
<br />
<br />
<br />
<br />
I got frustrated with this because the game does not save my progress (Nexus 7, currently Android 4.4.2, but it wasn't saving in the earlier version either). Hopefully someone else will be able to finish since it's a pretty nice game.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com7tag:blogger.com,1999:blog-7381128442147942377.post-87472863891220413012013-07-30T19:56:00.001-07:002013-09-15T15:33:21.241-07:00Tesshi-e game: Escape from Mr M's Room.This is gonna suck, cos it's a paid game, which means none of the usual ETR players are around to help.<br />
<br />
Then again, it sucks that the people who would pay for Tesshi-e's very high quality games are very few. She's put out 88 free games, everyone loves them and she gets 4 and 5 stars very consistently, but when it comes to paying a pittance (231 yen = appx $2.35, 1.75 euro, you can't get one cup at Starbucks for that), no one's stepping up to the plate. I've even seen people say "I never pay for a game on principle" -- what principles, pray tell, are those?<br />
<br />
Anyway. This is not a walkthrough but just notes I took while playing, which make decent hints.<br />
<br />
There are a ton of clues. I've found a TV remote, a slingshot with no ammo, a piece of paper, and a bottle opener.<br />
<br />
The TV got me a slingshot. The TV displays a green man puppet on 2 different channels, and the positions he stands in correspond to the 4 buttons where the actual puppet is sitting. Just concatenate those two sequences and you have the answer.<br />
<br />
The 3 Mr Birdys on a 3-letter safe correspond to the pillows of the same colors. Each Birdy has a number. That corresponds to a letter in the word on each pillow. That got me the corkscrew. I sure could use a bottle of wine right now, but I haven't found one yet.<br />
<br />
Ah. totally missed seeing a bottle to the left of the TV. A knife now, and with it a spade key, and with that the SD.<br />
<br />
Took me a while to assemble the equation for the 4 digit box. You have to cut the paper and place it over each of the pictures on the wall, then reorder the shapes. You get the equation 16 x 5859 / 12, which is 7812.<br />
<br />
Used the camera to flash into the dark space. There's a picture showing which corners to click on the rotating picture, and a key. Key gives a handle (box under the sofa).<br />
<br />
Handle used on the machine on the floor. Got a ball. Ball goes in the slingshot for a windup key.<br />
<br />
Windup key used on the akebekos, 231133, used in turn on the other akebeko. Have a key.<br />
<br />
Opened the panel above the bed. Using the card-suit panels I get equations for their value. Also used the cork to slingshot the last panel high up above the sofa. Now I've got more math to do.<br />
<br />
Got the equations; they need to be arranged in the same vertical order as the pictures.<br />
<br />
Happy coin: check the key.Andreahttp://www.blogger.com/profile/00029148001391627760noreply@blogger.com6