搜尋此網誌

2026年5月28日星期四

Dictionary Comprehensions in Python

Revision:

In Python, lists, tuples, sets, and dictionaries are all built-in data structures, but they differ in mutability, ordering, and how they store data. Lists and dictionaries are mutable, tuples are immutable, and sets enforce uniqueness. Dictionaries store key–value pairs, while the others store single values.

List: [ ]

Tuple: ( )

Set: { } or set()

Dictionary: {key: value}


myList = [1,2,3,4,5]

[2*item for item in myList]

This a list comprehension, not a for loop.

In a for ... in loop, the colon (:) is mandatory because it introduces a block of indented code.

for item in myList:

    print(2*item)


We can use any valid variable name instead of "item" in a for ... in loop or a list comprehension. The name is just a placeholder that represents each element in the sequence while iterating.

What is a Key–Value Pair?

A dictionary is like a real-world dictionary:
Key = the word you look up.
Value = the definition you get.

In Python:
Key must be unique and immutable (string, number, tuple).
Value can be anything (string, number, list, another dict, etc.).

person = {
    "name": "Alice",
    "age": 25,
    "city": "Hong Kong"
}

"name" → key, "Alice" → value
"age" → key, 25 → value
"city" → key, "Hong Kong" → value

animalList = [('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')]
animals = {item[0]: item[1] for item in animalList}
animals

List of tuples
[('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')]

Each tuple has two elements:
item[0] → the key (like 'a')
item[1] → the value (like 'anteater')

Dictionary comprehension
{item[0]: item[1] for item in animalList}

Loops through each tuple in animalList.
Uses the first element (item[0]) as the key.
Uses the second element (item[1]) as the value.

{'a': 'anteater', 'b': 'bear', 'c': 'cat', 'd': 'dog'}

>>> animalList = [('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')]
>>> animals = {key: value for key, value in animalList}
... animals
...
{'a': 'anteater', 'b': 'bear', 'c': 'cat', 'd': 'dog'}

animals.items()
dict_items([('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')])
Asking Python to give you all the key–value pairs in the dictionary.

list(animals.items())
[('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')]

A list comprehension that builds a list of dictionaries from your animals dictionary
[{'letter': key, 'name': value} for key, value in animals.items()]

animals.items()
Produces key–value pairs like:
('a', 'anteater'), ('b', 'bear'), ('c', 'cat'), ('d', 'dog')

Looping with for key, value in animals.items()
Each iteration unpacks the tuple into key and value.

Dictionary inside the comprehension
For each pair, you create a new dictionary:
{'letter': key, 'name': value}

Result:
[{'letter': 'a', 'name': 'anteater'}, {'letter': 'b', 'name': 'bear'}, {'letter': 'c', 'name': 'cat'}, {'letter': 'd', 'name': 'dog'}]

Microsoft Copilot

Startup Company

bear down on: to move quickly toward someone or something in a determined way

get something off the ground: to start happening successfully; to make something start happening successfully

payroll: a list of people employed by a company showing the amount of money to be paid to each of them

mundane: not interesting or exciting

monte: a card game

viable: that can be done; that will be successful

topology: a branch of mathematics concerned with those properties of geometric configurations (such as point sets) which are unaltered by elastic deformations (such as a stretching or a twisting) that are homeomorphisms

disabuse somebody (of something) to tell somebody that what they think is true is, in fact, not true

Bill Gates "Source Code"

Online Dictionaries Used:

hk.dictionary.search.yahoo.com

www.oxfordlearnersdictionaries.com

www.merriam-webster.com

2026年5月26日星期二

西九文化區日落美景

 

Aperture Priority (光圈先決): f/9

ISO: 100

(Shutter Speed) 快門: 1/100 second

Focal Length (焦距): 135mm

Equivalent Focal Length (等效焦距): 216mm

Tripod Used and Image Stabilizer Off

White Balance (白平衡): Shade (陰影模式)

效果:相機會自動加暖色調,橘色比肉眼看更明顯

負曝光補償(Exposure Compensation): -1ev

Landscape Picture Style (Contrast: +1, Saturation: +1)

Evaluative Metering (權衡式測光)

Safety Precautions of Tripod Usage

Manfrotto MKBFRTA4GT-BH

Designed for the advanced travel photographer, this tripod is extremely portable and solid. Ideal for mirrorless cameras or medium format DSLRs.

Key features:

  • Side-pull leg angle selector for fast adjustment
  • Legs can be independently set at 3 angles of spread
  • Ball head for quick and easy framing
  • Rubber leg warmer (pads for camera tripod legs) for comfortable grip
  • Easy link socket for arms and other accessories
  • Fast and secure twist lock system
  • Counterweight hook for extra stability and strap attachment
      Set Up

Unfold the legs as shown in figure 1.
Open the 3 tripod legs. To adjust the tripod's height, release the telescopic extensions on each leg by rotating Twistlock "A" about a quarter of a turn.

You should open the proximal (top) twist‑lock first, then the distal (lower) sections, when extending the legs.

      Leg Angle Adjustment

Each leg can be set independently at any of the 3 angles of spread. To change the angle on a leg, close the leg slightly towards the center column and press down the locking button "W" at the top of the leg. While pressing the button, select the new leg angle and then release button "W" to lock in position, then open the leg fully again. The angle of each leg can be adjusted independently of the other two legs.

Warning: During this procedure, please take care not to insert your fingers inside the central aperture on the spider collar.

     Adjusting Center Column Height

To release the center column "C", unlock gear "D" and adjust the height of the column as required. Tighten gear "D" to lock the column in position.

     Fitting the Quick Release Plate to the Camera

Fix plate "G" to the base of the camera by tightening camera screw in the camera's threaded tripod hole using the ring "Q" WITHOUT APPLYING FORCE. Before fully locking, align the plate "G" with the camera lens. Please ensure you have securely fastened plate "G" to the camera before use. Once fastened, push ring "Q" down so that it lies flat against the plate "G".

    Mounting the Camera on the Head

To mount the camera on the head, open lever "H" while pushing safety catch "X" down, holding them both in the open position whilst attaching the camera by slotting camera plate "G" into the top of the head as shown in figure 5. Release lever "H" and safety catch "X".

Warning: Make sure that the camera is securely locked to the head by pushing lever "H" against plate "G" (Figure 6) and checking that the camera does not move in the head.
From my practical usage experience, lever "H" cannot be completely pushed against plate "G". The reason is the indicated orientation (arrow towards lens) of the plate "G" is reversed.

    Use

The head has independent panoramic and tilt movement.
The lever "F" locks the panoramic movement.
To release the movement, unlock lever "F" by rotating anticlockwise.
Once the desired position is achieved, lock the head by turning lever "F" fully clockwise.

Warning: The lever "P" locks the ball's movement. To ensure safety when using the ball head, always hold the camera with one hand while releasing the ball.

To release the ball "L" when positioning the camera, unlock lever "P" by rotating anticlockwise.
Once the desired position has been reached, lock the ball "L" by turning lever "P" by rotating fully clockwise.
The head features independent fiction adjustment on the ball movement, which makes it easier to position the head before locking it. To adjust the fiction, ensure the ball "L" is not locked. Then hold the camera in one hand and rotate knob "N" clockwise to increase friction. Friction does not lock the camera: we recommended locking the ball "L" by turning the lever "P" fully.

Tripod Manual
Microsoft Copilot
Perplexity AI

2026年5月20日星期三

Software for chip

Bill Gates and Paul Allen kick-started the personal computer revolution by writing Altair BASIC in 1975 to run on the Altair 8800. This software was the first product of their newly formed company, Microsoft.

Stephen Gary Wozniak is an American technology entrepreneur, electrical engineer, computer programmer, and inventor. In 1976, he co-founded Apple Computer (now Apple Inc.) with his early business partner Steve Jobs. Through his work at Apple in the 1970s and 1980s, he is widely recognized as one of the most prominent pioneers of the personal computer revolution.

The Homebrew Computer Club was an early computer hobbyist group in Menlo Park, California, which met from March 1975 to December 1986.

Monte Davidoff is an American computer programmer who was one of the first employees of Microsoft.

couch: a long piece of furniture like a bed, especially in a doctor’s office

rug: a piece of thick material like a small carpet that is used for covering or decorating part of a floor

Traf-O-Data was a business partnership founded in 1972 by Bill Gates, Paul Allen, and Paul Gilbert. The company aimed to read raw data from roadway traffic counters and process it into usable reports for traffic engineers.

reams: reams [plural] (informal) a large quantity of writing

dividend: ​an amount of the profits that a company pays to people who own shares in the company

realm: an area of activity, interest or knowledge

exclusive: only to be used by one particular person or group; only given to one particular person or group

royalty: a sum of money that is paid to somebody who has written a book, piece of music, etc. each time that it is sold or performed

cap at: set as the upper limit

sublicense: a license granted to a third party by a licensee, extending some rights or privileges that the licensee enjoys

viable: feasible; that can be done; that will be successful

ruminate: to think deeply about something

confide: to tell somebody secrets and personal information that you do not want other people to know

goof around: (especially North American English, informal) to spend your time doing silly or stupid things

Bill Gates "Source Code"

Online Dictionaries Used:

hk.dictionary.search.yahoo.com

www.oxfordlearnersdictionaries.com

Google AI Overview

en.wikipedia.org

2026年5月19日星期二

Histogram in Photography

A photography histogram is a graphical representation of an image's tonal values. It displays how pixels are distributed across brightness levels, from pure black on the far left to pure white on the far right. It is an essential tool for evaluating exposure and preventing overexposure or underexposure.

How to Read the Histogram

The horizontal axis (x-axis) represents the brightness of pixels, while the vertical axis (y-axis) represents the number of pixels at that specific brightness.

Left Side (Shadows): Represents pure blacks and dark tones. A spike here means you have dark shadows, but if the graph hits a wall on the far left, you are "crushing" the blacks and losing shadow details.

Middle (Midtones): Represents the middle grays and average light levels in your scene.

Right Side (Highlights): Represents pure whites and bright areas. If the graph hits the right-side wall, you are "clipping" or "blowing out" your highlights (e.g., turning a bright sky into a solid, unrecoverable white).

Common Histogram Shapes

Different types of scenes produce distinct histogram profiles:

High-Key Scene: A bright, airy scene (like a snowfield) will have a histogram heavily weighted toward the right.

Low-Key Scene: A dark, moody scene (like a night cityscape) will have the histogram weighted toward the left.

Balanced Scene: A scene with a good mix of light and shadows will have a bell-curve shape, ideally keeping all data contained within the boundaries.

Google AI overview

List comprehensions

List comprehensions in Python are a concise way to build new lists by looping through an iterable, applying an expression, and optionally filtering with conditions—all in a single line. They are faster and more readable than traditional for loops for simple transformations.

nums = [1, 2, 3, 4]

squares = [n**2 for n in nums]

print(squares)   # [1, 4, 9, 16]


nums = [1, 2, 3, 4, 5, 6]

evens = [n for n in nums if n % 2 == 0]

print(evens)   # [2, 4, 6]

>>> myList = list(range(100))
... filteredList = [item for item in myList if item % 10 == 0]
... print(filteredList)
...
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

>>> hisString = 'His name is Samson. He lives in Tuen Mun'
>>> hisString.split('.')
['His name is Samson', ' He lives in Tuen Mun']

>>> hisString.split()
['His', 'name', 'is', 'Samson.', 'He', 'lives', 'in', 'Tuen', 'Mun']

>>> def cleanWord(word):
...         return word.replace('.', '').lower()
...    [cleanWord(word) for word in hisString.split()]
...
['his', 'name', 'is', 'samson', 'he', 'lives', 'in', 'tuen', 'mun']

Outer square brackets [...]

Define that the result will be a list.

Without them, you’d have a generator expression instead (which doesn’t immediately build a list).

.lower()
Converts the string to lowercase.
Ensures consistency (e.g., "Samson" → "samson").

>>> [cleanWord(word) for word in hisString.split() if len(cleanWord(word)) < 3]

['is', 'he', 'in']

word → is a string (e.g., "he", "is", "mun").

You cannot directly compare a string to a number (word < 3) because Python doesn’t know how to order a string against an integer.

Doing so would raise a TypeError.

len(cleanWord(word)) → is an integer (the number of characters in the cleaned word).

This can be compared to another integer (< 3) safely.

Example: "he" → len("he") = 2 → 2 < 3 ✅


Nested list comprehension

>>> [[cleanWord(word) for word in sentence.split()] for sentence in hisString.split('.')]
[['his', 'name', 'is', 'samson'], ['he', 'lives', 'in', 'tuen', 'mun']]

Outer comprehension:
[ ... for sentence in hisString.split('.')]
Splits hisString into sentences using "." as the delimiter (定界符).
Iterates over each sentence.
For each sentence, it produces a list of cleaned words.

Inner comprehension:
[cleanWord(word) for word in sentence.split()]
Splits the current sentence into words (default split on whitespace).
Applies cleanWord(word) to each word.
Produces a list of cleaned words for that sentence.

Inner brackets → build a list of cleaned words per sentence.
Outer brackets → collect those lists into one big list.
Together → you get a nested list comprehension that structures text into sentences → words → cleaned words.

The variable sentence is a string (str).

Microsoft Copilot

拍攝夕陽西下的法門

White Balance: Shade

效果:相機會自動加暖色調,橘色比肉眼看更明顯。

進行負曝光補償(exposure compensation)。

978-957-106-0873

The Canon EOS 1500D does not include a built‑in “Vivid” Picture Style. You can get very close to a “Vivid” look on the EOS 1500D by using the built-in Landscape Picture Style, then pushing a few settings a little further:

Sharpness: raise it a little if the image still feels soft.

Contrast: +1 or +2.

Saturation: +1 or +2.

Color tone: leave at 0 unless the colors start looking unnatural.

For your Canon EOS 1500D with the EF-S 18-135mm f/3.5-5.6 IS USM, start with Aperture Priority (Av), f/8 to f/11, ISO 100, and set white balance to shade for warmer sunset tones. A good starting point after the sun is hidden by the hill is to meter for the bright sky and then dial in about -1 EV to -2 EV exposure compensation to keep the colors rich and avoid a washed-out scene.

Evaluative Metering
在攝影中,矩陣模式(Matrix Metering),通常也被稱為評價測光(Evaluative Metering)、多區測光或平均測光,是現代數碼相機中最智能化、最常用的測光模式。

Once the sun is fully behind the hill, the scene usually gets darker fast, so the camera will choose a slower shutter speed in Av mode. Using a tripod, keep ISO at 100 and let the shutter slow down. This matches common sunset shooting practice of using smaller apertures and controlling exposure with shutter speed.

With advanced skill, manual mode can be utilized. With a tripod, you can use a much slower shutter and get cleaner sunset color. Settings: f/8 to f/11, ISO 100, and a shutter speed around 1/4s to several seconds depending on brightness. Set the white balance to shade. Focus on the hill edge or a distant subject using manual focus. Image stabilizer has to be turned off when the tripod is used.

www.perplexity.ai

Fujifilm X-A2
16mm (APS-C, Crop factor: 1.5x)
Scene Mode: Sunset
f/8, 1/125s, ISO 200
March 30, 2017

2026年5月14日星期四

Dictionaries in Python

In Python, you can safely use a trailing comma in dictionaries (and other collections like lists, tuples, and sets).

my_dict = {

    "x": 10,

    "y": 20,

}

In Python, dictionary keys have some important rules and behaviors.

animals = {
    'a': 'ape',
    'b': 'bear',
    'c': 'cat',
}
animals.keys()

Output: dict_keys(['a', 'b', 'c'])

animals.values()

Output: dict_values(['ape', 'bear', 'cat'])


list(animals.keys())

Output: ['a', 'b', 'c']

animals.get('a')

Output: 'ape'


animals = {
    'a': ['ape', 'abalone'],
    'b': ['bear'],
}

Each key ('a', 'b') maps to a list of values.

This means you can store multiple animals under the same starting letter.

animals['b'].append('bat')

You’re accessing the list stored under key 'b' → currently ['bear'].

.append('bat') adds 'bat' to that list.

.append() modifies the list in place (it doesn’t return a new list).

if 'c' not in animals:
    animals['c'] = []
    
animals['c'].append('cat')

Check if key 'c' exists

if 'c' not in animals: → looks for 'c' in the dictionary keys.
If 'c' is missing, it creates a new entry with an empty list

Append 'cat' to the list

Now animals['c'] is an empty list [].

.append('cat') adds 'cat' to that list.

defaultdict is a special type of dictionary from Python’s collections module. It works just like a normal dictionary, but with one big advantage: if you try to access a key that doesn’t exist, it automatically creates it with a default value instead of raising a KeyError.

from collections import defaultdict
>>> animals = defaultdict(list)
>>> animals

Output:
defaultdict(<class 'list'>, {})

This is the string representation (__repr__) of a defaultdict object.

Inside the angular brackets < >, Python is showing you the default factory function used to create missing values.

<class 'list'> means: whenever you access a missing key, Python will automatically create a new empty list for it.

The {} part after the comma is the current contents of the dictionary (empty at the moment).
})

So the whole thing reads as, “This is a defaultdict whose default factory is the list class, and right now it contains an empty dictionary.”

Microsoft Copilot

零號機

rudimentary: not highly or fully developed

hone: to develop and improve something, especially a skill, over a period of time

churn out: to produce something quickly and in large amounts

ethos: the moral ideas and attitudes that belong to a particular group, society or person

nascent: beginning to exist; not yet fully developed

tangible: ​that you can touch or feel

Fabrication in electronics refers to the complex, multi-step process of manufacturing semiconductor devices—such as integrated circuits (ICs), microprocessors, and memory chips—on a substrate, typically a silicon wafer. This process takes place in highly specialized factories known as fabs (fabrication facilities), which are cleanroom environments designed to eliminate contamination.

indecipherable: (of writing or speech) impossible to read or understand

conviction: a strong opinion or belief

An eye roll is a facial gesture where a person temporarily turns their eyes upward, commonly used to communicate annoyance, boredom, skepticism, or disdain. 

skepticism: an attitude of doubting that claims or statements are true or that something will happen

Bemusement is the state of being bewildered, puzzled, or slightly confused. It represents a feeling of perplexed surprise, often combined with a sense of wonder or mild irony, causing someone to scratch their head at a situation they fail to fully understand.

hash out: to discuss something carefully and completely in order to reach an agreement or decide something

sprout: (of plants or seeds) to produce new leaves or buds; to start to grow

add-in: a computer program that can be added to a larger program to allow it do more things

add-on: a thing that is added to something else

thrill: a strong feeling of excitement or pleasure; an experience that gives you this feeling

sojourn: a temporary stay in a place away from your home

Saffron robes are the traditional garments worn by fully ordained Theravada Buddhist monks and nuns, symbolizing renunciation, simplicity, and dedication to enlightenment.

christen: to give a name to somebody/something

admonishment: admonition: a warning to somebody about their behavior

foray (into something) an attempt to become involved in a different activity or profession

morph: morph (somebody/something) (into somebody/something) to change, or make somebody/something change, into something different

deliberate: done on purpose rather than by accident

venture: a business project or activity, especially one that involves taking risks

Bill Gates "Source Code"

Online Dictionaries Used:

hk.dictionary.search.yahoo.com

www.oxfordlearnersdictionaries.com

Google AI Overview

2026年5月12日星期二

Tuples and Sets in Python

In Python, sets and indexes are two different concepts, and they don’t work together the way lists or tuples do.

The error 'set' object is not subscriptable means you tried to access a set element by index, like this:

mySet = {'a', 'b', 'c'}

print(mySet[0])   # ❌ Error

Subscriptable means you can use square brackets [] to access elements by position (like lists, tuples, strings).

Sets are unordered collections → they don’t have positions or indices.

That’s why Python raises this error.


Defined with curly braces {} or the set() constructor.

mySet = set(('a', 'b', 'c'))

('a', 'b', 'c') → This is a tuple containing three elements.

set(('a', 'b', 'c')) → The set() constructor takes that tuple and converts it into a set.

Result: {'a', 'b', 'c'}

Sets automatically remove duplicates (though here there aren’t any).

mySet now holds a set with the elements 'a', 'b', 'c'.


myList = ['a', 'b', 'b', 'c', 'c'] myList = list(set(myList)) print(myList)

['a', 'b', 'b', 'c', 'c'] → a list with duplicates.

set(myList) → converts the list into a set, automatically removing duplicate

list(set(myList)) → converts the set back into a list

Output: ['a', 'b', 'c']

But the order may vary, e.g. ['b', 'c', 'a'].


mySet.add('d') inserts the element 'd' into the set.

If 'd' was already inside, nothing changes (sets don’t allow duplicates).


while len(mySet):

    print(mySet.pop())

Condition: while len(mySet):

The loop runs as long as the set is not empty (len(mySet) > 0).

Inside the loop:

mySet.pop() removes and returns an arbitrary element from the set.

print() displays that element.

Iteration:

Each loop removes one element until the set becomes empty.

Loop ends when len(mySet) == 0.

The order is not guaranteed because sets are unordered. Running the same code again may give a different sequence.

myList = ['a', 'b', 'c'] print(myList.pop()) # 'c' (last element) print(myList.pop(0)) # 'a' (index 0) print(myList) # ['b']

mySet = {'a', 'b', 'c'}
mySet.discard('a') print(mySet)

mySet.remove('a') → removes 'a', but raises an error if 'a' is not found. mySet.discard('a') → removes 'a' if present, but does nothing if not found (safer).


def returnsMultipleValues(): return 1, 2, 3 print(type(returnsMultipleValues()))

return 1, 2, 3 → In Python, when you separate values with commas, they are automatically packed into a tuple.

Equivalent to: return (1, 2, 3)
So the function returns (1, 2, 3).
type(returnsMultipleValues()) → This checks the type of the returned object.

Output: <class 'tuple'>

a, b, c = returnsMultipleValues()

returnsMultipleValues() returns a tuple (1, 2, 3).

Python then unpacks that tuple into the three variables:
a = 1
b = 2
c = 3

Unpacking variables in Python means taking a collection (tuple, list, set, dict, etc.) and assigning its elements to multiple variables at once.

Microsoft Copilot

白平衡 (White Balance)

Daylight and Cloudy white balance settings differ mainly in color temperature. Daylight is optimized for clear, sunny conditions with direct sunlight, while Cloudy compensates for overcast skies.

overcast: covered with clouds; not bright

Key Differences:

Daylight targets around 5000-5500K, producing neutral tones for bright, overhead sun; it can make cloudy scenes look cooler or bluish.

Cloudy uses 6000-6500K (or higher), adding warmth (yellow/orange tones) to counteract the diffused, cooler light from clouds. It's good for Hong Kong’s cloudy spring weather.

Use Daylight for sunny outdoor shots; switch to Cloudy on overcast days to avoid flat, cold colors.

日光與陰天白平衡設定主要在色溫上有所不同。日光模式適合晴朗、陽光直射的環境,而陰天模式則用來補償多雲天氣。

主要差異:

日光模式:目標色溫約 5000–5500K,在明亮的正午陽光下呈現中性色調;但在陰天場景中可能會顯得偏冷或帶藍色。

陰天模式:使用 6000–6500K(或更高),增加暖色調(黃色/橙色),以抵消雲層散射造成的冷色光。這在香港春季多雲天氣特別適合。

實用建議:晴朗的戶外拍攝使用日光模式;在陰天時切換到陰天模式,避免照片顏色顯得平淡、冷調。

Aperture Priority, ISO 200, 35mm, f/9, 1/200s

White Balance: Cloudy (Warmer)

White Balance: Daylight (Cooler)

Information: Perplexity.AI, Microsoft Copilot, www.oxfordlearnersdictionaries.com

2026年5月11日星期一

Preparation before purchasing iPhone 17

Both iPhone 17 and 17 Pro now feature a 120Hz ProMotion display for smooth scrolling. The standard 17 lacks a dedicated zoom lens, relying on a 2x "optical quality" crop from its main sensor. Both have the new Ceramic Shield 2 (3x more scratch-resistant) on the front, but only the Pro model features it on the back as well.

Whether 8GB of RAM is a "disadvantage" depends largely on how long you intend to keep the phone and how heavily you use multitasking features. In the current generation of mobile tech, 8GB is the baseline for modern "Intelligence" features. Apple has optimized its software so that 8GB can handle complex tasks like local image generation and text summarization.

Given that you are currently using an iPhone SE2 with only 60GB used and plan to keep the iPhone 17 for more than three years, here is a breakdown of why 256GB is likely your "sweet spot," while 512GB is a luxury choice. If you use iCloud (even the 50GB or 200GB plans), your local storage needs drop significantly as older photos are offloaded to the cloud.

iPhone 17 256GB: HKD 6,899

iPhone 17 512GB: HKD 8,599

Your current 50GB iCloud plan is only 20% used (~10GB), so no upgrade needed after getting the iPhone 17—it'll comfortably last 3+ years with your 256GB phone choice.

SE2 stays with you (continue using 60GB photos there or factory reset later)

The iPhone 17 series supports 40W wired fast charging with a compatible USB-C charger, reaching 50% battery in about 20 minutes.

STUDIO A (Apple Premium Reseller)

2197D, 2/F tmtplaza Phase 1

Mon - Thu: 11:00am - 08:00pm

Fri - Sun, PH: 12:00pm - 09:00pm

2026年5月7日星期四

Notebook

Device Using: Lenovo ThinkPad X280
Processor: Intel® Core™ i5-8250U CPU @ 1.60GHz (1.80 GHz)
4 Cores, 6 MB Smart Cache
Operation System: Windows 11 Home
Installed RAM: 8.00 GB (7.85 GB usable)
Graphics Card: Intel(R) UHD Graphics 620 (128 MB)
Storage: 121 GB of 238 GB used
System Type: 64-bit operating system, x64-based processor
Display Size: Size: 12.5 inches (diagonal)
No pen or touch input is available for this display

Latest Device: Lenovo ThinkPad X13 Gen 6
Intel® Core™ Ultra 5 225U Processor
12 Cores, E-cores up to 3.80 GHz P-cores up to 4.80 GHz
A customizable option for SMBs or professionals seeking flexibility
Ideal for lighter tasks and budget-conscious users
Operation System: Windows 11 Pro 64
Memory: 16 GB LPDDR5X-8533MT/s (Soldered)
Storage: 512 GB SSD M.2 2280 PCIe Gen4 TLC Opal
Display: 13.3″ WUXGA (1920×1200) IPS, 400 nits, anti‑glare, 100% sRGB

2026年5月6日星期三

Lists in Python

In Python, list slicing lets you extract portions of a list using the syntax:

list[start:stop:step]

Components

  • start → index where the slice begins (inclusive).

  • stop → index where the slice ends (exclusive).

  • step → interval between indices (default is 1).

numbers = [10, 20, 30, 40, 50, 60] print(numbers[1:4]) # [20, 30, 40] (from index 1 to 3) print(numbers[:3]) # [10, 20, 30] (first 3 elements) print(numbers[3:]) # [40, 50, 60] (from index 3 to end) print(numbers[::2]) # [10, 30, 50] (every 2nd element) print(numbers[::-1]) # [60, 50, 40, 30, 20, 10] (reversed list)

numbers[1:4]
  • Start = 1 → begin at index 1 (the second element, which is 20).

  • Stop = 4 → go up to, but not including, index 4.

  • So you get elements at indices 1, 2, and 320, 30, 40.

Python slicing always excludes the stop index. That’s why 50 (at index 4) isn’t included.

print(numbers[::2])

  • Start = empty → defaults to the beginning of the list (index 0).

  • Stop = empty → defaults to the end of the list.

  • Step = 2 → take every second element.

So Python picks indices 0, 2, 4, ... until the end

myList = [1, 2, 3, 4, 5] print(myList[0:6:2])

Start = 0 → begin at index 0 (1).

Stop = 6 → go up to, but not including, index 6.

Step = 2 → take every second element.

Notice that even though you wrote stop = 6, your list only goes up to index 4. Python slicing doesn’t throw an error — it just stops at the end of the list. That’s why you still get [1, 3, 5].

The range() function in Python generates a sequence of integers, starting from a given start (default 0), stopping before a given stop, and incrementing by a given step (default 1). It’s most often used in loops to control iteration.

range(start, stop, step)

start → optional, default 0. First number in the sequence.

stop → required. Sequence ends before this number.

step → optional, default 1. Difference between consecutive numbers.

Range function is immutable.

>>> for i in range(5): ...     print(i) ... 0 1 2 3 4 >>>

>>> myList = [1,2,3,4] ... myList.append(5) ... print(myList) ... [1, 2, 3, 4, 5] >>>

In Python, lists have several useful methods for adding and removing elements. Let’s look at insert(), remove(), and pop() side by side:

numbers = [10, 20, 30] numbers.insert(1, 15) # insert 15 at index 1 print(numbers) # [10, 15, 20, 30]

numbers = [10, 20, 30, 20] numbers.remove(20) # removes the first 20 print(numbers) # [10, 30, 20]

pop(): remove and return an element at a given index (default is the last element).

>>> myList = [1,2,3,4,5]
>>> myList.pop()
5

numbers = [10, 20, 30] x = numbers.pop(1) # removes element at index 1 print(x) # 20 print(numbers) # [10, 30]

>>> myList = [1,2,3,4,5]
... while len(myList):
...     print(myList.pop())
...
5
4
3
2
1

Loop ends because len(myList) is now 0.

>>> a = [1,2,3,4,5]
... b = a.copy()
... a.append(6)
... print(a)
... print(b)
...
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]

b = a.copy() → makes a shallow copy of a.

  • Now b has its own separate list [1,2,3,4,5].

Microsoft Copilot

White Balance

Auto (White Priority): best for indoor fluorescent or mixed light

Shade: adds warmth to counter bluish tones

Cloudy: warmer balance, good for HK’s cloudy spring weather

Tungsten Light: best for indoor with incandescent bulbs

White Fluorescent Light: best for offices, malls in HK

Microsoft Copilot

Personal Computer

Albuquerque: city (the state's most populous) in central New Mexico population 545,852

makeshift: used temporarily for a particular purpose because the real thing is not available

plywood: board made by sticking thin layers of wood on top of each other

The Altair 8800, introduced by MITS in January 1975, is widely recognized as the first commercially successful personal computer, igniting the microcomputer revolution.

laundromat: ​​a place where you can wash and dry your clothes in machines that you pay to use

massage parlor: a place where you can pay to have a massage

shell out: ​(informal) to pay a lot of money for something

novelty: the quality of being new, different and interesting

splurge: an act of spending a lot of money on something that you do not really need

gadget: a small tool or device that does something useful

tinker: tinker (with something) to make small changes to something in order to repair or improve it, especially in a way that may not be helpful

Menlo Park: city in western California southeast of San Francisco population 32,026

swap: to give something to somebody and receive something in exchange

glimpse: a sight of somebody/something for a very short time, when you do not see the person or thing completely

toggle: to press a key or set of keys on a computer keyboard in order to turn a feature on or off, or to move from one program, etc. to another

staccato: (music, from Italian) with each note played separately in order to produce short, sharp sounds

rendition: the performance of something, especially a song or piece of music; the particular way in which it is performed

2001: A Space Odyssey is a seminal 1968 science fiction film directed by Stanley Kubrick and co-written with Arthur C. Clarke.

home brew: beer that somebody makes at home

stoke something (up) to make something increase or develop more quickly

whistle-stop: visiting a lot of different places in a very short time

counterculture: a way of life and set of ideas that are opposed to those accepted by most of society; a group of people who share such a way of life and such ideas

hippie: a person who rejects the way that most people live in Western society, often having long hair, wearing brightly colored clothes and taking illegal drugs. The hippie movement was most popular in the 1960s.

zeitgeist: the general mood or quality of a particular period of history, as shown by the ideas, beliefs, etc. common at the time

monolithic: ​(often disapproving) used to describe single, very large organizations that are very slow to change and not interested in individual people

Lockheed Martin (NYSE: LMT) is the world's largest defense and aerospace corporation

inaugural: IPA[ɪˈnɔːgjʊrəl]


Bill Gates "Source Code"

Online Dictionaries Used:

hk.dictionary.search.yahoo.com

www.oxfordlearnersdictionaries.com

www.merriam-webster.com

Google AI Overview