Hacker Newsnew | past | comments | ask | show | jobs | submit | PennRobotics's commentslogin

I just tried on a microcontroller target.

Some instructions cause a ghidra.pcode.exec.PcodeExecutionException but can be manually skipped.

I can get to the same stopping points as a commercial simulator, but nothing is displayed in the Stack window in the Ghidra debugger and single stepping ignoring side effects (mostly for cpsie/cpsid/isb/dsb/msr/mrs op codes) takes 10 or 15 seconds for each skipped instruction. Watches on complex variable types (ListItem_t *) are clearly displayed wrong (value { 38 }) and I'd prefer watches to disappear when they're not in scope. I must be doing something wrong because I can step through the machine code but would prefer to step through each C++ line without using line-by-line breakpoints, and I don't know if that exists or how to set it up.

Right now, it's easier for me to use a commercial debugger/simulator; it shows the call history, variables are displayed properly once I import their structure, browsing SRAM is fast/intuitive, MCU peripheral registers are displayed/changed on a single screen with a few clicks or keystrokes (even after importing the SVD into Ghidra), op codes don't need to be skipped (so the processor handles the stack, privilege states, and core/system registers correctly).

Also, the default debugger windows in Ghidra are bonkers. The entire left side shows meaningless data. The right side has tabs for windows I'd like to see simultaneously (memory and decompilation). I'd also rather have multiple child windows for different memory ranges, since FreeRTOS and application variables are interspersed in the code but separated in RAM. The bottom panel is useless for me except for Stack (which is empty) and Watches. On a laptop, the whole UI is cramped. It's easy to change this, but I'd rather just have a useful workflow as an opinionated default.

When I can export what I've manually decompiled to DWARF, I'm more comfortable in a commercial Arm debugger than in gdb or anything that looks/feels like an Eclipse IDE debugger.

There's a lot of potential. That is obvious. I do wonder if I'm missing something; if changing the emulator/backend or the right tool setting will unlock nirvana. I also feel like I'm dropping the ball by not opening issues, but I'm sure there are plenty of Ghidra users trying to analyze Arm Cortex who have the same stumbling blocks as me but perhaps more free time.


I've been chipping away at recreating source for a dumped FreeRTOS binary for about a year using Ghidra and Trace32. (Disclosure: I work on Trace32.)

I wanted to implement something like https://github.com/neuviemeporte/mzretools (the tool for reversing F15SE, a DOS game) but I would need to port all of that tooling to an Arm cross-compiler and accept it will never produce a 1:1 binary in my case. (There's evidence the original was built with IAR which I will not be buying solely for a hobby project.)

Ghidra (especially after using BSim to load all of the NXP demos and some TI library code for adjacent ICs) is extremely useful at getting the entire structure: library functions, data types, tasks, queues, I2C/USB comm, pin setup, data locations, etc. You can re-code the flash part easily, but SRAM/stack is all zeros. The code that fills SRAM uses pointer math and some loops and is generally unreadable on its own. I tried the Ghidra simulator, but it didn't work out of the box on Arm microcontroller code.

Trace32 makes it easy to load the raw binary into an Arm simulator and step through all the way to the IDLE task, but there's no high-level listing. You just have to detect if you're in a loop and look at the loop address in Ghidra to see what holds you back. Without a simulation model (which I do not have---at least not outside of work) you have to manually jump past a few spots where the board waits for an acceptable status flag from a clock source, etc., and then manually call SysTick_Handler once, but the SRAM is eventually filled with appropriate data. Once you have a stack, you can start picking out which FreeRTOS macro parameters were set and figuring out the size and type of vendor-created structures which then streamlines further Ghidra analysis. Beyond that, you can't use RTOS awareness without symbols, so unless you write a script to import these from Ghidra, a more insightful view of the binary remains out of reach.

The analysis has been a LOT of looking back and forth between the simulator (which shows a hex address and machine code) and the Ghidra decompilation listing; it is a bit like getting Don Quixote verbally read to you, one letter at a time. Anytime there's a I2C_Master_Transmit(), you need to comb through datasheets for DSP settings and the various I2C-linked chip registers. It's a USB product (with multiple endpoints) so I use Wireshark and Python to check the decompiled USB application code and identify valid packet data that are never sent by the vendor software.

DWARF can be imported and exported in Trace32, so exporting symbols created in Ghidra as DWARF would vastly simplify my workflow (as would having a real model of the NXP chip and/or dumping the bootloader binary and secrets from a production device).

I'll definitely check out this project, as well as ghidra2dwarf linked by nneonneo.


I miss trace32.

I miss how everything is in its place.

I miss the number of times I've wondered if some functions could be combined and toy delight they worked wonderfully.

Just writing in to say I'm a fan.


Ugly. Goofy. Uninspired.

Awful color palettes and far too many shades of each hue. If the bluetooth icon is lit but the containing button is unlit, is bluetooth active or not? The icons are some of the worst ever; just a monochrome abstract mess. Of the 12 shown in the quick settings example, I cannot recognize 4 of them. Blurred background in the notification shade is worse than both a solid color or a fully transparent background. The former emphasizes privacy and information clarity; the latter doesn't interrupt whatever you're doing. Blurred means you can't refer to the app screen while looking at a notification but nosey passersby (or clever application of the right deconvolution on a screenshot) can get a general sense of what you were doing.

Too much padding. Alignment is often not thoughtful. Many of the shapes are just strange. The use of different border radii on adjacent elements---notably at 1:09, but also nearly everywhere else---is like a lazy eye or snaggletooth. The "Clear all" notifications button is too big (i.e. easy to accidentally touch) but also an uncomfortable aspect ratio. This is significantly worse on the watch.

Animations totally unnecessary and often not visually intuitive. (Wtf is that jellyfish circle progress meter at timestamp 1:03?) Not every user wants a "cascading droplet effect" or "springy animation" or "happy moments". It's visually noisy. Shape morphing is sea sickness via OLED. It's the kid who can't stop tapping a pencil on a desk and loudly coughing up phlegm all day.

Font is informal and overused. The variable font has more than 10 axes and becomes unreadable at the extremes.

I predict there will be two camps: the developers who don't change their apps at all and those that lean too heavily into this ridiculousness. There will be virtually no tasteful Material Expressive apps.

The promise is "customizable", but it's not USER customizable. You're at the mercy of each app developer. You can't change those awful notification buttons, overly rounded dialogs, bubble images EVERYWHERE.

And it's always so ... busy. I want my most used portable appliance---my vessel of knowledge, communication, and productivity---to just stay still and quiet and do the tasks I request without trying to affect my emotional state and distract me with its unnecessary wiggling and weaving, less identifiable icons, inefficient presentation of info, and irritating nested clickable elements.

Complaining about it is pissing into the wind. Google has committed far too much in this newest terrible design evolution to try something wildly different and actually bold (a la Guardians of the Galaxy) or to return to a simple & timeless no-frills appearance, and there are plenty of users who can't get enough of the "Easter-colored cooked pasta taped to a leaf blower nozzle" aesthetic.

In other words: I don't like it.


I'll cover just a few taste-based issues:

- The abstract doesn't even fit on the first page at a 1500 pixel height. Instead, the generally useless, overly-padded animation takes the majority of the space.

- The animation felt like someone trying to fit every feature of their design software into eight seconds. Filleted text? A nine-sided polygon that morphs into a five-sided polygon and then a circle? That hideous purple-orange flare?

- I'm shocked the animation and images didn't also have border radii. I wouldn't mind one bit if border radius was fully removed from every single website and smartphone app. (Border radius as a mouse hover animation for 186.667 pixel square images, in the hamburger menu? Wtf)

- Hamburger menu is too resource intensive and feels off-center because of two paired columns, where the right side of each pair is an image.

- It was certainly a design choice going with:

    Better, Easier, Emotional
    UX
I think I would've preferred ANY other permutation of line breaks, except for

    Better,
    Easier, Emotional UX
and

    Better,
    Easier, Emotional
    UX
- I'm glad the font doesn't show up on Firefox. I hate ligatures in nearly all their usages and don't need a font with a dozen variable axes. (Having such a font face for testing new font designs? By all means. Putting it out there for the world to use? Ugh! WHY??)

- Why are designers so repulsed by pure colors e.g. FF0000, 00FF00? (I know the philosophy because it's the previous post of the linked content on their design blog, but I vehemently disagree with the application of "sober" or "nostalgic" or "atmospheric" mood-altering color schemes.)

- The color choices are awful. It's inspiration by pastels and flowers. It's no surprise, since Google's offices seem to be furnished by Liberator and the Sherwin Williams branch of Lockheed.

- The demos are bogus. It's easy to offer mud and polenta to a test panel and then exclaim that users overwhelmingly prefer polenta. What's with the Plank app? Are people planking for hours? But also, who presents time in...

    HH
    :MM
    :SS
...format??

- . . too . . much . . padding . .

- EXCEPTWHENITSNOT

- two-column images are misaligned vertically because of the scroll animation

- fading in elements. WHY??

- elements shift vertically after clicking them

- elements do not indicate they are clickable

- "Expressive components" on one of the links is so atrocious because of its misuse of color (with further submisuse of hue, contrast, intensity, saturation, and palette), spacing, shape, margins, iconography, font, and words. I also don't know what app is supposed to have menu choices of "Friends, Alarms, Map" but I promise I am not the target audience.

- It's telling that multiple contributors of Material 3 Expressive have their profile pictures left-of-center so that the bridges of their noses are at the golden ratio. You don't need to bang every drum on every beat.

- Do charts really need "eight-petal flower" as marker type? Also, time to first fixation, for me, is usually "OH WHAT THE UGLY SHIT IS THAT?"

- Search menu? Ugly; not very clear why the dozens of buttons are there.

- One of the dumbest mouse cursors we've all encountered ("so far", per Homer Simpson) and that includes a generation of Comet Cursor and classic Mac cursors

- Each of the Components:

-- Button groups, ugliest I've ever seen because of different corner radii, tall rounded buttons, far too much padding, off-centered text

-- Floating Action Buttons, the cousin of checkboxes inside clickable list items, which have ruined the efficiency of the Gmail app

-- Segmented Button, for people who want the first and last tabs in a tab list to look not like the others! (I'm glad Post-It hasn't switched to exclusively rounded notes.)

-- Split buttons, obvious on the m3.material.io page but less obvious after it's the unmarked "customize" selector in the Android Settings menu. (If you don't know, on many adaptations of Android OS, SOME toggles have a nearly imperceptible divider left of the toggle, and if you click the text instead of the toggle, you get an entire submenu related to the toggle.) And does the inner divider of split buttons also need the slightest radius?

-- Loading indicators are the uncanny valley of shapes. Is it a Torx T20? A ouija board planchette? Oh, now it's a dented hub cap bumbling down the highway!

-- Progress indicators, certainly the least favorite of ophidiophobics and cold-hearted professionals.

-- Bottom sheets, less ugly but more likely to screw up gesture navigation & split screen while serving little purpose beyond what a separate view accomplishes.

-- Carousels and cards, so you can make every app feel like a teenager's (or pre-cash startup's) very first website.

-- Adding horizontal rules to Dialogs isn't necessary or helpful, it just adds visual noise.

-- Lists have a differently weighted and colored horizontal rule as Dialogs. Vertical margins should be less than horizontal.

-- Side sheets. You know you want your app to have both side sheets and bottom sheets!! Let the intrusive thoughts win... Also, is the arrow supposed to make the side sheet larger while the X closes it? Or do they both close it? And why not just swipe to close like the bottom sheet? And then why doesn't the bottom sheet have an X?

-- Too many navigation types, especially if the idea is to change between types (and information presentation) based solely on screen size as the descriptions suggest. The shown navigation types implement most of the details previously considered ugly: weird hues, too much padding, unintuitive and single-colored icons, mismatched radii, weird text (Outbox?) Also, why have "Saved podcasts" as an app heading when Google recently sunsetted (murdered) the fairly popular and remarkably usable Podcasts app?? Was the Stadia example rejected in the daily standup?

-- Too many unintuitive edit buttons on the Date Picker. Annoying that the demo shows a date range (poorly) while the large text at top is only the end date. How is a date range starting on Dec 31 and ending on Jan 2 supposed to be displayed if there's no longer a background color?

-- Sliders are not as ugly as possible, although they are inconsistent with Switches, the Date Picker indicators, Progress Indicators, and Buttons/Button Groups.

-- For something like a music equalization widget, it would be nice to have vertical sliders that can have their fill color origin in the middle. You end up spending more developer time creating a custom view than actually implementing EQ filters.

-- Time pickers are dumb as hell. There have been many examples of effective time pickers using text entry, swipes, or dropdowns. But still, Material 3 sticks to hybrid hard-to-click analog clock and "need more clicks and number/enter presses than necessary" digital clock which only really works nicely screens 7 inches or larger. Six different curve radii in that design, and they aren't matched to the scale of the containing element.

-- By showing the full extent of the animation/motion customization as the top examples, a whole generation of graduating CS majors is going to launch a fleet of nausea-inducing/overly animated/Jello text app content into the world.

-- "Abstract shapes" aka Material Shapes Library. Not a single example I've seen has been attractive or clean. I am surprised they didn't include an eye shape but totally unsurprised there are no sharp-cornered variants of the basic shapes.

--- Shape morphing: when you want your buttons to look like they're dry heaving and/or being crushed by a hydraulic press. The suggestion to link the exact morph to device sensor inputs and async events makes this idea worse.

-- Why does the circular arrow rotate in the opposite direction? If you made road signs animated and then made the symbol for a right-only roundabout (CCW) rotate so the entrance at the bottom always shifted to the left (CW) ... how many accidents a day would you expect compared to baseline?

-- They actually have the nerve to put "Use abstract shapes sparingly" as their entire design blog looks like GNOME 3 on mushrooms.

Oh, and someone mentioned how sweet it is that they can quickly Figma an app because of Google's unmatched component implementation. But have you also noticed how Google's UX has stifled creativity? As more and more companies (Philips, Spotify, Bitwarden, Duolingo, nearly all social media, shopping, banking, etc.) switch to Material Whatever, they ditch creative widgets and cool layouts. The original Hue app was a celebration of color with no OS-dictated whitespace and very efficient light setup workflow. The redesign is so complicated, most of my lights throughout my house now have no descriptive name in a single room called Whatever. Nothing looks like Tron. No major app has buttons/cards with sharp edges. The Shure apps have toggles and sliders that look nothing like a Crest audio console. Icons have to be carefully redesigned by each vendor to look equally "less dumb" while placed on a circle, rounded rectangle, or rounded rounded rectangles on a home screen (rounded twice intentionally, because that's what the largest seller of Android phones has as the default for home screen icon outlines).

- On these demos, entered text is often some shade of pastel where you just want plain-ass white or black.

- Back to the website/post. Some of the ugliest bar graphs I've ever seen. What in the actual hell? Everything from breaking visual flow of the bar, using three separate font sizes, needlessly showing the scale (and an unpaired, unneeded arrow) at the bottom and the legend with its fourth font size and padded-unlike-the-others and displayed-like-a-button presentation. Awful use of color. It's as if a labrador ate a carrot, two eggplants, and a jellyfish, then barfed them up, and a half dozen colors were chosen from that mess.

- Keyboard layout (they're on the page, so why not) has traditionally had rows 4 and 5 staggered. If Google made pianos, you can bet they'd have the black keys left-aligned with the preceding white key (actually "sun-drenched lilac") and all keys would have rounded bottoms. Oh, a few keys would have a different width than the others. Everyone focuses on the most obvious send button, but nobody has mentioned the little orange arrow above the keyboard. How are you supposed to know what that does without actually clicking it? And then you're expected to remember that forever although you probably rarely use it? So then why, again, does the send button need to be so very obvious and noticeable when it is used so very often? Also, who amongst us hasn't sent a message prematurely and then had to quickly send the errata to that message? A huge send button is only going to exacerbate this problem.

- Whatever's under the "4x faster" amoeba looks like an "additional photo" thumbnail. If that's what it is, there is NO reason whatsoever for that to have a circular edge and to not align with the adjacent photo.

- I gotta know what that fourth-from-left button in the concept design is (next to the ugly giant send airplane). Is that supposed to be a document but with a microscopic Photos icon in the corner? Also why are buttons 1 and 5 centered but inside of an element where the *insert fancy designer term here* center should be slightly shifted because of the rounded background? Why are there actually nine background shades in that screenshot??

This whole system is the visual equivalent to a college kid cooking their first few meals and just tossing in whatever spice is in the drawer. Too little salt; way too much thyme. Cinnamon on grilled chicken? Why not?? Can we boil the grilled cheese instead?

There's no basis in nature or iteration on renowned classic designs. It's the worst parts of design by committee, trying to stay off the chopping block, hitting KPIs, wanting to prove you're design-ier than the other designers, trying to impress Ivy Ross, and ignoring the needs/wants of a totally average and uninteresting user.

It's a bold experiment—a Throbbing Gristle of application presentation—where outlier data are cherry-picked away. The vocal thousands are "plainly uninformed, emotion-hating" minority and safe to ignore because they'll eventually learn to love it just like the silent, "definitely supportive by default" majority.

In short, the design language is inconsistent and heavily opinionated toward looking like an unkempt cottage garden stashed in an Aerotrim with every unique element's font characteristics set to Random. It provides too much variation where very little (or none) would be preferred and too little where it would help.

Golly, it sucks.


It doesn't help that the Play Store has no effective way to browse recently developed apps or to filter searches in any meaningful way whatsoever.

Couple that with the Indiana Jones boulder chase known as the Target API Level Requirement plus needing to log in every six months or risk getting your Google Dev account permanently deactivated and then needing to relaunch all of your apps under a new namespace.

A handful of apps I use come from small companies (5 to 40 employees) who should not have a dedicated mobile dev on their payroll. The apps do not pose a security risk (as they don't use internet/network features) and don't need to be updated as they are feature-complete. One such company just pulled all of their free apps and now has a contractor charge users for worse functioning redesigns.


and syntax highlighting


If you use a shotgun for this sort of thing, there's not a high risk of serious injury---particularly if you obey gun safety standards e.g. identifying everything in line with your target to the full range of your ammo.

The interesting theoreticals happen when a drone has a legitimate purpose (a drone owned by the county used for property appraisal, law enforcement, control of invasive species, etc.) or when someone causes serious harm/damage to a third party or even starts a fire from a falling drone.

Per Florida legislation: Reasonable expectation of privacy means circumstances under which a reasonable person would believe that he or she could fully disrobe in privacy, without being concerned that the person’s undressing was being viewed, recorded, or broadcasted by another---inside a house, bathroom, changing room, dressing room, tanning booth, etc.

(They keep falling back on 'reasonable'. I'm not sure I could describe the border between a reasonable and unreasonable person.)


For non-lawyers, "reasonable" is the law word for, first, whatever the judge thinks is OK (often despite being unable to articulate a clear standard for present and future analysis) in order to allow the case to advance to trial; next, whatever the finder of fact at trial (whether jury or judge) thinks is right (again, often despite being unable to articulate a standard, and almost never explaining the reasoning) in order to make a decision; and finally, whatever the appellate court(s) think(s) about the previous decisions.

In other words, "reasonable" is a logical slush fund and an indication to decide based on gut feelings.

True, we claim that certain synthesizing explanations and precedents develop over time, but those developments, and the applications of those precedents, often continue to turn on the decision-makers' gut feelings.


It makes sense to me that the law would have to frequently refer to "reasonableness". It's hard to be absolutely rigid about human behavior. We're programmers; we know how hard it is to properly think through every possible case even in the highly confined world of software. Humans are so, so much harder. I'm OK with that.

But that makes me not OK with it when lawyers pretend that they are being rigorous. I've never seen a single Supreme Court decision that I did not consider utterly appalling -- even the ones I agree with. If they were to write "because that's what I think is reasonable" I'd have some respect for it. They call it an "opinion"; go ahead and say that.


Reasonable, as used in the law in many if not most situations, has become a contronym. Reasonableness should be rigorous: it's in the term itself (capability of being reasoned / derived through reasoning). The intent behind the term is to use logic to ascertain / derive / apply the (sometimes tacit) social rule; but many judges turn that into "I'm reasonable (i.e., I'm not unreasonable, meaning clearly wrong much of the time), and this is my decision (whether or not I explain my supposed reasons to expose them to analysis and criticism), so therefore my decisions (and the things at issue) are reasonable; or, in my view, the thing at issue was not reasonable." Of course, such reasoning is itself illogical and, in my view, therefore unreasonable.


I just threw numbers into there (population x ownership percent x replacement frequency x unit cost) to estimate the annual revenue of the smartphone market and got a few percentage points away from what the internet reports is the true value.

Because there are trig functions, this would also be nice for reverse engineering of complex parts from simple measurements (feature volumes, corner angles, cross-sectional areas)

Multimodal would be nice but not necessary.

Inverse trig functions would be interesting but complicated and not necessary.

In any case, this tool is more convenient than opening Python every time I want to estimate a range of answers.


The LKML is no gold standard.

After searching on lore.kernel.org, do you click through individual messages with such insightful subject lines as, "media: camss: Format configuration per hardware version," and, "rcar-vin: feature enhancement and fixes?" or do you read through the nested results, which on a test search related to a recent problem I had, gave me 2.5 MB of text across 74K lines?

Even then, I didn't find exactly what I wanted and would need to browse the kernel source (and will it be mainline or next?) and click through. The frontend for git.kernel.org does not have per-line blame (unless I missed it somewhere) so I have to checkout just to find the commit I want or browse the log until I find the changed line or hope that the expanded log is verbose enough to match my search term.

lkml.org is certainly no better, with no method of searching or grouping related topics.

Or... Do you refer to a third-party search engine doing the heavy lifting of indexing and deciding the relevance of a problem?

As opposed to most chat clients, where you just search and get a preview of all possible matches, and then go to that conversation. Sure, with Discord it involves opening the client and the potential for security mishaps and other problems of modern software (ads, useless features) but it is generally not difficult to search through a half-decent channel.

You get similar ease-of-use and searchability with a git repository with a half-decent frontend plus it makes it significantly easier to track proposals, changes, feature history, etc.

... except when a merge request or issue suddenly has more than 5 participants or a branch is building a new feature, where it then makes sense to take it to a chat where you get an instant notification and tight feedback loop between all participants, rather than rapid-fire updating the bug tracker and its associated merge request comments and the reported issues in a dependency's repo.

Gotta go; a coworker is asking me in the chat to push a fix to nightly.


I don't know about every Brother model. On ours, there's a key sequence you can press to reset the toner cartridge odometer letting you squeeze out toner until the text is a satisfying light grey.


Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: