Hey, is anyone can... Read 50, 60-- 50 to 60 page in a one hour. One hour only. みんな
| Reading Speed | Pages/Hour |
|---|---|
| 200 wpm | ~40-48 pages |
| 250 wpm | ~50-60 pages ✅ |
| 300 wpm | ~60-72 pages |
Hey, what is SQ3R Japanese reading technique?
| Letter | Step | Japanese equivalent idea |
|---|---|---|
| S | Survey (概観) | Skim headings, titles, bold text first |
| Q | Question (質問) | Turn headings into questions before reading |
| R | Read (読む) | Read actively to answer your questions |
| R | Recite (復唱) | Say answers aloud or write notes from memory |
| R | Review (復習) | Go back and check your understanding |
Create a quick reference guide for using SQ3R
mkdir -p /home/daytona/workspace/sq3r-guide
~/sq3r-guide/create_sq3r_guide.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import FrameBreak
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/sq3r-guide/SQ3R_Quick_Reference_Guide.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DEEP_BLUE = HexColor("#1A3A5C")
MID_BLUE = HexColor("#2E6DA4")
LIGHT_BLUE = HexColor("#D6E8F7")
ACCENT = HexColor("#E8A020")
STEP_COLORS = [
HexColor("#1A6B8A"), # S - Survey
HexColor("#2980B9"), # Q - Question
HexColor("#27AE60"), # R1 - Read
HexColor("#8E44AD"), # R2 - Recite
HexColor("#C0392B"), # R3 - Review
]
WHITE = colors.white
LIGHT_GRAY = HexColor("#F5F5F5")
DARK_GRAY = HexColor("#333333")
# ── Document setup ───────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
topMargin=1.8*cm,
bottomMargin=1.8*cm,
leftMargin=1.8*cm,
rightMargin=1.8*cm,
)
W, H = A4
story = []
# ── Styles ────────────────────────────────────────────────────────────────────
base_styles = getSampleStyleSheet()
def style(name, **kw):
return ParagraphStyle(name, **kw)
title_style = style("MyTitle",
fontSize=28, leading=34, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=4)
subtitle_style = style("MySubtitle",
fontSize=13, leading=18, textColor=LIGHT_BLUE,
fontName="Helvetica", alignment=TA_CENTER, spaceAfter=6)
section_heading = style("SectionHeading",
fontSize=13, leading=16, textColor=DEEP_BLUE,
fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=4)
step_label = style("StepLabel",
fontSize=22, leading=26, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
step_name = style("StepName",
fontSize=13, leading=16, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
body_text = style("BodyText",
fontSize=9.5, leading=14, textColor=DARK_GRAY,
fontName="Helvetica", spaceAfter=3)
bullet_text = style("BulletText",
fontSize=9.5, leading=14, textColor=DARK_GRAY,
fontName="Helvetica", leftIndent=12, spaceAfter=2,
bulletIndent=4)
tip_text = style("TipText",
fontSize=9, leading=13, textColor=DEEP_BLUE,
fontName="Helvetica", spaceAfter=2)
tip_heading = style("TipHeading",
fontSize=9.5, leading=13, textColor=DEEP_BLUE,
fontName="Helvetica-Bold", spaceAfter=2)
small_italic = style("SmallItalic",
fontSize=8.5, leading=12, textColor=HexColor("#666666"),
fontName="Helvetica-Oblique", alignment=TA_CENTER)
white_body = style("WhiteBody",
fontSize=9, leading=13, textColor=WHITE,
fontName="Helvetica")
# ═══════════════════════════════════════════════════════════════════════════════
# HEADER BANNER (drawn as a coloured Table row)
# ═══════════════════════════════════════════════════════════════════════════════
header_data = [[
Paragraph("SQ3R", title_style),
Paragraph("Quick Reference Guide<br/><font size='11'>Survey · Question · Read · Recite · Review</font>", subtitle_style),
]]
header_table = Table(header_data, colWidths=[3.5*cm, 13.1*cm])
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_BLUE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING", (0,0), (0,0), 10),
("RIGHTPADDING", (-1,0), (-1,0), 10),
("ROUNDEDCORNERS", [8]),
]))
story.append(header_table)
story.append(Spacer(1, 10))
# ═══════════════════════════════════════════════════════════════════════════════
# WHAT IS SQ3R (intro paragraph)
# ═══════════════════════════════════════════════════════════════════════════════
intro_data = [[Paragraph(
"<b>What is SQ3R?</b> SQ3R is a structured, active reading strategy developed by Francis P. Robinson in 1946. "
"It transforms passive reading into a purposeful study cycle, dramatically improving comprehension and long-term retention. "
"Use it for textbooks, academic papers, and any dense material you need to <i>truly</i> understand.",
body_text
)]]
intro_table = Table(intro_data, colWidths=[16.6*cm])
intro_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS",[6]),
]))
story.append(intro_table)
story.append(Spacer(1, 12))
# ═══════════════════════════════════════════════════════════════════════════════
# THE 5 STEPS (one row per step, letter | name+desc | tips)
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("The 5-Step Process", section_heading))
story.append(HRFlowable(width="100%", thickness=2, color=MID_BLUE, spaceAfter=6))
steps = [
{
"letter": "S",
"name": "Survey",
"tagline": "Get the big picture before you read",
"desc": (
"Skim the entire chapter or text <b>before</b> you start reading. "
"This primes your brain to organise new information as it arrives."
),
"actions": [
"Read the title, headings, and subheadings",
"Look at all figures, tables, charts, and captions",
"Read the introduction and chapter summary",
"Note bold or italicised terms",
"Estimate total reading time",
],
"time": "2-5 min",
"color": STEP_COLORS[0],
},
{
"letter": "Q",
"name": "Question",
"tagline": "Turn passive reading into active inquiry",
"desc": (
"Before reading each section, convert the heading into a question. "
"This gives you a <b>specific goal</b> and keeps your focus sharp."
),
"actions": [
'Turn "Cell Division" into "How does cell division work?"',
"Write questions in a notebook or margin",
"Use: Who? What? When? Where? Why? How?",
"Include questions from the end-of-chapter exercises",
"Predict what the author will argue",
],
"time": "1-2 min/section",
"color": STEP_COLORS[1],
},
{
"letter": "R\u2081",
"name": "Read",
"tagline": "Read actively to find your answers",
"desc": (
"Now read one section at a time, searching for answers to your questions. "
"Read <b>purposefully</b>, not word-for-word at a dragging pace."
),
"actions": [
"Read one section at a time (don't read the whole chapter at once)",
"Highlight sparingly - only key answers and definitions",
"Slow down on complex passages; re-read if needed",
"Note unfamiliar vocabulary",
"Pause at the end of each section before moving on",
],
"time": "Bulk of study time",
"color": STEP_COLORS[2],
},
{
"letter": "R\u2082",
"name": "Recite",
"tagline": "Close the book and retrieve from memory",
"desc": (
"After each section, <b>close or cover the text</b> and answer your questions from memory. "
"This is the most powerful step for long-term retention."
),
"actions": [
"Look away and answer your questions out loud or in writing",
"Use your own words, not the author's phrasing",
"Sketch diagrams or concept maps from memory",
"Check back only after you have tried to recall",
"Repeat for each section before moving to the next",
],
"time": "1-3 min/section",
"color": STEP_COLORS[3],
},
{
"letter": "R\u2083",
"name": "Review",
"tagline": "Consolidate and fill the gaps",
"desc": (
"After finishing the entire text, do a final review. "
"This cements the material and reveals any gaps in your understanding."
),
"actions": [
"Re-read your written questions and answers",
"Skim headings again to rebuild the overall structure",
"Identify anything you still cannot recall and re-read only that",
"Discuss key points with a study partner",
"Schedule a follow-up review in 24 hours and 1 week",
],
"time": "5-10 min",
"color": STEP_COLORS[4],
},
]
for step in steps:
col_letter = [
[Paragraph(step["letter"], step_label)],
[Paragraph(step["name"], step_name)],
[Paragraph(step["time"], style("t", fontSize=8, leading=11,
textColor=LIGHT_BLUE, fontName="Helvetica",
alignment=TA_CENTER))],
]
letter_table = Table(col_letter, colWidths=[2.2*cm])
letter_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), step["color"]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
]))
# Description + bullets
desc_paras = [
Paragraph(f"<b>{step['name']}: {step['tagline']}</b>",
style("sh2", fontSize=10.5, leading=14, textColor=step["color"],
fontName="Helvetica-Bold", spaceAfter=3)),
Paragraph(step["desc"], body_text),
]
for action in step["actions"]:
desc_paras.append(Paragraph(f"\u2022 {action}", bullet_text))
desc_table = Table([[desc_paras]], colWidths=[14.2*cm])
desc_table.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("BACKGROUND", (0,0), (-1,-1), LIGHT_GRAY),
]))
row = Table([[letter_table, desc_table]], colWidths=[2.2*cm, 14.4*cm])
row.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
("LINEABOVE", (0,0), (-1,0), 0.5, HexColor("#CCCCCC")),
]))
story.append(KeepTogether(row))
story.append(Spacer(1, 5))
story.append(Spacer(1, 8))
# ═══════════════════════════════════════════════════════════════════════════════
# BOTTOM SECTION (2-column: Quick Tips | Common Mistakes)
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("Pro Tips & Common Mistakes", section_heading))
story.append(HRFlowable(width="100%", thickness=2, color=MID_BLUE, spaceAfter=6))
tips = [
("Use a timer", "Set 5 min for Survey so you don't over-read."),
("One section = one cycle", "Don't do Q-R-Recite for the whole chapter at once."),
("Write questions by hand", "Handwriting boosts encoding vs. typing."),
("Spaced repetition", "Schedule a Review at 24 hrs, 1 week, 1 month."),
("Read aloud during Recite", "Vocalising strengthens memory recall."),
("Mind-map the Review", "Draw a visual summary after the final R."),
]
mistakes = [
("Skipping Survey", "You miss the mental scaffolding - never skip it."),
("Highlighting too much", "If everything is highlighted, nothing is highlighted."),
("Reading the whole chapter first", "Breaks the per-section Q-R-Recite cycle."),
("Skipping Recite", "This is the highest-impact step - never skip it."),
("Reviewing immediately", "Wait at least a few hours before the final Review."),
("Using SQ3R for fiction", "SQ3R is for factual, structured texts - not novels."),
]
def make_two_col_section(items, bg, heading_color, label_col):
paras = []
for title, body in items:
paras.append(Paragraph(f"<b>{title}</b>", tip_heading))
paras.append(Paragraph(body, tip_text))
paras.append(Spacer(1, 3))
cell = Table([[paras]], colWidths=[7.8*cm])
cell.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [6]),
]))
return cell
tips_cell = make_two_col_section(tips, HexColor("#EAF4FB"), MID_BLUE, "Tips")
mistakes_cell = make_two_col_section(mistakes, HexColor("#FEF0E7"), HexColor("#C0392B"), "Mistakes")
tip_head = Paragraph("✔ Quick Tips", style("th",
fontSize=10, fontName="Helvetica-Bold", textColor=MID_BLUE, spaceAfter=5))
mistake_head = Paragraph("⚠ Common Mistakes to Avoid", style("mh",
fontSize=10, fontName="Helvetica-Bold", textColor=HexColor("#C0392B"), spaceAfter=5))
bottom_table = Table(
[[tip_head, mistake_head],
[tips_cell, mistakes_cell]],
colWidths=[8.3*cm, 8.3*cm]
)
bottom_table.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (0,-1), 6),
]))
story.append(bottom_table)
story.append(Spacer(1, 12))
# ═══════════════════════════════════════════════════════════════════════════════
# QUICK CHEAT-SHEET TIMELINE BAR
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("Study Session Timeline", section_heading))
story.append(HRFlowable(width="100%", thickness=2, color=MID_BLUE, spaceAfter=6))
timeline_labels = ["S\nSurvey\n2-5 min", "Q\nQuestion\n1-2 min\nper section",
"R1\nRead\nbulk of\ntime", "R2\nRecite\n1-3 min\nper section",
"R3\nReview\n5-10 min"]
timeline_data = [[Paragraph(lbl, style(f"tl{i}",
fontSize=8.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=12))
for i, lbl in enumerate(timeline_labels)]]
tl_table = Table(timeline_data, colWidths=[3.32*cm]*5)
tl_styles = [
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("ROUNDEDCORNERS", [6]),
]
for i, col in enumerate(STEP_COLORS):
tl_styles.append(("BACKGROUND", (i,0), (i,0), col))
tl_table.setStyle(TableStyle(tl_styles))
story.append(tl_table)
story.append(Spacer(1, 12))
# ═══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ═══════════════════════════════════════════════════════════════════════════════
footer_data = [[Paragraph(
"SQ3R was developed by Francis P. Robinson (1946) in <i>Effective Study</i>. "
"Consistent practice across multiple study sessions produces the best results. "
"Pair with spaced repetition for maximum long-term retention.",
small_italic
)]]
footer_table = Table(footer_data, colWidths=[16.6*cm])
footer_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_BLUE),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [6]),
]))
story.append(footer_table)
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD
# ═══════════════════════════════════════════════════════════════════════════════
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/sq3r-guide && python create_sq3r_guide.py
SQ3R Quick Reference Guide
PDF Document · PDF