u/Due_Battle_9890

Wrote a small tool to drastically improve studying and some thoughts

Wrote a small tool to drastically improve studying and some thoughts

Hey,

I wrote a small tool that I think drastically improves studying and learning in general. I actually think AI could be incredibly effective for learning if used correctly. It's far too often AI is used ineffectively. Ironically, it's both the worst and best thing for education.

The tool works by incorporating the best research in the field[^1]:

  • retrieval practice,
  • spaced repetition,
  • elaborative interrogation, and
  • self-explanation,

You provide a resource and it begins tutoring you. It doesn't explain things for you and instead, probes your understanding of a given topic. It forces you to apply studying best principles instead of just re-reading and highlighting, which have been shown to be ineffective [^1].

You could see what it looks like after you ingest material: here. You might note the few toggles available, feynman, labs, confidence levels :)

There's also first-class support for ePUB, PDFs and semi-support for YouTube (it grabs a transcript only, but you need only grab a link)

ePUB: https://imgur.com/a/11CW4RC

Opening a Resource: https://imgur.com/a/friPw78

I view AI usage as either additive or subtractive. I'll begin with the latter case, the subtractive case, where AI usage is harmful for learning. In the subtractive case, you offload your thinking to AI and have it summarize or explain things for you. This is obviously harmful and you do not meaningfully learn in this case. You're not doing "mental reps" necessary. The strain is where you learn.

In the additive case, you do everything you normally would. Whenever I read a paper or watch a lecture, I use the SQ3R[^2] method as I think it's the most effective technique. I still use it, but I use this tool in addition to SQR3, labs, projects, practice problems, etc. Why? First of all, it's interactive and the feedback feels good and second, it forces the use of best practices. It suggests exercises or labs I otherwise wouldn't have thought of. It forces me to explain things back and acts as a pupil who will continuously ask questions. It forces me to use retrieval practice when I otherwise wouldn't. There's also been times where I thought I understood a topic, but through probing, turns out it didn't. I do everything I normally would have before this tool and use this tool, hence why it's additive.

Why not just chatgpt.com? First class support for resource ingestion. Makes it easy! I also find it useful to use a dedicated tool. There's also vim support built in for typing nerds. I wanted a fun project to work on! References:

[^1] Hattie & Donoghue (2021) — "A Meta-Analysis of Ten Learning Techniques"

[^2] https://ctl.stanford.edu/students/reading-efficacy-sq3r-method

u/Due_Battle_9890 — 3 hours ago
▲ 5 r/ghidra

Hey,

I was wondering what's the recommended for PyGhidra

I've been doing

class MyScript(GhidraScript):
  def __init__(self):
    super().__init__()
    self._state_var = 1 # Example
  def _do_thing(self):
    ...
  def _do_other_thing(self):
    ...
  def run(self):
    self._do_thing()
    self._do_other_thing()

m = MyScript()
m.run()

There's little examples and simply defining run doesn't seem to work (I actually need to invoke it)

Is there any reason to inherit from GhidraScript?

reddit.com
u/Due_Battle_9890 — 10 days ago
▲ 3 r/ghidra

Hey,

I am still learning Ghidra Scripting and have a question about about DBs. I am still getting used to navigating the docs and noticed that many of the classes are suffixed with DB (e.g., InstructionDB). I understand that these are just objects that inherit from DatabaseObject, but I want to make sure my understanding is correct. The docs describes it as:

> Base class for an cached object in the database. Database objects have keys. They are marked as invalid when a database cache is cleared and can be revived on a refresh as long as they haven't been deleted. Instantiating an object will cause it to be added immediately to the associated cache.

I'd like to take it step by step

> Base class for an cached object in the database.

Ghidra maintains a database and it's how, instead of re-analyzing or recomputing anything, Ghidra will cache it in the database

> Database objects have keys.

This is how you identify the object

> They are marked as invalid when a database cache is cleared and can be revived on a refresh as long as they haven't been deleted.

So, does this mean this isn't added to DB (only on save).

My second question:

It's a little more broard, but I get a bit overwhelmed searching the ghidra docs. Let's say that I want to iterate through the all the instructions, here's what I would do:

1.) Get the starting address

  a.) It's an ELF so I can get the start address

    i.) Could just grab the e_entry

  b.) But I have to construct `ghidra.app.util.bin.format.elf.ElfHeader`.

    i.) Have to construct it with a `ByteProvider`

    ii.) What's a byte provider???

    iii.) Do I just give the image base

The point is, it seems that navigating the ghidra API is horrid. It seems that it's obtuse and uses heavy inheritance (very java-y). I searched online and then I find something like. this, which is nicer. But this iterates when it encounters a null or is cancelled. I'd like to iterate over the entire text section which I think still requires me to get ELF details.

My general question: how does one actually navigate the docs? What are your strategies?

Thanks in advance!

u/Due_Battle_9890 — 13 days ago