Wanhoja ideojta: 2009 (ruoan kotiinkuljetus)

Tässä palvelussa kannattaa miettiä, mikä on tilanne 20
vuoden sisällä. Näkisin että sinänsä ollaan turvallisilla vesillä,
että ihmisten ja tavaran liike on ikuista, vaikka mitä keksittäisiin.
SWOT-analyysissä ainoa uhkaava tekijä on star trekin teleportteri! 😉

Olemme tietyllä tapaa uranuurtajia, jos palvelu lähtee pyörimää isossa
skaalassa; nyt tosin on jo mielenkiintoisia niche-alueiden
kuljetuksia, kuten kalaa(!) ovelle, erilaisia rakennustarvikkeita
ovelle, jne. Eli tuodaan jotain juttua x ovelle, mutta Tuokon
kaltaista geneeristä kuljetuspalvelua en ole vielä nähnyt.

Hyvä kysymyshän onkin, kannattaako erikoistua vai pysyä geneerisenä?
Erikoistuminen on kilpailusuoja, jolla hankitaan syväosaamista esim.
tietokoneasennuksista osana kuljetuspalvelua, ja voidaan tarjota
parempaa palvelua sillä saralla. Se on luultavasti sitten pois muusta
kuljetustoiminnasta, jolloin busineksenä meidän tulisi laskea
kannattavuusvaihtoehdot ja vaihtoehtokustannukset. Jos käytetään 4h
keikkaan, ja saadaan 1+3 (kuljetus+asennus) tai esim. 4 x keikka
samassa ajassa, jos vain toimitetaan ilman asennuksia.

Laskin kaavan minimitoimitushinnalle eilen, yksinkertaisena se on :

mapE(s) = Pi x [(s/100)CC(G) + (s/Va)*C(hour) +(s/Va) * C(EQ_capital)]

Pi = profitability index 0..ääretön
s = matka kilometreissä, menopaluu
C = auton kulutus, litraa sataa kilometriä kohden
C(G) = cost of gasoline, bensan tai dieselin litrahinta
Va = keskinopeus (average velocity) jolla auto etenee matkalla
C(hour) = kuskin tuntipalkka sosiaalikuluineen
C(EQ_capital) = tuntia kohden jyvitetty koko firman pääomakulut

eli suomeksi sanottuna pienin hinta on sama, kuin Pi kertaa
break-even point eli nollavoittopiste. Break-even point löytyy kun haetaan
kaikki kustannukset tuossa sulkeiden sisällä olevassa summalausekkeessa.
Eli ekana tulee matkasta aiheutuvat bensakustannukset, sitten tulee tunti-
palkka, ja lopulta pääomakulut jyvitettynä tunnille.

Hieman kohtaannosta (talous 2021)

Olemmeko hakoteillä, jos painotetaan hakuprosessissa teknisiä yksityiskohtia?

Kysymys on varmasti käynyt monen mielessä.

Ok. “Tekninen yksityiskohta”, siis: mistä puhutaan? Tarkoitetaanko nyt yhdyssanavirhettä hakemuksen tekstissä tai CV:ssä; pilkkua väärässä paikassa, vai hakijalta puuttuvaa koulutusta ja todennäköistä menestymisen mahdollisuuden puutetta haettuun työpaikkaan?

Suomessa on työmarkkinoilla suurehko kontaanto-ongelma. Työn teettäminen ja työntekijät eivät kohtaa. Aivan hiljattain 2.9.2021 kauppakamari julkaisi, YLEn uutisoinnissa, että suurin ongelma on nimenomaan ammattikoulun tai ammattikorkeakoulun käyneiden saatavudesta. Eli ongelma näyttäisi olevan riittävän koulutuksen puute.

Toisinsanoen on sekä 1) paljon työttömiä työnhakijoita 2) paljon avoimia työpaikkoja, samaan aikaan. Lisäksi oikeastaan tarkemmin ottaen on luultavasti myös paljon tekemätöntä TYÖTÄ, vaikkei olisi kokonaista työpaikkaa.

Palataan hieman taaksepäin.

Miksi työtä tehdään?

Diipimmät filosofiat sivuun, sanotaan näin, että käytännössä työtä tehdään:

  • ..jotta työntekijä saa palkan eli elannon
  • ..jotta työntekijä voi kokea merkitystä elämässään
  • sosiaaliset tarpeet tyydyttyvät, kun on osa jotain porukkaa työn kautta
  • yritys haluaa estää tilanteen, jossa olemassaoleva henkilöstö alkaa kuormittua liikaa töiden kasaantuessa (johtaa palkkaukseen eli rekrytointiin), tai..
  • yritys haluaa varmistaa että se voi kasvaa, hankkimalla kapasiteettia eli tekijöitä, tai..
  • yritys haluaa varmistaa ne toimenpiteet, joita hyvin tekemällä sen asiakkaat ovat valmiita maksamaan yritykselle sen tuotteista ja palveluista
  • länsimaisen ajattelun mukaan työtä tehdään, jotta yhteiskunta ylläpitäisi elintasoa & hyvinvointia ja kehittyisi esimerkiksi ympäristöystävällisemmäksi ja inhimillisemmäksi paikaksi

Kaikilla toimialoilla on muutamaa eri laatua ammattitaitoa:

  • sellaista, jonka voi oppia helposti työtä tehdessä
  • selkeästi koulutusta vaativaa ammattitaitoa, jota ei tuosta vaan, hetkessä voi oppia työn ohessa

Laivan, bussin, ja lentokoneen henkilöstö kipparista tsuppariin asti tarvitsee koulutusta. Sairaalafyysikko tai rakennuspiirtäjä tarvitsee myös koulutusta. Virheet ovat paitsi oikeasti hengelle ja terveydelle vaarallisia, ne ovat myös kalliita; kukaan ei halua olla lentokoneessa matkustajana, jonka henkilökunta ei ole varautunut etukäteen vaativiin tilanteisiin; väärin suunniteltu rakennus voi tulla asuinkelvottomaksi, ja korjausrakentaminen on kallista puuhaa. Sairaalafyysikon todellakin pitää tietää mitä tekee. Sama pätee kirurgiin, hoitajaan ja vaikka verovirkailijaan.

Kohtaanto-ongelma tuskin kokonaisuudessaan johtuu mistään triviaalista yksittäisestä asiasta, mutta kaikki kitkan poistaminen on hyväksi työmarkkinoilla. Uskon, että olemme tietyllä tavalla luoneet ongelman itse, pala kerrallaan.

Kohtaannon eräs osa-alue voi liittyä itse työnhakuprosesseihin, tai esimerkiksi laajempaan yhteiskunnalliseen talousjärjestelmän rakenteeseen.

Palataan taas pian teeman pariin!

Suomi-IT, osa 2

Ensimmäinen osassa herättelin ajattelemaan sitä, että yhteiskunnat rakentuvat aika paljon nykyään tietotekniikan päälle.

Toinen tähän liittyvä keskeinen ajatus on miettiä nimenomaan asiaa meidän suomalaisten näkövinkkelistä. Meidän – jos luet tätä tekstiä, niin todennäköisimmin kuulut kohderyhmään! Uskallan väittää, että et lukisi tätä, jollet ole suomalainen.

Kun on aikaa… ja melkein kaikki ovat etätyössä

Hyvä asia: Paljon on tapahtunut!

IT-palvelut vääjäämättä tuntuvat onneksi kääntyvän myös suomeksi. Tässä on kenties kyse tehokkuuden parantumisesta. Aina prioriteetissa ensimmäinen asia ei ole ohjelmiston kielivalintoihin liittyvät tehtävät. Tosin, nykyään Suomessa on voimassa julkisten hankintojen tarkka standardi, jossa mm. kielivalintaan ja ylipäätään julkisella rahalla tuotettavien IT-palvelujen käytettävyyteen panostetaan huomattavasti huomiota.

Väestö ikääntyy Suomessa, ja heillä on paljon sekä tarvetta että intoa hyötyä verkon kautta käytettävistä palveluista. On tärkeää, että nämä aivan perus kansalaisoikeuksia ajavat palvelut löytyvät selkeällä suomenkielellä.

Tehostumisen myötä on päästy ikuisesta minimum viable product -vaiheesta (MVP) irti, ja voidaan hioa ohjelmistoihin myös i18n eli tässä tapauksessa suomelle tapahtuva käännös. Lyhenne ‘i18n’ tulee sanan internationalization lyhemmästä muodosta, koska kyseinen alkuperäinen litania on aikamoinen kirjainten sekasotku!

Läheisiä termejä ovat myös

  • L10N (l10n) eli lokalisointi, jossa tarkoitetaan sovelluksen tiedon esitystavan mukauttamiseksi paikalliseen kulttuuriin sopivaksi

I18n on mekanismi, jossa ohjelmistoon jo (usein alkuvaiheessa) valitaan kaiken käyttöliittymän näkyvän sisällön tuottamiseen välipalikka, joka käy läpi halutun termin tai fraasin, ja kääntää sen oikealle kohdekielelle.

Yksinkertaisesti: sen sijaan että ohjelmoija laittaa suoraan sanastot ympäri ohjelmaansa, ja kutsuu kiinteätä merkkijonon tulostusta..

print("nimesi:")

..niin i18n -modulin olleassa käytössä, kutsutaan menetelmää joka hakee oikean käännöksen ja käyttää sitä:

print(trans('nimesi:',"en"))

Esimerkissä yllä i18n-modulin funktio on nimeltään trans() ja se ottaa 2 parametria: merkkijonon tunnisteen, ja halutun kohdekielen. ‘en’ on englanti, eli tuossa käännetään merkkijono “nimesi:” englanniksi, joka kääntyisi todennäköisesti “your name:”

PHP:ssä on oma joukkonsa i18n-moduleita; Reactille löytyy useita, ja kun riittävästi kaivaa tai kyselee, varmasti jokaiselle kielelle on ainakin yksi toimiva käännösmoduli. Teknisesti nämä on usein toteutettu varsin suoraviivaisesti, jolloin työ jää enimmäkseen ihmiskääntäjälle. Käännös tehdään sanastoihin (tiedostoihin), jotka sisällytetään tavalla tai toisella ohjelmistoon. Teknisesti katsoen sanasto voi olla resurssina eli irrallinen tiedosto, tai se voidaan kääntää (compile) osaksi ohjelman paketointia. Mikään ei estä sinänsä laittamasta sanastoa vaikka client-server tyyppisesti verkkoonkin, tällöin tosin kannattaa huolehtia parista asiasta erityisen tarkasti: suorituskyky voi saada pahan iskun, mikäli jokainen käännöstermin esiintymä haetaan vasta tarvittaessa verkosta, koska olipa netti miten nopea hyvänsä, kuitenkin erilaisilla protokollilla (HTTP) on omat painolastinsa (overhead) pelkän hyötysisällön lisäksi.

Kysyin tuolloin 2018:

“Tarvitsemmeko kansallista – suomalaista versiota – tietoyhteiskunnasta, vai voimmeko rakentaa tarvittavan alustan käyttäen kaupallisia, monikansallisia digitaalisia palveluita joiden olinpaikka, taustateknologia, tarkoitusperä ja historia ei välttämättä ole suoranaisesti käsissämme?”

Olemme pieni kielivähemmistö maailmassa – entä sitten?

Kielivähemmistössä olemisella on merkitystä. Esimerkiksi ohjelmistot tehdään monesti suurille kielimarkkinoille, etupäässä englannin-, kiinan-, venäjän-, ranskan-, saksan ja espanjan kielille. Suomi näyttäytyy todellakin varsin häntäpäässä.

Käytännössä tämä on näkynyt kautta historian: ohjelmistot ovat olleet kieliasunsa suhteen “vähän sinne päin”, mitä tulee suomen kieleen. Ohjelmissa on monesti yllättävän paljon sanastoa. Sanoja käännettäessä voidaan toisinaan kääntää “verbatim”, suoraan sanasta-sanaan lähdekielen ja kohdekielen välillä. Toisinaan pitää etsiä ja jopa luoda suomenkielisiä vastineita. Tietotekniikka on käännösten sisäpiiriläisille ollut aina hilpeäkin toiminta-alue. Onko englanninkielinen “cookie” siis pipari, leivos, vai eväste? Kielitoimisto päätyi evästeeseen. Kun sanaa on nyt jo useita vuosia pidetty standardina, eväste ei enää kalskahda lainkaan hassummalta, eikö totta?

Ratkaiseeko AI ja automatisoitu käännösteknologia kaikki ongelmat?

Kieliteknologiaa tukee nykyään voimakkaasti automaattisen kääntämisen tuoma teho.

Kääntämisen naiivi idea on hyvin helppo ymmärtää:

  • yksinkertainen FOR-luuppi riittää
  • idea: poimitaan lähdetekstistä yksittäiset sanat, yksi toisensa perään, kunnes sanoja ei enää ole
  • jokaiselle sanalla haetaan käännöstaulusta suomenkielinen vastinpari
  • lisätään käännettyyn kohdetekstiin vastinpari (lisäämällä vaan tekstin perälle, eli ‘konkatenoimalla’)

Idea kuulostaa toimivalta. Pieni koekin jo paljastaa, että asia ei ole näin helppo, ja käännöksestä tulee tökerön kuuloista. Kokeillaan:

Englannista “Computers can be super useful in language technology.”
=> “Tietokoneet voida olla hyvin käyttökelpoinen jossain kieli teknologia.”

Ongelmat liittyvät moniin asioihin, joista voidaan mainita:

  • sanajärjestys ei ole eri kielissä samanlainen, joten käännöstä ei voida tehdä mekaanisesti (“lineaarisesti”), vain FOR-luupilla lähdetekstiä parsimalla, yksi sana kerrallaan
  • sanojen taivutus on monimutkaisen säännöstön reguloima (vilkaise suomen kielestä projekti Morpho, ja demo-ohjelma Morfessori)
  • aina 2 sanaa ei voida kääntää erillään sellaisenaan, vaan pitää ymmärtää lauseyhteydestä, mikä on oikea käännös
  • jotkin sanat voivat olla homonyymejä, jolloin samalla sanalla on useita eri merkityksiä; tässä palataan osittain myös edelliseen sääntöön, eli lauseyhteys määrittää lopulta oikean käännöksen

Käännökset sujuvat alkuun hyvin nopeasti; tuoreesta kääntämättömästä tekstistä leijonanosa voi olla varsin vakiomuotoista ja helposti kääntyvää.

Kokeilin itse tehdä muutamia kohtuullisen isoja (500-1500 lausetta) käännöksiä POEdit -softalla. POedit hakee (kaupallisessa versiossa) netistä löytyviä Microsoft Bing -palvelun, Google Translaten ja muutaman muun avustajan käännösehdotuksia.

Yllättävän suuri osa POEditissä tekemistäni WordPress-lisäosan projektien lauseista (usein > 60%) kääntyi täysin automaattisesti, vaikka lauserakenteet olisivat monimutkaisia. Suomen kieli on nimittäin vielä vuosikymmen takaperin ollut automaattikäännöksille hyvin vaikea nakki. Ilmeisesti tekoäly on parantunut, tai aineistoa on mekaanisesti toimiville osille nyt enemmän saatavissa.

Wikipedia listaa kielten puhujasuosion seuraavasti:

  1. mandariinikiina
  2. espanja
  3. englanti
  4. hindi
  5. bengali
  6. portugali
  7. venäjä
  8. japani
  9. punjabi
  10. marathin kieli

Tyypillinen ohjelmistojen alkuperäiskieli on joko englanti, espanja, saksa, tai ranska. Näistä voidaan kääntää muihin kieliin.

Tästähän on etuakin! Me opimme ainakin tuon yleisimmän tietokoneohjelmistojen ja median kielen, englannin, varsin nopeasti.

Toisaalta, tasa-arvoisuuden vuoksi emme missään nimessä voi vaatia kansalaisilta hyvää englannin kielen osaamista vain siksi, että he voisivat täysipainoisesti osallistua esimerkiksi:

  • vaaleissa äänestämiseen
  • pankkiasiointiin
  • opetukseen
  • oppimiseen oppivelvollisuuden jälkeen

Korona-pandemia 2020-2021 aiheutti ennalta-arvaamattoman ja nopean digiloikan ympäri maailmaa. Oli pakko.

Mitä digiloikalla tarkoitetaan?

  • siirryttiin etätyöhön työpaikoilla, joilla tämä on mahdollista
  • alettiin käyttää enemmän digitaalista kohtaamista; videotapaamisia ja nettipuheluita
  • ajankäytöstä tuli enemmän ennakoivaa, kalenterin merkitys nousi
  • osa työstä piti tehdä uudella tavalla, ikään kuin “laput osittain silmillä”, kun välitöntä työkaverien seuraa ei aina ollut saatavilla
  • ihmisten välinen, pieni läsnäolossa välittyvä tieto piti välittää esimerkiksi äänensävyllä, tai emojeilla chatissa
  • kenties myös kehitettiin työn vaiheiden analyyttistä ymmärrystä samalla
  • täysin kotimaisille digitaalisille käyttöliittymille syntyi sosiaalinen tilaus
  • turha työ jäi helpommin pois, ja kuulemma työstä tuli tehokkaampaa

Montako suomalaista ohjelmistotuotetta tiesit olevan päivittäisessä, kriittisessä käytössä 2020-2021 aikana? Aika monta nimittäin on, itse asiassa.

  • SSH (tietoturvalliset yhteydet, joita erityisesti IT-ylläpito käyttää)
  • Wilma (koulujen ja kotien välinen kommunikointi)
  • Vero
  • KELA
  • DVV (Digi- ja viestintävirasto)
  • kuntien web-saitit ja muut asiointiportaalit
  • urheiluseurojen sivustot ja digitaaliset palvelut
  • kunnallisten terveyskeskusten palvelut
  • kaupalliset lääkärikeskukset ja heidän toiminnanohjausjärjestelmät
  • THL (kansallinen terveyden ja hyvinvoinnin tukimustyötä tekevä laitos)

Voisiko osaa näistä tuotteistaa pidemmälle, ja viedä ulkomaille onnistuneena konseptina? Uskon, että voisi. Katsotaan taas parin vuoden päästä lisää!

Linkkejä mainioihin suomalaista osaamista edustaviin ohjelmistotaloihin

Jukka Korpelan sivustot

Korpela on legenda suomalaisen tietojenkäsittelyn alalla. Hän on ammentanut paljon vaikutteita, ja tehnyt erittäin onnistuneesti selkeää tekstiä suomeksi. Eräs ensimmäisistä kirjoista, joita luin yliopistotasolla C-ohjelmointikielestä, oli Korpelan ja Larmelan kirjoittama. Suosittelen!

Linkit suomen datakulttuuriin

Linkit kääntäjien työkaluihin

Zapper (app) draft

  • Vision: Goal-driven and excited developers!
  • Let developer be devoid of interrupts
  • Need to do reporting, and keep facts straight in addition to coding
  • Zapper helps in keeping small details straight!
  • Simplify software project execution for those who don’t need more
  • Zapper optionally sends reporting to a “real” agile dashboard / PM tool
  • Signaling (even a small bit of) critical work done, which is important for team!
  • Get your tasks board empty for the end-of-day
  • See a pacing todo incher (the coach!) for getting you over the finishing line!

Functionality

Join project by ID; view your tasks in the project, and start doing
code. Then:

  • zap task (mark done)
  • view statistics of your work
  • switch back to Tasks view
  • there’s only 2 views in the whole app
  • filter by clicking on specific project, or All (essentially toggle)
  • at the end of day you’ll get a overview of what you did, on a numeric basis

Dashboard design

  • what is your cognitive task right now, as User?
  • dashboard knows how important little things are
  • don’t overpromise
  • execute instead!

Mask the password of a MongoDB connection string with asterisks

This turned out to be interesting puzzle. Seemingly so simple thing made me think a lot.

Problem statement:

You’re given a string, which is a connection string to MongoDB. It consists of parts. The parts are delimited by various characters:

  • between username and password, there is ‘:’
  • after password comes ‘@’
  • after the ‘@’ comes host name

We want to mask any password characters with ‘*’ character.

Write an algorithm (function) that takes in a string, and writes out a masked string.

Uudenlainen tapa hakea jatkuvasti työntekijöitä?

Rekrytointi voisi muuttua mielenkiintoisella tavalla tulevaisuudessa.

Suuret volyymit. Turha rekrytointiin liittyvä “paperityö”. Dokumenttien kanssa sähläämiset, tallennukset ja dokumenttien etsiminen.

Epäsuhta hakijoiden määrän ja avointen positioiden määrässä. Firman tuloksen dippaus PK-sektorilla rekrytoinneista johtuen. Turhat hidastelut. Odottelu. Uusintasoitot ja utelut, kosiskelut. Odottamattomat peruutukset. Nokan edestä muualle palkatut kandidaatit.

Uuvutus. Valinnan riski. Työelämään liittyvän tiedon epästandardius. Automaattisen “työlentolokikirjan” puute.

Kiinnostavia heittoja? Jedi, näen sinussa suurta potentiaalia tämän artikkelin jatkolukemisen suhteen.

Tule.. tule takaisin. Laitan pian lisää.

Sting – break the growth ceiling!

  • 15 years as tech partner to one particular niche computing product
  • turnover less than 1 million eur
  • profit is always a sharp 5.74%, done by downsizing & rehiring, cyclically to keep profit at around the same point
  • per capita turnover a par with industry
  • cyclic shedding and hiring (employee count is always fluctuating up and down, +/- 10%)
  • no hockeystick figures ever
  • no real breakthroughs in past 20 years
  • products are being incrementally improved
  • horrible web pages, clinical with nothing standing out positively
  • key account manager / head of sales has 21 connections in LinkedIN, and no real social presence
  • brand value is low or next to nothing
  • your company’s main product, once searched for (googled), is confused with a soap bar
  • CEO tenure is way too long, 20+ years and (everyone) counting…
  • company lacks true growth spirit
  • provides however a “rather stable” employment opportunity
  • .. yet everyone thinks: how could they fare better?

Stay tuned. Let’s get ideas. Let’s get radical!

Knitting a 3D office building with Blender

Here’s my plan:

☐ extend the height of the building, to be 8-storey by cloning 4 x walls, and a ceiling
☐ fire escape stairs, onto 2 sides of building
☐ lobby of the office building (entrance)
☐ stair in front of main entry to bld
☐ an A/C ventilator machine on rooftop
☐ gravel texture in rooftop
☐ extend the roof edges, Z (upwards) base rooftop level (to provide safety hinges)
☐ add a few zebra crossings on streets
☐ make a traffic light fixture (metal) overarching all of the 4 approaches to street intersection
☐ add a yellow postal box on street
☐ add 2 streets next to bld.
☐ walking str details; add ground level bricks, or fractures in cement (texture)
☐ bring (import) a plugin OSM city landscape for a nice realistic backdrop

There’s interesting little learning in Blender, when creating a building. Sometimes you fight with a ‘beauty flaw’, like objects not being exactly one-on-one next to each other; this might look like a small gap between the floors of a building.

Blender isn’t a CAD..

..which means parametrized draw is not natively supported (as far as I know). Parametrization makes a 3D software easier to drive / programmatically create shapes that fit together perfectly.

When a software is not parametrized, you rely more on the mouse hand, and your own eyes.

Tricks, tricks..

What is not directly possible in Blender, can be done with some tricks. This is the one thing I learned throughout time. Don’t give up! There’s always some way to achieve what you can dream in your mind.

How I’ve learned Blender so far, is by doing, looking at quite a bunch of Youtube videos, and just grinding through failures. Probably spent so far around 500-1000 hours on Blender. And it’s been a magnifient journey.

At times, you might feel like it’s a dead-end. Then; a solution comes around the corner, perhaps a few days later; on Stack Overflow forums, or in a video.

Awesome blender learning videos

The tutorial videos done by Blender users are amazing! They’re totally professional level. I recommend looking up:

  • Blender Guru youtube channel (all things from simple to advanced)

I wanted variability to the 8-storey office building, but still would like to use cloning (copy-paste of walls). Blender has basically a ways of cloning structures: Duplication and Copy/Paste mechanism.

Blender has support for making drawing scripts in Python. This is a great invention, and the likes of Openstreetmap importer plugin ride on this capability. You can create any kind of object, by various means.

I heard that 2.8x series of Blender has done a MAJOR usability update. Would so be cool to test it out, however it happens that my current laptop’s video card doesn’t support the newer version. So, sticking with what I know, for now.

Two-storey version, early in the making

Working on the side entrance to Office building. In ‘Edit mode’, where objects are turned into their meshes, and you can edit them in more details: by individual vertex (point); by an edge or by Face.
Preparing a 6-second (24 fps * 6 = 144 frames) camera run of the building. The camera starts at bottom, and hovers up while backing up a little bit, to give an overview of the building. The video render is below this image, click to play it.
Rising in a 6-second video, to the top of our building. However, the ‘cues’ of height are a bit dim. We need more lights! Keep looking, next video shows how the added light gives more cues for us humans as of movement.

Count lines of software source code

How big is this project?

After cloning a Github repo, you might want to check specific source file lengths, in terms of lines of code.

Here’s a simple oneliner:

print lines of code in a python project

find . -type f | grep '\.py$' | xargs wc -l '{}'

what happens in that oneliner?

The whole oneliner thus reads:

“search files, ending in a .py, and then for these files, count the number of lines by using wc command”

“find” is a search tool, that looks for files and folders on a *NIX system. It has huge number of parameters, but we use only the “-type” switch to limit the search results for only “f”, that is, files.

Then piping over with “|” character, the results of find are fed into grep. Grep is a versatile string search (pattern matcher). We are looking now (out of all find results) only those lines that have “.py” in the end (the end of line is a special character in regular expressions, marked with a $ dollar sign).

xargs passes lines to be used as parameter values for command following the xargs itself. So with the last part, we want to run wc (word count tool, but with small letter L “-l” is turns into line count tool) with each line of the previous search result being a parameter to wc.

Oh, and by the way: the oneliner runs on sh / bash shell on Linux.