AppOps PH: machine learning for whale-shark identification
Tourist photos → usable flank views → match against named individuals. Repository, Medium draft and portfolio.
From whale-shark photo-ID and multilingual tourism chatbots to diffusion, a ChatGPT hackathon in Riyadh, gaussian splats and AI-generated 3D. Applied, hands-on and usually pointed at the Philippines, the Gulf or London.
Prelude: a 2008 paper on a time-adaptable mobile GUI, cited five times. Google Scholar lists the research interests as personality, machine learning and computer vision.1
This is a working history of how one practitioner has used machine learning since 2016: not as research, but as a tool pointed at specific problems in specific places. Those places are a whale-shark site in southern Cebu, a ferry port in northern Cebu, a hackathon floor in Riyadh, reefs off Mactan and building sites in London.
The work moves through the same sequence the field did. First comes classic computer vision on labelled photos. Then intent-based chatbots built before large language models. Then diffusion images in 2022, LLM applications in 2023, and neural 3D: NeRF, gaussian splatting and image-to-mesh generation. The latest step is an AI model operating a 3D tool directly.
What stays constant is the input: messy, real-world data made by ordinary people. That means tourists' photos, Messenger enquiries typed in three languages at once, drone frames and candidates' interview answers. Most of the effort goes into turning that material into something structured enough for a model to use.
Everything below is sourced. Where a source is thin, for example a post title with no public body text, the page says so instead of filling the gap.
Computer vision for conservation, and maps for accountability.
The first machine-learning project began with photos tourists were already taking anyway.
Oslob, on the south-east coast of Cebu, is one of the best-known places in the Philippines to see whale sharks up close. Every visit produces thousands of photographs. Under the App Ops name, the 2016 project set out to analyse those tourist images and identify the individual sharks in them. A short draft on Medium describes it as “analysis of images (tourists photos) leading to identification of individual whale-sharks in Oslob, Philippines”. It notes that the data later moved to Kaggle in 2018 and became a dataset on Roboflow in 2023.2
Whale sharks carry a pattern of pale spots and stripes that is unique to each animal and stable over years. Researchers treat the area just behind the gills, on the flank, as a natural fingerprint. A new photo of that area is compared against a catalogue of known individuals. Pattern-matching algorithms first developed for star fields in astronomy have long been used to automate the comparison. Long-term studies in the Philippines use exactly this method to estimate how many sharks return to a site and how loyal they are to it.
The project's public repository, created in April 2018, is described as “data and techniques for optimal pattern recognition. Whalesharks in Oslob, Philippines.”3 Its structure follows the photo-ID workflow:
The topside folder points to the real difficulty. Tourist and drone photos mostly show the shark from above, while the classic ID area is on the flank. Any useful pipeline has to sort usable frames from unusable ones before matching can start. That is a curation problem as much as a modelling one.
App Ops itself was a small mobile and data studio. Its Behance portfolio covers visual identity work and disaster and livelihood apps for Bantayan Island after Typhoon Haiyan.5
The same year produced a very different dataset. In December 2016, a LinkedIn article titled “Mapping frequency of extra-judicial killings in the Philippines' president war on drugs. First 1000 victims.” plotted the early months of the anti-drug campaign.6 It drew on the Philippine Daily Inquirer's running “Kill List”7 and used Google Maps heatmaps and Fusion Tables to show where and how often the killings happened.
Google retired Fusion Tables in 2019, so the interactive layers no longer render. The article remains as a record of early civic data journalism: the same geocoding and heatmap skills, applied to accountability.
Tourist photos → usable flank views → match against named individuals. Repository, Medium draft and portfolio.
Inquirer “Kill List” data, Google Maps heatmaps and Fusion Tables.
Tourism chatbots in Cebuano, Filipino and English, built between Cebu and London.
Before language models could cope with code-switching, a chatbot had to be taught every way a traveller might ask “is there a boat tomorrow?”.
In 2018 Budots Media built a tourist-enquiry funnel on Facebook Pages using two tools: ManyChat for the visual conversation flows, including carousel cards that guide a user towards a trip to Kalanggaman Island, and Google Dialogflow for understanding free text.9 Dialogflow, Google's pre-LLM natural-language service, works by intents and entities. The developer writes example phrases for each thing a user might want, marks the variables inside them, and a classifier learns to route new messages to the right intent.
The year-end write-up spells out what made this hard in Cebu. Users typed in several dialects at once. A conversation might start in Cebuano and then mix in English, Filipino and shorthand such as “hm”, “prices” and “bayad”.9 The response was data work: lists of real sentences compiled to train intents and entities, including composite, two-variable entities.
The training files are public. A repository under the Philippines Tourism Company organisation states that its “sample sentences are messages in Filipino, Cebuano and English sent initially by the Users (Facebook Page + Facebook Messenger)”.10 One folder is built around Hagnaya Port, the ferry link between northern Cebu and Santa Fe on Bantayan Island. Its examples read the way people really type:
“Is there a trip to bantayan already?” · “SantaFe to San Remigio” · “naa ba byahe sa masbate para hagnaya?”Real user enquiries used as Dialogflow training data10
The rest of the repository sketches a small tourism ontology: entities for cost, route type, unit of time, venue access and venue categories from accommodation to eating out.10 A separate December 2018 log shows the failure mode it was guarding against. On 25 December 2018 the Tagalog query “Paano maglakbay mula” (“how to travel from”) fell straight through to Dialogflow's Default Fallback Intent.11
The surrounding repositories show the parts that make a chatbot shippable. There are ManyChat flow samples, including restaurant and calendar patterns.12 There is a tour-planner flow diagram for the Hagnaya ferry route,13 and a standard privacy policy and terms of service written with EU GDPR in mind.14 The write-up also mentions curating Japanese, which uses a different character set, and records that a “Cebu Chatbot Meetup” was organised in Cebu City in December 2017. That meetup was billed as the first chatbot-developer and call-centre-automation meetup there.9
A quieter thread runs alongside: personality and matching. Google Scholar lists “personality” as a research interest,1 and a Dribbble study maps personality descriptors as a graph.8 In October 2018 a public repository of anonymised OkCupid profile data was forked; it holds 59,946 San Francisco profiles from 2012 plus code to compute the reading level of text.15 In December 2018 a separate repository collected OkCupid's match questions, with answer options and response counts.16 The pattern is consistent: questions, answers and a score. It comes back five years later in the hackathon.
Intent and entity training sentences in Filipino, Cebuano and English, Dialogflow agents, ManyChat flows and legal templates.
Diffusion as satire, and entity data as infrastructure.
Stable Diffusion's public release in August 2022 put image generation on ordinary hardware. Within four months it was being used for political satire.
A diffusion model learns to reverse a gradual noising process. Trained on images that have been progressively blurred into static, it learns to remove the noise one step at a time, steered by a text prompt, until a picture emerges. Early open models were famously unreliable with faces and hands, and that imperfection is the point of Kingdom of Diffusion (December 2022). In its own words, the aim was “to illustrate the absurdity of certain situations through the concept of ‘diffusion’ imperfect characters resembling public people in the criminal spotlight in the Philippines.”18
The series takes on Pastor Apollo Quiboloy and his SMNI media network. The essay places it in a Philippine media landscape where charismatic religious and political figures command followers who “tend to accept and propagate their messages without critical examination”. A later update notes the US federal warrant and his arrest in Davao in September 2024.18 The model's tendency to distort is used deliberately: the faces are close enough to recognise and wrong enough to read as commentary.
August 2022 also produced a small repository with a long life ahead of it: a reference for Google's Knowledge Graph Search API.19 Inside is a schema.org Person record in JSON-LD. It declares a name and alternate name (Bart / Bartosz Sakwerda), affiliations with Budots Media and the Philippines Tourism Company, education at University of the Arts London and London College of Communication, and a long sameAs list tying together profiles across GitHub, Dribbble, Behance, Medium, Stack Overflow and more. Next to it sit the schema property reference and a multi-author markup example.19
This is entity engineering. Search engines build knowledge panels from exactly this kind of structured, cross-linked data. The same disambiguation, telling one person with two first names apart from everyone else, matters even more now that AI assistants answer questions about people from what the web asserts about them.
schema.org Person and multi-author JSON-LD, with a property reference.
An LLM build in Riyadh, then NeRFs, gaussian splats, virtual try-on and open datasets.
OpenAI opened ChatGPT's underlying model, gpt-3.5-turbo, to developers on 1 March 2023. Seventeen days later, a three-person team in Riyadh had a hiring tool built on the GPT-3.5 family.
The timing is the story. ChatGPT had launched only at the end of November 2022, and GPT-4 was announced on 14 March 2023, four days before the hackathon's listed date. Teams were building on models days or weeks old, with no established patterns for prompting, scoring or deployment. In a December 2024 retrospective on the events that most shaped the aerial and 3D practice, “2023 CHATGPT 3.5” sits on the list next to Typhoon Haiyan and the first gaussian splats.20
هاكاثون ChatGPT السعودي
Tuwaiq Academy ran the first Saudi ChatGPT hackathon in Riyadh as a national competition. Its themes were education, society and sustainability, and its focus was AI and natural-language processing. Participants worked with experts and were introduced to tools such as the Whisper API and ChatGPT. Aramco's Arabian Sun put the field at more than 650 participants in some 250 teams.2223
The team's README states the problem plainly: “Assessment of the candidates is a resource consuming task. Often requires senior members of technical teams to be pulled off their normal job to help assess candidates.” It adds that rejection rates for candidates are often above 75%.21 The aim was to take the first screening round off engineers' desks.
The repository is a complete Django application, and its code shows the flow:21
The two prompts are short. The generator asks for N interview questions “for job conditions of” the given title. The rater asks the model to return a single integer:
Rate the following answer of this question from (1 to 10),
then return the rate as integer. If the answer is empty rate it 0.
Question: {question}.
Answer: {answer}.
The main path calls OpenAI's text-davinci-003, a GPT-3.5-series model. A second module sends the same request in chat format to gpt-3.5-turbo through Vectara's endpoint.21 The README sums up the product: “ChatGPT generates relevant questions instantly. Our solution analyses written or voice answers of the potential candidates.” The intended users are any business that needs to hire fast, from hospitality to engineering.21
The repository was created on 16 March 2023 and last updated on 18 March, so it was a two-to-three-day build.21 It is an early example of what the industry now calls LLM-as-judge: one model call generates the material and another grades it. Its limits are the familiar ones. A bare 1–10 integer with no rubric or rationale is hard to audit, and scores depend on wording. It also anticipates the design questions that hiring-assessment tools now face as standard practice.
In this body of work it closes a loop. The 2018 chatbots routed free text into intents. The OkCupid-era interest was in questions, answers and a score. In 2023, a language model did both jobs at once.
Built with Abdulrahman AlAzwari and Adel AlRumithah. Python/Django, hosted on DigitalOcean.
While language models took the headlines, 3D reconstruction was changing just as fast. Neural Radiance Fields (NeRF) learn a scene as a continuous field of colour and density from ordinary photos. 3D gaussian splatting, published in 2023, represents the scene as millions of small, semi-transparent ellipsoids that render in real time. Both start from the same input as drone photogrammetry, overlapping images, but produce photoreal, navigable scenes instead of measured meshes.
The aerial side of the practice adopted them early. A December 2023 post shares an aerial NeRF processed with Luma AI, described as “one of my first aerial captures, year ago as Aerial Data Ops”.24 Notes from a 2023 stay in Riyadh cover drone capture, NeRF and photogrammetry together.25
By December 2023, splats had become a working tool with defined uses. One post sorts them into three practical cases.26 The first is engineering, including a 3D record of fire damage in Barangay Pusok, Lapu-Lapu City. The second is tourism: travel planning and hotels. The third is marketing, illustrated with a tennis player captured in Dubai. A companion essay turns to marine biology. Off Cebu and Mactan, a diver with a camera swimming an orbital path around coral can produce a splat. The essay argues that splats “can be a viable alternative to photogrammetry when working with the coral”.27
The same month, generative image models arrived in fashion. Alibaba's OutfitAnyone showed zero-shot virtual try-on: putting a garment onto a different person's body with plausible pose and cloth physics. Budots Media used it for a technology demonstration built around an original dress design by Michelle Dee, a Filipina model and Miss Universe 2023 finalist. The design is a complex meshed dress referencing traditional Philippine tribal tattoos.28
The post is candid about the earlier route: fitting the dress as a Snapchat AR filter with full-body tracking was “suboptimal”. The diffusion approach looked “more practical and fitting, offering easier implementation for e-commerce websites and fashion retail”. The post expected scanning and generative 3D to merge with it “in the coming months”.28 That prediction leads straight into the 2025 chapter.
The year also produced open artefacts. In September 2023, an Observable notebook segmented and counted objects in aerial photographs.29 In December 2023, an MIT-licensed image dataset of the Mactan Shrine in Lapu-Lapu City was published on Hugging Face.30 Hugging Face collections began the same month: gaussian splatting and NeRF, drone imagery, generative diffusion and virtual try-on.31
Aerial NeRF via Luma AI, Riyadh captures, and splats for engineering, tourism, marketing and reefs.
Zero-shot try-on of an original meshed dress, compared with a Snapchat AR approach.
Image-to-mesh pipelines and a curated library of models.
By 2025, a single picture could become a textured 3D model in minutes. The remaining problem was whether anyone could use the result.
An October 2025 post tests Tencent's Hunyuan3D generator on a demanding subject. An isometric image of a ‘Stryker’ infantry fighting vehicle became a low-poly model of about 50,000 vertices.32 The post publishes both versions on Sketchfab. One is the raw triangular output; the other has been converted to quads, with the change “visible ie on the tyres”.32
That conversion is the professional detail. Generative 3D models output triangle soup: dense, irregular triangles that look fine in a render but are awkward to edit, subdivide, UV-unwrap or rig. Artists and game engines work with clean quad topology. The title pairs triangle-to-quad conversion with segmentation transformers, models that split a mesh into meaningful parts. Together they describe the step that turns a generated object into a usable asset.
The Hugging Face profile lists its interests as vision, geospatial and video, and holds more than twenty public collections.31 Read as a set, they map the practice:
The language collections line up with the places the work has happened.3334 Cebuano and Tagalog are the languages the 2018 chatbots struggled with. Arabic is the Gulf. Polish appears in the nationality field of the Knowledge Graph record (“Polish / UK”).19 The fire-and-smoke shelf echoes the fire-safety and damage-survey work. The 3D generator shelf35 is the toolkit behind the Hunyuan experiment. These collections read as working notes on which open models might solve which client problem, not as a fan's bookmarks.
One isometric image → a ~50k-vertex mesh, published on Sketchfab in both triangular and quad form for comparison.
Language models that operate creative tools.
In April 2026 the two halves of the practice met: drones and language models.
A LinkedIn post from 30 April 2026 is titled “Blender + Anthropic Claude test 1000 drone show sequence management”.36 The public page shows only the title, not a full write-up, so the details of the setup aren't documented here.
The problem itself is well defined. A drone light show is choreographed as 3D animation. Every drone is a point that must move from formation to formation along paths that keep safe separation and respect speed and acceleration limits. Blender is a common place to author these sequences, and it exposes a full Python API. That is what makes the experiment possible: a model like Claude can read a scene, write and run scripts against it, and manage a sequence of a thousand objects. A person would otherwise keyframe them by hand or with bespoke tooling.
The test sits at the end of a clear path. The 2016 project needed a person to label every photo. The 2018 chatbots needed a person to write every training sentence. By 2023 a model could write the interview questions. Here, the model is operating the professional tool itself.
gemini3-budotsmediaphilippines-website (December 2025) and budotsmediaph-202606-fable5 (July 2026).37 The folder this page was built in follows the same convention.An LLM driving a 3D tool to manage a large drone-show sequence.
On the surface the projects jump between fields. Underneath, the same three-step pattern repeats.
None of these projects began with a purpose-built dataset. Whale-shark ID started from photos tourists were taking anyway.2 The chatbots were trained on enquiries people had actually sent to a Facebook Page.10 The splats come from drone or diver footage that would have been shot for other reasons.27 The hackathon tool turns ordinary interview answers into scores.21 The skill on display is recognising that a valuable dataset already exists in the wild, and then doing the unglamorous work of curating it.
Each era has its own middle layer between raw input and model. For whale sharks it is the pattern area: which part of the body counts, and which frames show it. For chatbots it is the ontology of intents and entities: routes, costs, times and venue types. For 3D it is moving from triangle soup to quads and parts. For the hackathon it is the prompt pair that turns open-ended answers into a number. As models have improved, this layer has moved: from labels, to training sentences, to prompts, to tool calls. It has never disappeared.
The outputs are aimed at operators, not papers: tour bookings, ferry questions, hiring rounds, fire-damage records, reef documentation, a show sequence. The places stay fixed even as the methods change: Cebu and Bantayan, Riyadh, London. That is why the model library is organised by language and use case rather than by benchmark rank.31
Read in order, the chapters trace how the human role in applied AI has changed. In 2016 a person labelled photos for a model. In 2018 a person wrote example sentences for a model. In 2023 a person wrote prompts. By 2026, a model operates the tool while the person sets the goal and checks the result. The constant is knowing the place and the data well enough to judge whether the output is any good.
Photographs and renders from his own posts on bartsakwerda.com. Open one for the full image and its source.
Most of the work on this page comes down to splitting a space into regions and deciding what each region means.
A nearest-neighbour classifier, or a vector search over embeddings, splits its space into Voronoi cells: every query belongs to the stored point it is closest to. Image models make the opposite move. They cut a picture into tiles and summarise each one, and an adaptive split spends more tiles where there is more detail. The two canvases below make both ideas tangible. The first partitions the plane around moving sites. The second rebuilds Sketchfab captures from this portfolio out of mean-colour rectangles as you move across them.
Move to steer the bright site; click to add a site. Cells are drawn as smooth Bézier loops through their edge midpoints, as in the original example.
For sites \(p_1,\dots,p_n\), the cell of \(p_i\) is every point that is at least as close to \(p_i\) as to any other site:
\[ V(p_i) = \{\, x \in \mathbb{R}^2 : \lVert x - p_i \rVert \le \lVert x - p_j \rVert \;\; \forall j \ne i \,\} \]That is the decision region of a 1-nearest-neighbour classifier. Its area comes from the shoelace formula over the cell's vertices:
\[ A = \tfrac12 \Bigl\lvert \sum_{k} \left( x_k y_{k+1} - x_{k+1} y_k \right) \Bigr\rvert \]The glow is a Gaussian of distance to the pointer. Its derivative is steepest at \(d = R/\sqrt2\):
\[ g(d) = e^{-d^2/R^2}, \qquad g'(d) = -\frac{2d}{R^2}\,e^{-d^2/R^2} \]Euler's formula forces the average number of neighbours per cell toward 6 in a large diagram.
Move across the image to split the rectangle under the pointer. Images are thumbnails of models on Sketchfab.
Each rectangle \(R\) shows the mean colour of the image \(I\) beneath it:
\[ \bar c(R) = \frac{1}{\lvert R\rvert} \iint_R I(x,y)\,dA \]Touching a rectangle splits it in two along its longer side. A rectangle at depth \(d\) therefore covers
\[ \lvert R_d \rvert = \lvert R_0 \rvert \, 2^{-d}, \qquad L = 1 + s \]where \(s\) splits leave \(L\) rectangles. Within each rectangle the picture is a constant, so the approximation error is the variance that the mean leaves behind:
\[ E = \sum_{R} \iint_R \lVert I - \bar c(R) \rVert^2 \, dA \]This error falls fastest where you split detailed areas, which is the idea behind adaptive tiling in image models.
Before any of the models came maps, and the habit has stayed.
A 2019 essay recalls arriving in the typhoon-hit Philippines in 2014 with only crude A4 ink printouts, made in a hurry in Thailand. It also recalls realising that a disaster zone would offer no electricity, printers or internet.38 Since then the archive has grown: shapefiles and layers for Southeast Asia, Himawari-8 weather-satellite imagery, isometric city maps, and vector maps built for animation in After Effects. There is also a 2015 tourism map based on Google Terrain, captioned “Crude conditions in a small town with only ink printer.”38
The tourism data products build on that archive. There is an interactive app on international arrivals to the Philippines,39 along with Observable notebooks comparing ASEAN arrivals in 201940 and charting international visitors to Saudi Arabia during the 2023 Riyadh stay.41 Twelve public notebooks sit on the Observable profile.42 In 2025 a React and TypeScript prototype of a student-assessment platform for the Philippines added education data. It opens with a comparison of the country's PISA performance.43
One measure of reach: a Reddit thread charting Philippine tourism arrivals from 2019 to 2024 credited the visualisation style to an earlier post.44
Interactive app on international arrivals to the Philippines.
Observable↗Pre-pandemic arrivals compared across Southeast Asia.
Observable↗Visitor numbers for the Kingdom, built during the 2023 Riyadh stay.
Observable↗Object segmentation and counts from drone imagery.
Medium · 2019↗Maps as a daily working tool, from a small-town office with only an ink printer.
GitHub · 2025↗React/TypeScript prototype opening with PISA performance comparisons.
Credits to Bart Sakwerda, since I saw this type of visualization from an old post.
r/Philippines: Distribution of Tourism Arrivals in the Philippines 2019–2024 ↗Numbered in order of first citation. Hackathon details come from the project's README and code; field size comes from Aramco's Arabian Sun. Background explanations of techniques (photo-ID, Dialogflow, diffusion, NeRF and splatting, mesh topology) are general context, not claims about this work.
AI consulting, generative media and 3D pipelines, and data products for tourism and geography.