Alexander

Writing about learning Python and the odd bit of Linux related stuff I come across and find helpful. A bit about cycling. Long distance audax. The odd comment on unrelated ideas that I feel benefit from thinking about, writing down and sharing. That kind of thing. Enough is plenty. Good enough will do.

Tuesday 4th May 2021: What's in a name?

I was looking for antonyms of conflict. As is in, '...habits that conflict with your desired identity are usually bad'. (Atomic Habits - James Clear).

Concordant was one. The opposite of that would be discord, to be out of harmony or agreement usually noticeably. That prompted me to think of Discord. Why would the founders choose such a word to call the service which seems out of line with what many might instead hope for - understanding and harmony? It did not take long to find out.


2015.05.21 AMA Transcript (from the Discord blog)

Q (uppfinnarn): How about that name?

A (Jason): We picked the name because at the end of the day it just sounds cool and has to do with talking. We had a bunch of names that we bounced around, but picking a name for a product is a complicated process. You want a name that is easy to say, spell, remember, related to the function of the product, available for ™, and has a website you can get. There are a lot of things to consider and we had a number of different candidates. Discord met all the criteria that we had and we fell in love with the name.

A (Socrates): And Discord in the gaming community is the problem we are trying to solve with this product.


That the word discord 'met all the criteria' totally ignores the words definition. I get Socrates point about it being the problem they were trying to solve but all the same. There is irony in my take on it. It doesn't meta anyway. Moving on...

Sunday 2nd May 2021: Atomic Habits notes

Atomic Habits written by James Clear. Managing habits. Incremental and ongoing improvements. Very readable. Very relateable. Some useful ideas to think about and suggestions to give a go. An aid memoir / some key takeaways I got from reading the book over this weekend.

It’s remarkable the progress you can make towards any destination if you don’t stop moving in the right direction. Tired of starting over or getting lost? Check your heading and don't stop moving towards it.

When a measure becomes a target, it ceases to become a good measure. Goodhart’s Law. Named after the economist Charles Goodhart.

Facets of habits and behavioural change

  • The ultimate purpose of habits is to solve the problems of life with as little energy and effort as possible. Conventional wisdom holds that motivation is the key to habit change. Our real motivation is to be lazy and to do what is convenient.

  • Any habit can be broken down into a feedback loop that involves four steps: cue, craving, response, and reward.

  • The Four Laws of Behavior Change are a simple set of rules we can use to build better habits.

    • make it obvious
    • make it attractive
    • make it easy
    • make it satisfying
  • A craving is the sense that something is missing. It is the desire to change your internal state. What you really want is to feel different.

  • Motion makes you feel like you’re getting things done. But really, you’re just preparing to get something done. If you want to master a habit, the key is to start with repetition, not perfection. You don’t need to map out every feature of a new habit. You just need to practice it. This is the first takeaway of the 3rd Law: you just need to get your reps in.

  • The most effective form of learning is practice, not planning. Focus on taking action, not being in motion.

Habits are easier when they align with your natural abilities. Choose the habits that best suit you.

  • What feels like fun to me, but work to others?
  • What makes me lose track of time?
  • Where do I get greater returns than the average person?
  • What comes naturally to me?

Maintaining a habit

  • When starting a new habit, keep the behavior as easy as possible so you can stick with it even when conditions aren’t perfect.

  • Maintaining the habit when it’s annoying or painful or draining to do so, that’s what makes the difference.

  • Improvement requires a balance between challenges that push you to your edge while continuing to make enough progress to stay motivated.

  • Behaviors need to remain novel in order for them to stay attractive and satisfying. Without variety, we get bored.

  • When habits become ordinary, we might sometimes start derailing our progress to seek novelty. Men desire novelty to such an extent that those who are doing well wish for a change as much as those who are doing badly - Machiavelli

  • At the moment when you begin to feel like you have mastered a skill—right when things are starting to feel automatic and you are becoming comfortable—that you must avoid slipping into the trap of complacency. REFLECT & REVIEW.

  • Doing or not doing a habit is a continuous process. There is no finish line. There is no permanent solution. It is a system to improve, an endless process to refine.

Habit reduction

Do the opposite of the above for habit reduction. Make it invisible (manage internal and enviornmental triggers), make it unattractive, make it awkward and unappealing.


I'm feeling energised and optimistic. New ideas and renewed intent. Now from motion to action...

Friday 30th April 2021: My Political Compass

The Political Compass. The essence of the site is a model for political analysis. The site has been online since 2001. Developed by a journalist and an academic working on the inadequacies of simple left-right political identities. Check the video below for some background.

Pleased to find my aggregated responses to the propositions posed indicate I am a lefty libertarian (shown as the red dot in bottom left quadrant). I like the company I'm in.

My Political Compass

Tuesday 27th April 2021: timeboxed

Experimenting with the idea of a timeboxed schedule planner. Much planning done yesterday. I allowed myself to be distracted today. Eating the marshmallow. I got stuff done. More than had I not planned even though I never did everything I planned.

Internal triggers mostly. Willful diversions. Timeboxing was a bit out. Changes in the flow of family life. Forgot to include one or two things I spent time on. Did some coding. Deliberate practice? 30% at most. Realising how meandering my approach has become to learning and doing. Be good to get a grip of it. Fingers crossed good health and fitness will return and all will be good. I would not code a condition like that.

Sent a dynamo hub to the manufactuer in Taiwan for repairs. £25 plus £16 p&p. If it is fixed and returned it will be worth it. Hoping I don't get stung with tax on it's return. Custom bandits.

Got signed back on and 'migrated' for some freelancing work with a big multinational. Sounds pretty good put like that. Surveys, reports and consultancy. Trying out getting back into what I'd been doing for the six years before Covid.

Key factors I'm thinking of is getting to work when I want / need to; getting to visit some interesting locations and meet some interesting people. No managerial responsibilities.
I am better off employed as I work more paid hours and get pension payments, employee benefits etc. Freelancing feels like I have less days working and more holidays. Base hourly rate is double. Enhanced payment for unsocial hours, weekends and nights in employment counter that.
Admin and report writing is unpleasant. Good though I get to do it at home. Thoroughness, efficiency and discipline. Without it work becomes neverending. With it this becomes a more attractive option.
Freelancing sometimes presents opportunities that would not otherwise occur. There is novelty and newness about the work even though the process for bread and butter assignments is the same. Seems sensible to keep the possibiity alive.

Giving timeboxing my schedule another go tomorrow. It made a good difference today.

Akrasia

Thinking more about distraction and the notion of akrasia. A lack of self-control or the state of acting against one's better judgment

A few takes on it summarised from this Wikipedia page.

  • Donald Davidson: when people act in this way, they temporarily believe that the worse course of action is better, because they have not made an all-things-considered judgment, but only a judgment based on a subset of possible considerations.

  • Different motivations can conflict with each other. Reason and emotion. Believing that one should do A rather than B, but still end up wanting to do B more than A.

  • George Ainslie: hyperbolic discounting causes us to make different judgements close to a reward than we will when further from it.

These points led to thinking about The marshmallow test. What might motivate our decision making? Take the treat now or wait and get two later. Be distracted now or stay on task.

Hot and cool ways of thinking. Cool remembers to consider and take notice of long term outcomes. Hot is impulsive. Cool is to the fore when the setting conditions are right. Hot takes the lead when we're feeling under threat.

The Hot System (Go!) is: emotional, simple, reflexive, fast, and centered in the amygdala. It develops early in the child and is exacerbated by stress.

The Cool System (Know), on the other hand, is: cognitive rather than emotional, complex, reflective, slow, and centered in the frontal lobes and hippocampus. It develops later in the child and is made weaker by stress.

In the Hot System the stimulus controls us; in the Cool System we control the stimulus. Link

Hot motivates immediate gratification. It's a safety measure. Act now before it's too late kind of thing. Noticing when we're running hot seems like a good idea. The amygdala is in some ways well behind the times.

Relax. Take care of your environment. Be kind to yourself. Cool down your thinking. Consider the longer term and align your actions with your chosen future.

Distractions

The last month has been a bit of a right off in terms of getting stuff done. A cold quickly followed by nasty back pain. Throw in a mix of working days and nights and it's no wonder focus and productivity have been elusive. More often though it's by being distracted that my efficacy and output is reduced.

Distraction (dɪˈstrækʃən)
n

  1. the act or an instance of distracting or the state of being distracted
  2. something that serves as a diversion or entertainment
  3. an interruption; obstacle to concentration
  4. (Psychology) mental turmoil or madness

Often times I have conflated distraction and focus and considered them to be diametrically opposed.

Focus.

careful attention that is given to something such as a task, or the ability to give your full attention to something:

Inability to focus is though perhaps not the problem I thought it was. If it were how come we don't lose the ability to focus on our distractions? Nir Eyal suggests the opposite of distraction is not focus, it’s traction. Distraction is any action that pulls you away from what you said you’d do. Traction is any action that pulls you towards what you said you’d do

Indulging in distractions is a form of akrasia. A ‘lack of self-control’. Weakness of will. The disposition to act contrary to one’s own considered judgment about what it is best to do. That feels horrible after a while. It can become a habit. Not a good place to be in.

Overcoming distractions: How To Become Indistractable & Control Your Attention | Nir Eyal on The Reader’s Journey • Podcast Notes

  • Stop blaming stuff for your distractions. Take responsibility. Be in control. Most distraction starts from within. Notice internal triggers. Emotional avoidence is a likely antagonist. Be willing to stretch yourself. Push your limits. Be with the discomfort for a bit. The feeling will pass.

  • What do you desire? Where do you want to be? What needs doing to get there? Schedule in activties that correspond to these outcomes. Anything is permissable with intention! Without planning everything could become a distraction!

  • Manage external setting conditions. People. Noise. Comfort. Notifications blah blah blah...

  • If able to suspend your disbelief then make a pact with yourself...

    • Effort. Create barriers to disractions. Increase the effort which is required to partake in the distraction.
    • Price. Make the distraction expensive. Money in a jar kind of thing.
    • Identity. Adopt the identity of a being with focus and ability to overcome distraction!

Friday 16th April 2021

Feeling okay this morning. Not great. Okay. Better than grumpy. Went to bed at 9.30pm. Up a couple of times but otherwise slept through to about 6.00 am. Eight hours or thereabouts. Pleased with that.

My neck is hurting. I think it may be being made worse when I ride the bike. Maybe handlebars are a bit narrow? I remember the MRI scan I had when I got knocked off the bike noting advanced deterioration of bones or what not in that area.

Just read a letter I wrote to a friend on the 16th May 2000. He was in prison. I was getting married that weekend. I spoke about changing careers into datbase management over the next year.

There is a thing I have done in my life. Something about age. Being too young or too old to do stuff. Something like that. It has held me back in many ways. I am responsible for it. I would do well to manage the influence it has on planning and decision making.

Just not feeling much enthusisam about anything for the past few days. Feeling a bit off kilter. Could be weeks. I don't think so. Maybe since I got the cold a week ago last Tuesday. Been feeling drained. Decrepid. Feeling the wear and tear of age.

Has me thinking about shaping up again. Get some good habits going. Helpful routines. Like going to bed before 11pm when I am working days. Drinking water in the morning. Checking my blood pressue. Keep on the with push ups and cycling. Getting a grip again on the chronic bad habbits. They don't go away. Just into remission.

That's a thing. Deciding on what's important and taking action to attain the state. Being fit, strong and able. That's important. So I need to look after my health. Moving in that direction is in line with what I think is important so naturally things will seem right when I am going that way.

What else is important. I wrote down some goals a month or so ago. Doing LEJOG, regular miles on my bike, being a software developer, getting in a 100 press ups. Pretty sure there was something in there about relationships too. I have been willfully iginoring reminders on my phone to review those goals for at least three or four weeks. An instance of ignoring what I notice and choosing not to do what I know is worthwhile.

Just thought about the 100 consecutive press ups. I got them done. It surprised me in some ways when I did. Twice in one day to boot! None since then though and that was last Monday. Also got in a 115 mile ride on that Thursday. All very good but such things can lead me to losing focus and drifting. A case of I've done it now and then not getting back on it.

Good to notice and think about these things for a little while this morning. Started off feeling a bit morose. I am feeling a bit more enthused about the day now just from writing this journal. Hope your's is a good one too. Wishing you well.

Thursday 15th April 2021

Swapping between working days and nights is a tricky one to pull off and remain productive. Not been getting much done over the last few weeks.

Worked a night yesterday. Sat around all day today doing nothing that than staying awake so I can sleep tonight. Days training tomorrow. Cognitive skills take a hit. Not conducive to problem solving and coding.

Not getting enough sleep. Being tired. Time awake is not being used very effectivly.

Paradigms of Programming

Object orientated programmiing (OOP) and functional programming (FP). I'd heard both terms often enough to wonder what each involved. I knew that OOP in Python involved classes. I have not been using classes. I use functions though. Must be FP I'm doing.

No! Stop! Not the case at all. Functional programming is very different. Specialised. Math based. Declarative. Turns out it's structured programming that has been my default style. General purpose. Got more of an idea now how to structure code into a programme.


Procedural Orientated Programming (POP)

  • AKA procedural or imperative programming style.
  • A traditional procedural program is organised to take input data, process it and produces result. Programming is centralised around logic rather than data.
  • The data (stored in variables) is passed to a defined function which in turn performs some action and modifies it or creates new data.
  • The style may be thought of as a list of instructions which gets executed in an orderly manner defined by control flow statements and functions.
  • In POP write your code the way you would write an essay: from top to bottom.
  • There is no connection, no relationship between the data being used and the procedures which use them. One procedure could alter a data structure and then a seemingly unrelated procedure could also alter it.

Back in the eighties I was introduced to BASIC using my dad's Commodore 64, a friends ZX Spectrum and a BBC Micro. BASIC was very much POP. Code lines were numbered as ’10, 20, 30’ etc. If I wanted the program to repeat something done earlier, then the command ‘GOTO [line number]’ or 'GOTOSUB [line number]' to get it to jump back, do the thing and then continue to progress as before.

As a POP code base gets larger it can become complicated to navigate. With commands that jump between points it gets tricky to follow the flow. Finding errors when things go wrong may be a challenge. Code like this is sometimes called 'spaghetti code’.

Structured Programming

Structured Programming came about to overcome this problem. With the paradigm came the ability to reduce if not elminate the necessity of employing the GOTO statement.

  • Structured Programming is AKA Modular Programming
  • Structured Proramming is a discipline or subset of Procedural Programming.
  • It aims to improve the quality and clarity of the code. The execution of the program becomes more logical and readable. Structured programming involves 4 elements: sequence, iteration, selection, and subroutines.
  • Sequence: As for POP, code is written in sequential order top to bottom.
  • Selection: Such as if…elif…else statements. The execution of the subsequent code depends upon the selection statement.
  • Iteration: Execute a block of code again and again with the help of loop statements.
  • Subroutines: Programs are devided into a set of functions. Each of these functions performs a subtask. Having each function represent a specific functionality can make it easier to test and debug the code.

The focus of procedure orientated and structured programming is to break a programming task into a collection of variables, data structures, and subroutines. Small programs and scripts tend to be easier to develop using a simple procedural or structured programming approach.

Structured programming is a logical programming method that is considered a precursor to object-oriented programming (OOP).

Object Orientated Programming (OOP)

  • Object oriented programming uses 'objects' AKA 'instances' to to represent real-world scenarios and/or objects.
  • An object has states and behaviours.

    • Car, Person, Team etc. could all be objects.
    • States represent attributes or data of an object.

      attributes:
      
      make = 'Toyota'
      age = 21
      size = 'activity'       
      
  • Methods (functions in structured programming) represent the behaviours of objects.

  • An object is defined by a class. A class describes how an object is designed, i.e. which attributes and methods it has.

  • A class should not be confused with an object.

  • Objects may interact with other objects.

As for structured programming there are four main principles in OOP.

  • Encapsulation – attributes and methods are bound into a single unit - an object/instance of a class.
  • Inheritance – allows a class to use properties and methods of an already existing class. This makes the code reuseable and quicker to modify if needed.
  • Polymorphism – allows an object to perform in multiple ways. Methods and properties of the parent class can be modified as required. New methods and attributes may be added. Class attributes may be overwritten per instance. Objects are powerful!
  • Abstraction – hides the internal details and displays only the functionalities (of the instance) to the user – Moreover, abstract classes and interfaces (CLI, GUI) help to achieve abstraction.

Interest leading to this learning was prompted by a project I am working on. An allocations / shift coordinations app. I was stuck. Virtues of OOP had come into my awareness. Reading up a bit on structured programming and OOP seemed a good thing to do. This has led me to think an OOP approach may be the way to go and something I should learn.

Progress is being made with understanding OOP. Code has been refactored. The problem I was stuck on got solved using an instance method of an object created with the built in function iter() Allocate two staff to a task if a conditon is met else just one by default.

    if patient[1] == '2:1':
        print(next(staff_iter), staff_iter.__next__())
    else:
        print(next(staff_iter))

Friday 26th March 2021

Recently been listening to the PyBites Podcast. Good balance of content with a relaxed conversational tone. Measured whilst explicit enthusisam for the subject.

The PyBites Podcast is a podcast about Python Development, Career and Mindset skills. Hosted by the Co-Founders of PyBites, Bob Belderbos and Julian Sequeira, this podcast is for anyone interested in Python and looking for tips, tricks and concepts related to Career and Mindset. For more information on PyBites and Python, visit us at PyBites and hit us up on social media!

Bob and Julian talk a lot about mindset. Bob spoke in one episode of the benefit in framing goals in the present tense. That struck a chord with me.

I am a software developer! I am writing a program to substantially automate a thankless task which is being completed manually every shift at work.

It was in part an idea to build something similar to this that got and has kept me interested in learning to write code.

Success with the program will look like the job being done in a fraction of the time. Minutes instead of around an hour or so. Hourly functions over the shift will be distributed optimally between the team. Breaks and key responsibilities can be allocated with reference to scheduled tasks. Allocation tables will be generated.

Very good progress made this week. Coded some key stages in the program. Got over the disapointment and challenge of a false summit.

Getting more practice with dict(zip(), iter(), .pop() and .insert()

Found out about and had a go with itertools and more-itertools. Not needed so far but good to have the awareness of them both.

Todos are many. Essential is to allocate breaks. That may lead to refactoring hours to half hours. Secondary may be to conditionally auto allocate some key tasks. Include a database and user front end within the next two weeks? Maybe. CLI to demo definitely.

Thursday 18th March 2021

Learning to code using Python


The last week or so has been great. It feels like progress.

Tutorial hell, purgatory, paralysis... About 14 months of it. It's not been bad at all. I have enjoyed it.

I quickly learned that tutorial videos are a waste of time for me. I zone out and day dream. Written tutorials, coding exercises, blog post, podcasts, newsletters, coding playlists, books and Slack channels have though been of benefit.


Python : sets and dict(zip()

The Python dict(zip(iterable1, iterable2)) function is great. Take a couple of iterables (same length) and with just one line of code turn them into a dictionary. Other data structures can also be zipped but not yet had much call for them yet. The time will come and when it does I'll be ready!

Discovered something useful you can do with sets.

display = 'abracadabra'

letter_count1 = [(display.count(letter)) for letter in set(display)]
letter_count2 = [(display.count(letter)) for letter in display]

print(letter_count1)
[5, 2, 1, 1, 2]  # using a set getting the frequency count of each letter a[5], b[2], c[1],  d[1], r[2]  in the word. Duplicates are excluded.

print(letter_count2)
[5, 2, 2, 5, 1, 5, 1, 5, 2, 2, 5]  # using  a list getting the frequency count of each letter in the word as they appear in the word. Duplicates are not excluded. 

The allowed the creation of a dictionary with key, value pairs of letter and frequency count using the dict(zip()) function .

word = 'abracadabra'

letter_count_list = [word.count(letter) for letter in word]
letter_count = [(word.count(letter)) for letter in set(word)]  # using set counts but hides duplicates!
dictionary = dict(zip(set(word), letter_count))

for k, v in dictionary.items():
    print(k, v)

d 1
c 1
a 5
r 2
b 2

Tuesday 9th March 2021

It's been a couple of weeks since the last journal. That's okay. Just start again. Not the first time being I am human.

Same applies for most endeavours. The gap between intention and action. Consistency is the gold standard. Cutting down time between stopping and starting again is a good enough strategy.


You are as one, god and the devil. Among those who have you incarcerated there are some with malevolent intent. One of them is a shape shifter. Their leopard eyes and changing face gives them away. They try to project psychosis into your brain. You fight it off. That's very tiring. You wear a cloth over you head. Does not always work. You have justified the use of lethal violence to protect yourself should it be necessary.

Something I have become involved with. Not a typical work day problem.


Listening to a podcast this morning about habits. The focus was on the power of habits and mechanism to develop them. All sound research based ideas. There was a bit of 'power up your productivity' hyperbole about it. Nothing though was spoken about what can make us vulnerable to dropping habits we had assumed had become established.

Changes in routine. That's a big one for me. Swapping each month between working days and nights. A change of environment. How many habits fade away during a holiday away? Sickness and fatigue. So many more.

Recognise and accept the humanity in your being and endeavours. Understand that resolve and intention are finite. Forgive yourself for being human. Start again. Pick up where you left off. It still counts.

Thursday 19th February 2021

Leadership as an art. What’s 'right' gives way to what works; who’s 'in charge' gives way to who’s committed.

So many 'leaders' seem to have characteristics quite the opposite of the what the title suggests. Many seem subservient, acquiescing conformists. Self interested career seekers wilfully complicit in maintaining the status quo. Compliant.

In England the regulators of children's and adults health, social care and education all grade services from inadequate through to outstanding. Outstanding is an amorphous rating in that there is no agreed criteria for what it looks like. What there is though is an emphasis on innovative practice. To be outstanding you need to be innovative.

Conformists are perhaps unlikely to be innovators. They are though good at dodging bullets and taking credit when its given once the dust has settled.

In the meantime what's 'right' gives way to what works; who’s 'in charge' gives way to who’s committed. An so it goes on...

Wednesday 17th February 2021: Python Virtual Enviornments.

Virtual Environments in Python

This is an exercise in seeing what I remember about using virtual environments for Python projects.

What might happen if you do not use a Virtual Environment for your Python project?

Dependencies required of the project may end up clashing with other versions installed or that get installed at a later date. Your code may not run.

Say you imported xxx v0.1 module / package for project a1 with python 3.8 being the base install of Python which is used as the project interpreter.

Over time your Python install and pip packages may get updated. Or perhaps you create another project and imported xxx v0.1.2 module / package for project a2 with python 3.9 which is now the base install of Python.

When you run your project a1 it no longer works. This is because there are now two versions of xxx module / package and Python cannot differentiate between them. It may also be broken by the different Python version in the base install.

To avoid this you use Virtual Environments. You create a virtual environment to build your script / project in. This means that the project is isolated in it's own environment.

You can choose which version of Python to use for each environment and whether to install all global packages or to start wtih a clean slate.

Changes to the base install of Python will not be made which is good for stability.

In summary using a virtual environment for each project reduces the risk of version conflicts between modules / packages and Python interpreters any of which may stop your code from running.

Hope that's not too far off the mark and I've not spread falseities. For a better explaination see here and here

Sunday 13th February 2021 Super Productivity

I was looking for a Pomodoro app that included a function to keep a brief note on whatever it was I was doing for the session.

I found one. Super Productivty. It does what I wanted and a whole heap more. If you like the idea of this type of thing you should try this one out.

It's FOSS and cross platform. There is no data sharing with third parties. Syncs to NextCloud via WebDav. It has it all with bells on and is being activly developed. You can even intergrate GitHub, Jira and/or GitLabs with it.

Maybe the novelty but the last few days I have got a good amount done. Getting enthusiastic about todo lists and seeing where some of my time goes. Highy rated. Give it a go. Super Productivty

Friday 12th February 2021: Pinacle Dolomite LTD

Repairs for the Specialized Crux were adding up to over £700. Decided to get a new bike. Details here are primarily for my own reference. Text mostly taken from the eBay description. I thought it read well.

Pinnacle Dolomite LTD 2017
Pinnacle Dolomite LTD 2017

Size wise this is an XL model and a sticker on it says it is suitable for riders from 6'1" to 6'4". This seems a little optimistic as I am 5'11" tall and it feels the right size for me. I would say it would fit someone in the height range 5'10" to 6'.

The bike is based on a 2017 Dolomite LTD which was a fast/light touring or Audax bike and was the top-of the range model. Fitted with full mudguards, front hub dynamo and a full set of lights. Later models were fitted with inferior components, for instance the full carbon fiber forks were replaced with forks with an aluminium steerer and the wheels were down-graded. This 2017 model with its 'extras' had a mass of just 10.5kg.

A number of changes have been made to make the bike more comfortable, resilient and maintainable. These include:

  • A shorter steeper handlebar stem.
  • Replacement of the handlebars with ergonomic carbon fiber bars (for comfort).
  • Replaced the seat pin with a carbon fiber pin (for comfort).
  • Added 18 (2x9) speed Shimano Sora R3000 gears (why 9 speed, see here.
  • Added TRP Spyre twin 'piston' mechanical disc brakes (for simplicity and maintainability).
  • Added a 175mm Shimano GRX800 46/30t chain-set (to give lower and a better selection of gears).
  • Fitted a 11-32tooth 9 speed Ultrgra level cassette. New chain just fitted.

The bike includes as original:

  • The aluminium alloy (titanium coloured) frame in XL size.
  • Full monocoque carbon fiber forks.
  • The original 700c disc wheels with Alexa asymmetric rims. Rear hub is Novatec and the front is the Shutter Precision dynamo. The wheels run true. The rims are Tubeless ready.
  • Schwalbe Pro 1 28mm tyres (little used). These are tubeless tyres but I run them with tubes.
  • Original saddle.
  • Original lightweight mudguards. Extra Parts Supplied:
  • The original stem.
  • Spare brake pads.
  • Two bottle cages.
  • An out front Garmin mount.

Used for 5000km, but many of the items had much less use (tyres ~1000km; chain-set ~500km; handlebars and stem ~2000km). There was a recall on the rear wheel on this model; the rear wheel was replaced under guarantee.

Original Product Specifications: Pinacle Dolomite LTD 2017 (L)

  • Product Name Dolomite LTD
  • Brand Pinnacle
  • Size L
  • Rear Wheel Weight 1810
  • Wheelbase (cm) 102
  • Top Tube (cm) 55.5
  • Seat Tube (cm) 47
  • Chainstays (cm) 43
  • Wheelset Alex Draw 1.9s, SP dynamo hub (f), Novatec (r)
  • Weight (kg) 10.03
  • Trail 6.1
  • Stem Pinnacle Road alloy
  • Shifters Shimano RS685 hydraulic
  • Seatpost Pinnacle aluminium
  • Seat Angle 74
  • Saddle Pinnacle Race Mens
  • Rear Tyre Schwalbe Pro One, 28mm
  • Bottom Bracket BSA
  • Rear Derailleur Shimano 105
  • Headset Type FSA Orbit C Head Angle 72
  • Handlebar FSA Omega alloy
  • Front Wheel Weight 1660
  • Front Tyre Schwalbe Pro One, 28mm
  • Front Derailleur Shimano 105
  • Frame Material 6061-T6 double- and triple-butted alloy
  • Fork Offset 4.5
  • Fork Carbon, 12mm thru-axle
  • Cranks Shimano 105, 50/34
  • Chain KMC X11
  • Cassette Shimano 105 11-32
  • Brakes Shimano RS805 hydraulic disc, 160mm/140mm rotors