Mika Tuupola

appelsiini.net · Personal blog · on HN since 2008

Mika Tuupola, a developer, writes about JavaScript plugins, web mapping, location services, and token formats.

What HN saysHN links it for his Jeditable jQuery plugin, which commenters call excellent and flexible, and his Apple location services reverse engineering.
19HN people shared it
14linked it in comments
8stories submitted
179story points
3 years agolast shared
2008people per year2026

Most-shared posts

  1. 1
    Lazy Load Plugin for jQuery
    10 people · 11 points · first shared 2010 · discussion on HN
  2. 2
    Reverse Engineering Apple Location Services Protocol
    3 people · 162 points · first shared 2017 · 10 comments on HN
  3. 3
    Jeditable
    2 people · first shared 2009
  4. 4
    Google maps without javascript
    2 people · first shared 2016
  5. 5
    Using Branca as an Alternative to JWT?
    1 people · 2 points · first shared 2017 · discussion on HN
  6. 6
    WiFi Trilateration with Three or More Points
    1 people · 2 points · first shared 2017 · discussion on HN
  7. 7
    Google Maps Without JavaScript
    1 people · 2 points · first shared 2008 · discussion on HN
  8. 8
    Google maps without javascript part 2
    1 people · first shared 2016
  9. 9
  10. 10
    Enabled fadein
    1 people · first shared 2010
  11. 11
    Decentralized social media
    1 people · first shared 2024

What HN people wrote when they linked it

tuupola · 2024-03-25
I have also been pondering with similar idea. Instagram and Twitter style services could be created with an RSS or RSS-like file format. Biggest problem is content discovery, but the Internet has traditionally solved discovery problem by itself. https://www.appelsiini.net/2021/decentralized-social-media/ RSS was really great and still is. I still read my blogs using it and ignore the ones which do not offer a feed.
dpnewman · 2009-08-24
http://www.appelsiini.net/projects/jeditable used it several times... excellent; flexible.
luketaylor · 2023-12-21
Not an exaggeration—Apple’s primary “location services” API, used on iOS/macOS, is just a lookup table for wireless APs’ MAC addresses. [1] WiFi scanning is much less power intensive than GPS, much more reliable indoors, and often (in dense areas) more accurate even outdoors. iirc the iPhone only connects to “real” GPS in specific situations, such as when visible wifi signals are insufficient (e.g. highway driving). [1]: https://www.appelsiini.net/2017/reverse-engineering-location-services/
rm_-rf_slash · 2016-02-05
Not bad, reminds me of the functionality I get by mixing DataTables(1) and Jeditable(2). I might take a look at this and see if I can work it into any of my current projects. (1) https://www.datatables.net (2) http://www.appelsiini.net/projects/jeditable
userbinator · 2016-01-09
The interface would be slightly different but there's no reason why an interactive map viewer couldn't be done in pure HTML and CSS without JS, and then JS added for more enhancements like AJAX loading. In fact... it's been done eight years ago: http://www.appelsiini.net/2008/google-maps-without-javascript http://www.appelsiini.net/2008/google-maps-without-javascript-part-2 Look at where the map images are coming from, copy the link, and play around with the URL parameters. Yes, this still works. I also distinctly remember playing some HTML adventure games with similar pan/zoom/click interfaces before the millenium, and they didn't require JS either (nor took quite as long as the apps of today to load, on hardware that was probably an order of magnitude or more less powerful.)
kellros · 2013-06-26
You can google for JavaScript image lazy load http://lmgtfy.com/?q=javascript+jquery+lazy+image+load You can also check this out, it seems pretty spot on: http://www.appelsiini.net/projects/lazyload
bherms · 2011-01-20
You're thinking of lazy load. He's talking about something different. If you were wondering how to do that, though, here is a link http://www.appelsiini.net/projects/lazyload
terryjsmith · 2010-09-08
Just look into lazy loading. Google image search is doing it, as it Facebook now as far as I can tell. Basically all of your images on one page and you load them based on the user's scrolling and what's visible. There's a plugin available from jQuery that can help get you started: http://www.appelsiini.net/projects/lazyload
Zandikar · 2021-07-06
You mistake everyone using javascript to do those things as the only way it's possible to do those things. That's certainly not true. You can use HTML, Canvas, and CSS to do just about everything you mentioned. Video is easy. In pure HTML: <video autoplay loop muted playsinline src="..."></video>. No Javascript (or even CSS) required. You can certainly expand on that as well. Google Maps does not require Javascript to provide it's core and common functionality either: https://appelsiini.net/2008/google-maps-without-javascript/ You would have to make some changes, but core functionality still exists. Github does not require Javascript to function. You can toggle JS off and still use it pretty much as is, and the features that do break are trivial to implement without it. Interactive realtime chat does not require javascript. https://github.com/kkuchta/css-only-chat , and the same principals can be applied to online docs and editors as well. Javascript is the norm because it has inertia behind it - largely due to circumstance more than any inherent natural benefit, not because it has some secret sauce that the internet needs that couldn't be easily replaced should it be Thanos-meets-Tron-Crossover Snapped out of existence. A much stronger argument in favor of Javascript would not be pointing to all the good things you can do with it, but rather, with how well and optimized and streamlined doing those things with Javascript is these days. Just to clarify, I'm not saying…
niyazpk · 2012-04-26
Here are a few that were not mentioned: - If you have a lot of images like in a product catalog, try lazy loading the images - http://www.appelsiini.net/projects/lazyload - For sprite-ing your images, use some tool which will automatically generate the css for you: http://spritepad.wearekiss.com - Have a git commit hook for compressing images. (It could be part of your build, but then you are doing the work every time and the build will be slow if you have a lot of images.) - If you are using LessCSS or something similar (hint: you should), have your compiler compress the css for you. - http://wearekiss.com/simpless - Have multiple hosts referring to your CDN to facilitate parallel downloads in the browser. - Compress your HTML too before deploying - http://code.google.com/p/htmlcompressor/ - Have proper versioning in the name of your JS/CSS files and then cache them for ever. Whenever you change your files, the version should change and only that file will be updated in the client. We normally take the hash of the latest git commit on that file: cookie-wrapper.js -> cookie-wrapper.bb9303b809210674.js - Offload whatever you can from your cookies to localStorage or things like that to reduce request size.

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close