├── .flake8 ├── .gitignore ├── .github ├── dependabot.yml └── workflows │ └── check.yml ├── pyproject.toml ├── README.md ├── pandocsql └── __init__.py ├── examples ├── job-search.md └── job-search-output.md └── poetry.lock /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = E501 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | *.egg-info 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: pip 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "pandocsql" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Your Name "] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.9" 9 | panflute = "^2.3.0" 10 | 11 | [tool.poetry.dev-dependencies] 12 | ipython = "*" 13 | ipdb = "*" 14 | flake8 = "*" 15 | black = { version = "*", allow-prereleases = true } 16 | flake8-black = "*" 17 | 18 | [tool.poetry.scripts] 19 | pandocsql = 'pandocsql:main' 20 | 21 | [build-system] 22 | requires = ["poetry>=0.12"] 23 | build-backend = "poetry.masonry.api" 24 | -------------------------------------------------------------------------------- /.github/workflows/check.yml: -------------------------------------------------------------------------------- 1 | name: Python package 2 | on: [push] 3 | jobs: 4 | build: 5 | runs-on: ubuntu-latest 6 | strategy: 7 | matrix: 8 | python-version: [3.9] 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Set up Python ${{ matrix.python-version }} 12 | uses: actions/setup-python@v1 13 | with: 14 | python-version: ${{ matrix.python-version }} 15 | - name: Install dependencies 16 | run: | 17 | python -m pip install poetry 18 | poetry install 19 | - name: Lint with flake8 20 | run: | 21 | poetry run flake8 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | I'm not really using this nowadays, so I'm not maintaining it, really. 2 | https://github.com/alexpdp7/pandoc_datalog is what I will focus on when I have some bandwith. 3 | 4 | # pandocsql 5 | 6 | This is a Pandoc filter to do stuff with SQL. 7 | 8 | If you use it like: 9 | 10 | ``` 11 | $ pandoc README.md -F pandocsql -o README.html 12 | ``` 13 | 14 | , tables defined in the document will not appear in the output; however they will be dumped into an SQLite database... 15 | 16 | | code | description | priority | 17 | | ---- | ----------- | -------- | 18 | | Q1 | Banana | 7 | 19 | | B2 | Apple | 1 | 20 | | R7 | Orange | 3 | 21 | 22 | Table: table_1 23 | 24 | And you can run queries which will be displayed as tables: 25 | 26 | ```pandocsql 27 | select * 28 | from table_1 29 | order by priority desc 30 | ``` 31 | 32 | You can see further examples in the [examples folder](examples/). 33 | 34 | ## Installation 35 | 36 | ``` 37 | $ pipx install git+https://github.com/alexpdp7/pandocsql.git 38 | ``` 39 | 40 | ## Development 41 | 42 | ``` 43 | $ pandoc README.md -t json | poetry run pandocsql | pandoc -f json -o README.pdf 44 | ``` 45 | -------------------------------------------------------------------------------- /pandocsql/__init__.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | 3 | import panflute as pf 4 | 5 | 6 | def bp(): 7 | import sys 8 | 9 | sys.stdin = open("/dev/tty") 10 | import pdb 11 | 12 | pdb.set_trace() 13 | 14 | 15 | def prepare(doc): 16 | doc.sql = sqlite3.connect(":memory:") 17 | 18 | 19 | def action(elem, doc): 20 | if isinstance(elem, pf.Table): 21 | table = elem.caption.content[0].content[0].text 22 | headers = list(map(pf.stringify, elem.head.content[0].content)) 23 | headers_sql = ",".join(headers) 24 | placeholders_sql = ",".join(["?"] * len(headers)) 25 | doc.sql.execute(f"create table {table} ({headers_sql})") 26 | for row in elem.content[0].content: 27 | row_values = [pf.stringify(cell) for cell in row.content] 28 | doc.sql.execute( 29 | f"insert into {table}({headers_sql}) values ({placeholders_sql})", 30 | row_values, 31 | ) 32 | return [] 33 | if isinstance(elem, pf.CodeBlock): 34 | if elem.classes != ["pandocsql"]: 35 | return 36 | table = doc.sql.execute(elem.text) 37 | headers = [col[0] for col in table.description] 38 | rows = list(table) 39 | 40 | def c(t): 41 | return pf.TableCell(pf.Para(pf.Str(str(t)))) 42 | 43 | def r(cs): 44 | return pf.TableRow(*list(map(c, cs))) 45 | 46 | return [ 47 | pf.Table( 48 | pf.TableBody(*list(map(r, rows))), 49 | head=pf.TableHead(r(headers)), 50 | caption=pf.Caption(), 51 | ) 52 | ] 53 | 54 | 55 | def finalize(doc): 56 | pass 57 | 58 | 59 | def main(doc=None, input_stream=None, output_stream=None): 60 | return pf.run_filter( 61 | action, 62 | prepare=prepare, 63 | finalize=finalize, 64 | doc=doc, 65 | input_stream=input_stream, 66 | output_stream=output_stream, 67 | ) 68 | 69 | 70 | if __name__ == "__main__": 71 | main() 72 | -------------------------------------------------------------------------------- /examples/job-search.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | This is an adaptation of the document I used to track my last job search. The 4 | names of companies have been scrubbed and I have made a few modifications to 5 | make a better example. 6 | 7 | After installing `pandocsql`, you can process this document with: 8 | 9 | ``` 10 | $ pandoc job-search.md -F pandocsql -o job-search.html 11 | ``` 12 | 13 | You can see the output [here](job-search-output.md) 14 | 15 | # Data entry 16 | 17 | This is the main table tracking jobs you have applied to. I had a URL pointing 18 | to the offer, but faking that data sounded useless so I removed it. This can 19 | handle multiple jobs from the same company. Extra columns could be added to track 20 | job properties, etc. 21 | 22 | | job | company | headline | found_on | 23 | | -------------- | -------------- | -------------------------------------------------- | ----------- | 24 | | METACERO | METACERO | Text to display in some reports... status, etc. | LINKEDIN | 25 | | CRYPTOBER | CRYPTOBER | | | 26 | | UNILANE | UNILANE | | | 27 | | IDIOZZY | IDIOZZY | | | 28 | | ISOLOO | ISOLOO | | | 29 | | DEMOVUR | DEMOVUR | | | 30 | | AGINTE | AGINTE | | | 31 | | ALBICIOUS | ALBICIOUS | | | 32 | | AMBITRI | AMBITRI | | WWR | 33 | | SYMILE | SYMILE | | WWR | 34 | | YAKILIUMER | YAKILIUMER | | WWR | 35 | | FLEMATE | FLEMATE | | FRIEND1 | 36 | | BLUEPOD | BLUEPOD | | WWR | 37 | | GABORLENOR | GABORLENOR | | WWR | 38 | | ROBOCADRE | ROBOCADRE | | WWR | 39 | | GOOMDOR | GOOMDOR | | WWR | 40 | | ROTEBOTEDO | ROTEBOTEDO | | LINKEDIN | 41 | | PEMBROTHER | PEMBROTHER | | LINKEDIN | 42 | | BOKEMOKETOPER | BOKEMOKETOPER | | LINKEDIN | 43 | | GANO | GANO | | LINKEDIN | 44 | | SUCORER | SUCORER | | SOMEREDDIT | 45 | | REPOZOO | REPOZOO | | INFOJOBS | 46 | | AVUURA | AVUURA | | INFOJOBS | 47 | | UNILANE2 | UNILANE | | | 48 | | ROBEDOBE | ROBEDOBE | | LINKEDIN | 49 | | ANOR | ANOR | | FRIEND2 | 50 | | LETOPE | LETOPE | | | 51 | | AGUSAPARTE | AGUSAPARTE | | | 52 | | NACE | NACE | | RECRUITER | 53 | | FOOLAMINASTE | FOOLAMINASTE | | LINKEDIN | 54 | | BOOG | BOOG | | SO | 55 | | COREDUL | COREDUL | | SO | 56 | | MARTER | MARTER | | SO | 57 | | POKERCONNOR | POKERCONNOR | | SO | 58 | | PORESORE | PORESORE | | LINKEDIN | 59 | | NASTIPE | NASTIPE | Interesting, but I don't like their mission | RECRUITER2 | 60 | | COCOPARNABURN | COCOPARNABURN | | LINKEDIN | 61 | | ZOOXOR | ZOOXOR | | LINKEDIN | 62 | | AGINTE2 | AGINTE | | | 63 | | ARBORPALE | ARBORPALE | | LINKEDIN | 64 | | WOOBOORT | WOOBOORT | | LINKEDIN | 65 | | SYLER | SYLER | | | 66 | | COCE | COCE | | | 67 | | HOOROOPO | HOOROOPO | | LINKEDIN | 68 | | NACE2 | NACE | | LINKEDIN | 69 | | FGHTANIO | FGHTANIO | | LINKEDIN | 70 | | AVINU | AVINU | | LINKEDIN | 71 | | BUKULURUPOX | BUKULURUPOX | | LINKEDIN | 72 | | JUJUP | JUJUP | | LINKEDIN | 73 | | FRAMEPORCOCO | FRAMEPORCOCO | | LINKEDIN | 74 | | REPROCA | REPROCA | | LINKEDIN | 75 | | PUXXONA | PUXXONA | | LINKEDIN | 76 | | ROTEBOTEDO2 | ROTEBOTEDO | | LINKEDIN | 77 | | PERALTA | PERALTA | | LINKEDIN | 78 | | DOZENER | DOZENER | | LINKEDIN | 79 | | SOAOK | SOAOK | | SLACK1 | 80 | | NEXTPUPUS | NEXTPUPUS | | LINKEDIN | 81 | | DOZENER2 | DOZENER | | LINKEDIN | 82 | | CUCUPORI | CUCUPORI | | LINKEDIN | 83 | | VIVIZONI | VIVIZONI | | LINKEDIN | 84 | | FREPULATORING | FREPULATORING | | LINKEDIN | 85 | | BAKKANT | BAKKANT | | FRIEND3 | 86 | | BUBONICA | BUBONICA | | LINKEDIN | 87 | | REAITOR | REAITOR | | LINKEDIN | 88 | | FLIZZOG | FLIZZOG | | LINKEDIN | 89 | | BOOR | BOOR | | LINKEDIN | 90 | | FROSTYMAN | FROSTYMAN | | LINKEDIN | 91 | | PUNNY | PUNNY | | LINKEDIN | 92 | | XAXAPO | XAXAPO | | INFOJOBS | 93 | | QOOBAR | QOOBAR | | LINKEDIN | 94 | | PIXXOTE | PIXXOTE | | LINKEDIN | 95 | | AZZOOMR | AZZOOMR | | LINKEDIN | 96 | | NIXX | NIXX | | LINKEDIN | 97 | | PULE | PULE | | SLACK1 | 98 | | FLUZ | FLUZ | | LINKEDIN | 99 | | AVINU2 | AVINU | | LINKEDIN | 100 | | WOWAWEWIWUPR | WOWAWEWIWUPR | | INFOJOBS | 101 | | LEFTR | LEFTR | | INFOJOBS | 102 | | PACKGANO | PACKGANO | | RECRUITER3 | 103 | | CIZZZATROPEX | CIZZZATROPEX | Looking very good, remember to ask Matt about it | RECRUITER3 | 104 | | BUBUCUCURUCUS2 | BUBUCUCURUCUS2 | | LINKEDIN | 105 | | FUSTIN | FUSTIN | | LINKEDIN | 106 | | VAVIT | VAVIT | | ANGELCO | 107 | | LOROPE | LOROPE | | LINKEDIN | 108 | | LOGOPOTE | LOGOPOTE | | RECRUITER4 | 109 | | BORNEMASTEROR | BORNEMASTEROR | | SLACK1 | 110 | | BUBUCUCURUCUS3 | BUBUCUCURUCUS3 | | LINKEDIN | 111 | | GHOOPOHOOZU | GHOOPOHOOZU | | INFOJOBS | 112 | | ESPELUZAN | ESPELUZAN | | INDEED | 113 | 114 | Table: jobs 115 | 116 | The other table is for job events. The job column should match the job column 117 | in the table above. 118 | 119 | | job | event | ts | 120 | | -------------- | ---------------- | ---------- | 121 | | METACERO | APPLIED | 2019-11-22 | 122 | | CRYPTOBER | APPLIED | 2019-11-25 | 123 | | UNILANE | APPLIED | 2019-11-25 | 124 | | IDIOZZY | APPLIED | 2019-11-25 | 125 | | ISOLOO | APPLIED | 2019-11-25 | 126 | | DEMOVUR | APPLIED | 2019-11-25 | 127 | | AGINTE | APPLIED | 2019-11-25 | 128 | | ALBICIOUS | APPLIED | 2019-11-25 | 129 | | AMBITRI | APPLIED | 2019-11-25 | 130 | | AMBITRI | REJECTED | 2019-11-25 | 131 | | SYMILE | APPLIED | 2019-11-25 | 132 | | YAKILIUMER | APPLIED | 2019-11-25 | 133 | | FLEMATE | APPLIED | 2019-11-25 | 134 | | BLUEPOD | APPLIED | 2019-11-25 | 135 | | YAKILIUMER | EMAILS | 2019-11-25 | 136 | | GABORLENOR | APPLIED | 2019-11-25 | 137 | | ROBOCADRE | APPLIED | 2019-11-25 | 138 | | GOOMDOR | APPLIED | 2019-11-25 | 139 | | ROTEBOTEDO | APPLIED | 2019-11-26 | 140 | | PEMBROTHER | APPLIED | 2019-11-26 | 141 | | BOKEMOKETOPER | APPLIED | 2019-11-26 | 142 | | GANO | APPLIED | 2019-11-26 | 143 | | FLEMATE | EMAILS | 2019-11-26 | 144 | | SUCORER | APPLIED | 2019-11-26 | 145 | | REPOZOO | APPLIED | 2019-11-26 | 146 | | AVUURA | APPLIED | 2019-11-26 | 147 | | UNILANE | REJECTED | 2019-11-26 | 148 | | AGINTE | EMAILS | 2019-11-27 | 149 | | AVUURA | REJECTED | 2019-11-27 | 150 | | UNILANE2 | APPLIED | 2019-11-27 | 151 | | SUCORER | REJECTED | 2019-11-27 | 152 | | ROBEDOBE | APPLIED | 2019-11-27 | 153 | | ANOR | APPLIED | 2019-11-27 | 154 | | LETOPE | APPLIED | 2019-11-27 | 155 | | AGUSAPARTE | APPLIED | 2019-11-27 | 156 | | BOKEMOKETOPER | EXERCISE_REQUEST | 2019-11-27 | 157 | | NACE | APPLIED | 2019-11-27 | 158 | | ISOLOO | REJECTED | 2019-11-27 | 159 | | IDIOZZY | REJECTED | 2019-11-27 | 160 | | GANO | REJECTED | 2019-11-28 | 161 | | AGINTE | INTERVIEW | 2019-11-29 | 162 | | FOOLAMINASTE | APPLIED | 2019-11-29 | 163 | | BOOG | APPLIED | 2019-11-29 | 164 | | COREDUL | APPLIED | 2019-11-29 | 165 | | MARTER | APPLIED | 2019-11-29 | 166 | | POKERCONNOR | APPLIED | 2019-11-29 | 167 | | LETOPE | INTERVIEW | 2019-11-29 | 168 | | PORESORE | APPLIED | 2019-12-01 | 169 | | REPOZOO | REJECTED | 2019-12-02 | 170 | | LETOPE | REJECTED | 2019-12-02 | 171 | | COREDUL | REJECTED | 2019-12-02 | 172 | | ROBOCADRE | REJECTED | 2019-12-02 | 173 | | NASTIPE | APPLIED | 2019-12-03 | 174 | | UNILANE2 | REJECTED | 2019-12-03 | 175 | | ANOR | INTERVIEW | 2019-12-03 | 176 | | FLEMATE | INTERVIEW | 2019-12-04 | 177 | | NASTIPE | INTERVIEW | 2019-12-04 | 178 | | GOOMDOR | REJECTED | 2019-12-04 | 179 | | COCOPARNABURN | APPLIED | 2019-12-05 | 180 | | ZOOXOR | APPLIED | 2019-12-05 | 181 | | AGINTE2 | APPLIED | 2019-12-05 | 182 | | BOKEMOKETOPER | EXERCISE_DONE | 2019-12-05 | 183 | | ARBORPALE | APPLIED | 2019-12-06 | 184 | | WOOBOORT | APPLIED | 2019-12-06 | 185 | | ANOR | REJECTED | 2019-12-09 | 186 | | FLEMATE | INTERVIEW | 2019-12-09 | 187 | | FLEMATE | OFFER | 2019-12-09 | 188 | | SYLER | APPLIED | 2019-12-09 | 189 | | COCE | APPLIED | 2019-12-09 | 190 | | HOOROOPO | APPLIED | 2019-12-09 | 191 | | BOKEMOKETOPER | REJECTED | 2019-12-10 | 192 | | WOOBOORT | REJECTED | 2019-12-10 | 193 | | MARTER | EXERCISE_REQUEST | 2019-12-10 | 194 | | MARTER | EXERCISE_DONE | 2019-12-10 | 195 | | SYLER | INTERVIEW | 2019-12-11 | 196 | | SYLER | INTERVIEW | 2019-12-12 | 197 | | NACE2 | APPLIED | 2019-12-12 | 198 | | PEMBROTHER | INTERVIEW | 2019-12-13 | 199 | | PEMBROTHER | EXERCISE_REQUEST | 2019-12-13 | 200 | | PEMBROTHER | EXERCISE_DONE | 2019-12-15 | 201 | | SYLER | REJECTED | 2019-12-16 | 202 | | FGHTANIO | APPLIED | 2019-12-16 | 203 | | AVINU | APPLIED | 2019-12-16 | 204 | | BUKULURUPOX | APPLIED | 2019-12-16 | 205 | | JUJUP | APPLIED | 2019-12-16 | 206 | | FRAMEPORCOCO | APPLIED | 2019-12-17 | 207 | | REPROCA | APPLIED | 2019-12-17 | 208 | | PUXXONA | APPLIED | 2019-12-17 | 209 | | BUKULURUPOX | INTERVIEW | 2019-12-17 | 210 | | AVINU | INTERVIEW | 2019-12-17 | 211 | | FLEMATE | DECLINED | 2019-12-17 | 212 | | ROTEBOTEDO2 | APPLIED | 2019-12-18 | 213 | | PERALTA | APPLIED | 2019-12-18 | 214 | | DOZENER | APPLIED | 2019-12-18 | 215 | | BUKULURUPOX | EXERCISE_REQUEST | 2019-12-18 | 216 | | AGINTE2 | INTERVIEW | 2019-12-18 | 217 | | REPROCA | EMAILS | 2019-12-19 | 218 | | BUKULURUPOX | EXERCISE_DONE | 2019-12-19 | 219 | | MARTER | INTERVIEW | 2019-12-19 | 220 | | SOAOK | APPLIED | 2019-12-19 | 221 | | COCE | DECLINED | 2019-12-20 | 222 | | NEXTPUPUS | APPLIED | 2019-12-20 | 223 | | DOZENER2 | APPLIED | 2019-12-20 | 224 | | PERALTA | REJECTED | 2019-12-20 | 225 | | CUCUPORI | APPLIED | 2019-12-23 | 226 | | VIVIZONI | APPLIED | 2019-12-26 | 227 | | FREPULATORING | APPLIED | 2019-12-26 | 228 | | BAKKANT | APPLIED | 2019-12-27 | 229 | | REPROCA | INTERVIEW | 2019-12-27 | 230 | | BUBONICA | APPLIED | 2020-01-03 | 231 | | REAITOR | APPLIED | 2020-01-03 | 232 | | FLIZZOG | APPLIED | 2020-01-03 | 233 | | BOOR | APPLIED | 2020-01-03 | 234 | | FROSTYMAN | APPLIED | 2020-01-03 | 235 | | PUNNY | APPLIED | 2020-01-03 | 236 | | XAXAPO | APPLIED | 2020-01-03 | 237 | | QOOBAR | APPLIED | 2020-01-03 | 238 | | PIXXOTE | APPLIED | 2020-01-03 | 239 | | AZZOOMR | APPLIED | 2020-01-03 | 240 | | NIXX | APPLIED | 2020-01-03 | 241 | | PULE | APPLIED | 2020-01-03 | 242 | | FLIZZOG | INTERVIEW | 2020-01-07 | 243 | | BUKULURUPOX | INTERVIEW | 2020-01-07 | 244 | | FLUZ | APPLIED | 2020-01-07 | 245 | | AVINU2 | APPLIED | 2020-01-07 | 246 | | WOWAWEWIWUPR | APPLIED | 2020-01-07 | 247 | | LEFTR | APPLIED | 2020-01-07 | 248 | | ZOOXOR | REJECTED | 2020-01-07 | 249 | | REPROCA | EXERCISE_REQUEST | 2020-01-08 | 250 | | REPROCA | EXERCISE_DONE | 2020-01-08 | 251 | | SOAOK | EMAILS | 2020-01-08 | 252 | | PACKGANO | APPLIED | 2020-01-08 | 253 | | CIZZZATROPEX | APPLIED | 2020-01-08 | 254 | | BAKKANT | INTERVIEW | 2020-01-08 | 255 | | SOAOK | REJECTED | 2020-01-08 | 256 | | DOZENER | REJECTED | 2020-01-09 | 257 | | BUBUCUCURUCUS2 | APPLIED | 2020-01-09 | 258 | | FUSTIN | APPLIED | 2020-01-09 | 259 | | AVINU2 | INTERVIEW | 2020-01-09 | 260 | | VAVIT | APPLIED | 2020-01-09 | 261 | | CIZZZATROPEX | INTERVIEW | 2020-01-10 | 262 | | LOROPE | APPLIED | 2020-01-10 | 263 | | BUKULURUPOX | REJECTED | 2020-01-10 | 264 | | PULE | INTERVIEW | 2020-01-10 | 265 | | PULE | EXERCISE_REQUEST | 2020-01-10 | 266 | | CIZZZATROPEX | EXERCISE_REQUEST | 2020-01-10 | 267 | | CIZZZATROPEX | EXERCISE_DONE | 2020-01-12 | 268 | | LEFTR | REJECTED | 2020-01-13 | 269 | | FLIZZOG | REJECTED | 2020-01-13 | 270 | | BAKKANT | EXERCISE_REQUEST | 2020-01-13 | 271 | | BAKKANT | EXERCISE_DONE | 2020-01-13 | 272 | | REPROCA | INTERVIEW | 2020-01-13 | 273 | | PULE | EXERCISE_DONE | 2020-01-13 | 274 | | LOGOPOTE | APPLIED | 2020-01-14 | 275 | | CIZZZATROPEX | INTERVIEW | 2020-01-14 | 276 | | VAVIT | REJECTED | 2020-01-14 | 277 | | LOROPE | INTERVIEW | 2020-01-15 | 278 | | WOWAWEWIWUPR | INTERVIEW | 2020-01-15 | 279 | | LOGOPOTE | INTERVIEW | 2020-01-15 | 280 | | BORNEMASTEROR | APPLIED | 2020-01-15 | 281 | | BUBUCUCURUCUS3 | APPLIED | 2020-01-15 | 282 | | GHOOPOHOOZU | APPLIED | 2020-01-15 | 283 | | ESPELUZAN | APPLIED | 2020-01-15 | 284 | | LOROPE | EXERCISE_REQUEST | 2020-01-16 | 285 | | LOROPE | EXERCISE_DONE | 2020-01-16 | 286 | | REPROCA | REJECTED | 2020-01-16 | 287 | | CIZZZATROPEX | INTERVIEW | 2020-01-16 | 288 | | BAKKANT | INTERVIEW | 2020-01-17 | 289 | | CIZZZATROPEX | INTERVIEW | 2020-01-20 | 290 | | WOWAWEWIWUPR | REJECTED | 2020-01-20 | 291 | | PULE | REJECTED | 2020-01-20 | 292 | | SLICEMACHINE | REJECTED | 2020-01-20 | 293 | | BAKKANT | INTERVIEW | 2020-01-21 | 294 | | CIZZZATROPEX | OFFER | 2020-01-22 | 295 | | AGINTE2 | INTERVIEW | 2020-01-24 | 296 | | PEMBROTHER | INTERVIEW | 2020-01-27 | 297 | | AVINU2 | INTERVIEW | 2020-01-28 | 298 | 299 | Table: job_events 300 | 301 | # Reports 302 | 303 | This table just lists all events, adding the job headline and days from the 304 | first even and days to "now". 305 | 306 | ```pandocsql 307 | with start_date(start_ts) as (select min(ts) from job_events) 308 | select ts, 309 | (strftime('%s','2020-01-27') - strftime('%s', ts)) / (60*60*24) as days_to_now, 310 | (strftime('%s',ts) - strftime('%s', start_ts)) / (60*60*24) as days_from_start, 311 | job, 312 | event, 313 | company, 314 | headline 315 | from ( 316 | select ts, job, event, company, headline 317 | from job_events 318 | left join jobs using(job) 319 | ) all_events 320 | join start_date 321 | order by ts 322 | ``` 323 | 324 | This lists active jobs (which have an event other than `APPLIED` and which have 325 | not been `REJECTED` or `DECLINED`), with date of the last event and headline. 326 | 327 | ```pandocsql 328 | select job, company, headline, found_on, max(ts) as last_event 329 | from jobs 330 | join job_events using (job) 331 | where not exists ( 332 | select 1 333 | from job_events 334 | where jobs.job = job_events.job 335 | and job_events.event in ('REJECTED', 'DECLINED') 336 | ) 337 | and job_events.event not in ('APPLIED') 338 | group by job, company, headline, found_on 339 | order by last_event desc 340 | ``` 341 | 342 | This is a referrer report. Shows how many applications done through each referrer 343 | and date of last application (to see if you should check that referrer again). 344 | 345 | ```pandocsql 346 | select found_on, max(ts) as last_applied, count(*) as applications 347 | from jobs 348 | join job_events using (job) 349 | where event = 'APPLIED' 350 | group by found_on 351 | order by max(ts) 352 | ``` 353 | 354 | Counts applications per week: 355 | 356 | ```pandocsql 357 | with start_date(start_ts) as (select min(ts) from job_events) 358 | select (strftime('%s',ts) - strftime('%s', start_ts)) / (60*60*24*7) as weeks_from_start, count(*) applications 359 | from job_events 360 | join start_date 361 | where event = 'APPLIED' 362 | group by (strftime('%s',ts) - strftime('%s', start_ts)) / (60*60*24*7) 363 | order by (strftime('%s',ts) - strftime('%s', start_ts)) / (60*60*24*7) 364 | ``` 365 | 366 | Counts event types: 367 | 368 | ```pandocsql 369 | select event, count(*) as quantity 370 | from job_events 371 | group by event 372 | ``` 373 | 374 | Groups job applications by their "event log". For instance, jobs where you 375 | `APPLY`ed and there was no response, `REJECTED` after `APPLY`, etc. 376 | 377 | ```pandocsql 378 | select events, count(*) as instances, group_concat(job, ', ') jobs 379 | from ( 380 | select job, group_concat(event, ', ') as events 381 | from job_events 382 | group by job 383 | ) 384 | group by events 385 | order by count(*) desc 386 | ``` 387 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "asttokens" 5 | version = "2.4.0" 6 | description = "Annotate AST trees with source code positions" 7 | optional = false 8 | python-versions = "*" 9 | files = [ 10 | {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, 11 | {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, 12 | ] 13 | 14 | [package.dependencies] 15 | six = ">=1.12.0" 16 | 17 | [package.extras] 18 | test = ["astroid", "pytest"] 19 | 20 | [[package]] 21 | name = "black" 22 | version = "24.3.0" 23 | description = "The uncompromising code formatter." 24 | optional = false 25 | python-versions = ">=3.8" 26 | files = [ 27 | {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, 28 | {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, 29 | {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, 30 | {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, 31 | {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, 32 | {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, 33 | {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, 34 | {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, 35 | {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, 36 | {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, 37 | {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, 38 | {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, 39 | {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, 40 | {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, 41 | {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, 42 | {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, 43 | {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, 44 | {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, 45 | {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, 46 | {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, 47 | {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, 48 | {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, 49 | ] 50 | 51 | [package.dependencies] 52 | click = ">=8.0.0" 53 | mypy-extensions = ">=0.4.3" 54 | packaging = ">=22.0" 55 | pathspec = ">=0.9.0" 56 | platformdirs = ">=2" 57 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 58 | typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} 59 | 60 | [package.extras] 61 | colorama = ["colorama (>=0.4.3)"] 62 | d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] 63 | jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] 64 | uvloop = ["uvloop (>=0.15.2)"] 65 | 66 | [[package]] 67 | name = "click" 68 | version = "8.1.7" 69 | description = "Composable command line interface toolkit" 70 | optional = false 71 | python-versions = ">=3.7" 72 | files = [ 73 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 74 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 75 | ] 76 | 77 | [package.dependencies] 78 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 79 | 80 | [[package]] 81 | name = "colorama" 82 | version = "0.4.6" 83 | description = "Cross-platform colored terminal text." 84 | optional = false 85 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 86 | files = [ 87 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 88 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 89 | ] 90 | 91 | [[package]] 92 | name = "decorator" 93 | version = "5.1.1" 94 | description = "Decorators for Humans" 95 | optional = false 96 | python-versions = ">=3.5" 97 | files = [ 98 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, 99 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, 100 | ] 101 | 102 | [[package]] 103 | name = "exceptiongroup" 104 | version = "1.1.3" 105 | description = "Backport of PEP 654 (exception groups)" 106 | optional = false 107 | python-versions = ">=3.7" 108 | files = [ 109 | {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, 110 | {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, 111 | ] 112 | 113 | [package.extras] 114 | test = ["pytest (>=6)"] 115 | 116 | [[package]] 117 | name = "executing" 118 | version = "1.2.0" 119 | description = "Get the currently executing AST node of a frame, and other information" 120 | optional = false 121 | python-versions = "*" 122 | files = [ 123 | {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, 124 | {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, 125 | ] 126 | 127 | [package.extras] 128 | tests = ["asttokens", "littleutils", "pytest", "rich"] 129 | 130 | [[package]] 131 | name = "flake8" 132 | version = "7.0.0" 133 | description = "the modular source code checker: pep8 pyflakes and co" 134 | optional = false 135 | python-versions = ">=3.8.1" 136 | files = [ 137 | {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, 138 | {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, 139 | ] 140 | 141 | [package.dependencies] 142 | mccabe = ">=0.7.0,<0.8.0" 143 | pycodestyle = ">=2.11.0,<2.12.0" 144 | pyflakes = ">=3.2.0,<3.3.0" 145 | 146 | [[package]] 147 | name = "flake8-black" 148 | version = "0.3.6" 149 | description = "flake8 plugin to call black as a code style validator" 150 | optional = false 151 | python-versions = ">=3.7" 152 | files = [ 153 | {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, 154 | {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, 155 | ] 156 | 157 | [package.dependencies] 158 | black = ">=22.1.0" 159 | flake8 = ">=3" 160 | tomli = {version = "*", markers = "python_version < \"3.11\""} 161 | 162 | [package.extras] 163 | develop = ["build", "twine"] 164 | 165 | [[package]] 166 | name = "ipdb" 167 | version = "0.13.13" 168 | description = "IPython-enabled pdb" 169 | optional = false 170 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 171 | files = [ 172 | {file = "ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4"}, 173 | {file = "ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726"}, 174 | ] 175 | 176 | [package.dependencies] 177 | decorator = {version = "*", markers = "python_version > \"3.6\""} 178 | ipython = {version = ">=7.31.1", markers = "python_version > \"3.6\""} 179 | tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < \"3.11\""} 180 | 181 | [[package]] 182 | name = "ipython" 183 | version = "8.18.1" 184 | description = "IPython: Productive Interactive Computing" 185 | optional = false 186 | python-versions = ">=3.9" 187 | files = [ 188 | {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, 189 | {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, 190 | ] 191 | 192 | [package.dependencies] 193 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 194 | decorator = "*" 195 | exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} 196 | jedi = ">=0.16" 197 | matplotlib-inline = "*" 198 | pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} 199 | prompt-toolkit = ">=3.0.41,<3.1.0" 200 | pygments = ">=2.4.0" 201 | stack-data = "*" 202 | traitlets = ">=5" 203 | typing-extensions = {version = "*", markers = "python_version < \"3.10\""} 204 | 205 | [package.extras] 206 | all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] 207 | black = ["black"] 208 | doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] 209 | kernel = ["ipykernel"] 210 | nbconvert = ["nbconvert"] 211 | nbformat = ["nbformat"] 212 | notebook = ["ipywidgets", "notebook"] 213 | parallel = ["ipyparallel"] 214 | qtconsole = ["qtconsole"] 215 | test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] 216 | test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] 217 | 218 | [[package]] 219 | name = "jedi" 220 | version = "0.19.0" 221 | description = "An autocompletion tool for Python that can be used for text editors." 222 | optional = false 223 | python-versions = ">=3.6" 224 | files = [ 225 | {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, 226 | {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, 227 | ] 228 | 229 | [package.dependencies] 230 | parso = ">=0.8.3,<0.9.0" 231 | 232 | [package.extras] 233 | docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] 234 | qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] 235 | testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] 236 | 237 | [[package]] 238 | name = "matplotlib-inline" 239 | version = "0.1.6" 240 | description = "Inline Matplotlib backend for Jupyter" 241 | optional = false 242 | python-versions = ">=3.5" 243 | files = [ 244 | {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, 245 | {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, 246 | ] 247 | 248 | [package.dependencies] 249 | traitlets = "*" 250 | 251 | [[package]] 252 | name = "mccabe" 253 | version = "0.7.0" 254 | description = "McCabe checker, plugin for flake8" 255 | optional = false 256 | python-versions = ">=3.6" 257 | files = [ 258 | {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, 259 | {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, 260 | ] 261 | 262 | [[package]] 263 | name = "mypy-extensions" 264 | version = "1.0.0" 265 | description = "Type system extensions for programs checked with the mypy type checker." 266 | optional = false 267 | python-versions = ">=3.5" 268 | files = [ 269 | {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, 270 | {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, 271 | ] 272 | 273 | [[package]] 274 | name = "packaging" 275 | version = "23.1" 276 | description = "Core utilities for Python packages" 277 | optional = false 278 | python-versions = ">=3.7" 279 | files = [ 280 | {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, 281 | {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, 282 | ] 283 | 284 | [[package]] 285 | name = "panflute" 286 | version = "2.3.0" 287 | description = "Pythonic Pandoc filters" 288 | optional = false 289 | python-versions = ">=3.6" 290 | files = [ 291 | {file = "panflute-2.3.0-py3-none-any.whl", hash = "sha256:02673bcbdb521a805f08a2ca0ce864de86ad409ad406a01b3700fcf2aca81635"}, 292 | {file = "panflute-2.3.0.tar.gz", hash = "sha256:cefd9dfc48ccd9732a53db57610701d22806da397a8a97e5cc8dc070b55865ca"}, 293 | ] 294 | 295 | [package.dependencies] 296 | click = ">=6,<9" 297 | pyyaml = ">=3,<7" 298 | 299 | [package.extras] 300 | dev = ["configparser", "coverage", "flake8", "pandocfilters", "pytest", "pytest-cov", "requests"] 301 | extras = ["yamlloader (>=1,<2)"] 302 | pypi = ["Pygments", "docutils", "twine", "wheel"] 303 | 304 | [[package]] 305 | name = "parso" 306 | version = "0.8.3" 307 | description = "A Python Parser" 308 | optional = false 309 | python-versions = ">=3.6" 310 | files = [ 311 | {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, 312 | {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, 313 | ] 314 | 315 | [package.extras] 316 | qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] 317 | testing = ["docopt", "pytest (<6.0.0)"] 318 | 319 | [[package]] 320 | name = "pathspec" 321 | version = "0.11.2" 322 | description = "Utility library for gitignore style pattern matching of file paths." 323 | optional = false 324 | python-versions = ">=3.7" 325 | files = [ 326 | {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, 327 | {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, 328 | ] 329 | 330 | [[package]] 331 | name = "pexpect" 332 | version = "4.8.0" 333 | description = "Pexpect allows easy control of interactive console applications." 334 | optional = false 335 | python-versions = "*" 336 | files = [ 337 | {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, 338 | {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, 339 | ] 340 | 341 | [package.dependencies] 342 | ptyprocess = ">=0.5" 343 | 344 | [[package]] 345 | name = "platformdirs" 346 | version = "3.10.0" 347 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 348 | optional = false 349 | python-versions = ">=3.7" 350 | files = [ 351 | {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, 352 | {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, 353 | ] 354 | 355 | [package.extras] 356 | docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] 357 | test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] 358 | 359 | [[package]] 360 | name = "prompt-toolkit" 361 | version = "3.0.41" 362 | description = "Library for building powerful interactive command lines in Python" 363 | optional = false 364 | python-versions = ">=3.7.0" 365 | files = [ 366 | {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, 367 | {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, 368 | ] 369 | 370 | [package.dependencies] 371 | wcwidth = "*" 372 | 373 | [[package]] 374 | name = "ptyprocess" 375 | version = "0.7.0" 376 | description = "Run a subprocess in a pseudo terminal" 377 | optional = false 378 | python-versions = "*" 379 | files = [ 380 | {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, 381 | {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, 382 | ] 383 | 384 | [[package]] 385 | name = "pure-eval" 386 | version = "0.2.2" 387 | description = "Safely evaluate AST nodes without side effects" 388 | optional = false 389 | python-versions = "*" 390 | files = [ 391 | {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, 392 | {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, 393 | ] 394 | 395 | [package.extras] 396 | tests = ["pytest"] 397 | 398 | [[package]] 399 | name = "pycodestyle" 400 | version = "2.11.0" 401 | description = "Python style guide checker" 402 | optional = false 403 | python-versions = ">=3.8" 404 | files = [ 405 | {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, 406 | {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, 407 | ] 408 | 409 | [[package]] 410 | name = "pyflakes" 411 | version = "3.2.0" 412 | description = "passive checker of Python programs" 413 | optional = false 414 | python-versions = ">=3.8" 415 | files = [ 416 | {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, 417 | {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, 418 | ] 419 | 420 | [[package]] 421 | name = "pygments" 422 | version = "2.16.1" 423 | description = "Pygments is a syntax highlighting package written in Python." 424 | optional = false 425 | python-versions = ">=3.7" 426 | files = [ 427 | {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, 428 | {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, 429 | ] 430 | 431 | [package.extras] 432 | plugins = ["importlib-metadata"] 433 | 434 | [[package]] 435 | name = "pyyaml" 436 | version = "6.0.1" 437 | description = "YAML parser and emitter for Python" 438 | optional = false 439 | python-versions = ">=3.6" 440 | files = [ 441 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, 442 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, 443 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, 444 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, 445 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, 446 | {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, 447 | {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, 448 | {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, 449 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, 450 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, 451 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, 452 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, 453 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, 454 | {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, 455 | {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, 456 | {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, 457 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, 458 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, 459 | {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, 460 | {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, 461 | {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, 462 | {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, 463 | {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, 464 | {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, 465 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, 466 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, 467 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, 468 | {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, 469 | {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, 470 | {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, 471 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, 472 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, 473 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, 474 | {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, 475 | {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, 476 | {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, 477 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, 478 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, 479 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, 480 | {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, 481 | {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, 482 | {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, 483 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, 484 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, 485 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, 486 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, 487 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, 488 | {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, 489 | {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, 490 | {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, 491 | {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, 492 | ] 493 | 494 | [[package]] 495 | name = "six" 496 | version = "1.16.0" 497 | description = "Python 2 and 3 compatibility utilities" 498 | optional = false 499 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 500 | files = [ 501 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 502 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 503 | ] 504 | 505 | [[package]] 506 | name = "stack-data" 507 | version = "0.6.2" 508 | description = "Extract data from python stack frames and tracebacks for informative displays" 509 | optional = false 510 | python-versions = "*" 511 | files = [ 512 | {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, 513 | {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, 514 | ] 515 | 516 | [package.dependencies] 517 | asttokens = ">=2.1.0" 518 | executing = ">=1.2.0" 519 | pure-eval = "*" 520 | 521 | [package.extras] 522 | tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] 523 | 524 | [[package]] 525 | name = "tomli" 526 | version = "2.0.1" 527 | description = "A lil' TOML parser" 528 | optional = false 529 | python-versions = ">=3.7" 530 | files = [ 531 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 532 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 533 | ] 534 | 535 | [[package]] 536 | name = "traitlets" 537 | version = "5.9.0" 538 | description = "Traitlets Python configuration system" 539 | optional = false 540 | python-versions = ">=3.7" 541 | files = [ 542 | {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, 543 | {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, 544 | ] 545 | 546 | [package.extras] 547 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] 548 | test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] 549 | 550 | [[package]] 551 | name = "typing-extensions" 552 | version = "4.7.1" 553 | description = "Backported and Experimental Type Hints for Python 3.7+" 554 | optional = false 555 | python-versions = ">=3.7" 556 | files = [ 557 | {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, 558 | {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, 559 | ] 560 | 561 | [[package]] 562 | name = "wcwidth" 563 | version = "0.2.6" 564 | description = "Measures the displayed width of unicode strings in a terminal" 565 | optional = false 566 | python-versions = "*" 567 | files = [ 568 | {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, 569 | {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, 570 | ] 571 | 572 | [metadata] 573 | lock-version = "2.0" 574 | python-versions = "^3.9" 575 | content-hash = "435abea8a4e1f86df1f1e34357ee59af3e9d999789c5f2230c1ea599265a8924" 576 | -------------------------------------------------------------------------------- /examples/job-search-output.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | This is an adaptation of the document I used to track my last job 4 | search. The names of companies have been scrubbed and I have made a few 5 | modifications to make a better example. 6 | 7 | After installing `pandocsql`, you can process this document with: 8 | 9 | $ pandoc job-search.md -F pandocsql -o job-search.html 10 | 11 | You can see the output [here](job-search-output.md) 12 | 13 | # Data entry 14 | 15 | This is the main table tracking jobs you have applied to. I had a URL 16 | pointing to the offer, but faking that data sounded useless so I removed 17 | it. This can handle multiple jobs from the same company. Extra columns 18 | could be added to track job properties, etc. 19 | 20 | The other table is for job events. The job column should match the job 21 | column in the table above. 22 | 23 | # Reports 24 | 25 | This table just lists all events, adding the job headline and days from 26 | the first even and days to 27 | “now”. 28 | 29 | | ts | days\_to\_now | days\_from\_start | job | event | company | headline | 30 | | ---------- | ------------- | ----------------- | -------------- | ----------------- | -------------- | ------------------------------------------------ | 31 | | 2019-11-22 | 66 | 0 | METACERO | APPLIED | METACERO | Text to display in some reports… status, etc. | 32 | | 2019-11-25 | 63 | 3 | CRYPTOBER | APPLIED | CRYPTOBER | | 33 | | 2019-11-25 | 63 | 3 | UNILANE | APPLIED | UNILANE | | 34 | | 2019-11-25 | 63 | 3 | IDIOZZY | APPLIED | IDIOZZY | | 35 | | 2019-11-25 | 63 | 3 | ISOLOO | APPLIED | ISOLOO | | 36 | | 2019-11-25 | 63 | 3 | DEMOVUR | APPLIED | DEMOVUR | | 37 | | 2019-11-25 | 63 | 3 | AGINTE | APPLIED | AGINTE | | 38 | | 2019-11-25 | 63 | 3 | ALBICIOUS | APPLIED | ALBICIOUS | | 39 | | 2019-11-25 | 63 | 3 | AMBITRI | APPLIED | AMBITRI | | 40 | | 2019-11-25 | 63 | 3 | AMBITRI | REJECTED | AMBITRI | | 41 | | 2019-11-25 | 63 | 3 | SYMILE | APPLIED | SYMILE | | 42 | | 2019-11-25 | 63 | 3 | YAKILIUMER | APPLIED | YAKILIUMER | | 43 | | 2019-11-25 | 63 | 3 | FLEMATE | APPLIED | FLEMATE | | 44 | | 2019-11-25 | 63 | 3 | BLUEPOD | APPLIED | BLUEPOD | | 45 | | 2019-11-25 | 63 | 3 | YAKILIUMER | EMAILS | YAKILIUMER | | 46 | | 2019-11-25 | 63 | 3 | GABORLENOR | APPLIED | GABORLENOR | | 47 | | 2019-11-25 | 63 | 3 | ROBOCADRE | APPLIED | ROBOCADRE | | 48 | | 2019-11-25 | 63 | 3 | GOOMDOR | APPLIED | GOOMDOR | | 49 | | 2019-11-26 | 62 | 4 | ROTEBOTEDO | APPLIED | ROTEBOTEDO | | 50 | | 2019-11-26 | 62 | 4 | PEMBROTHER | APPLIED | PEMBROTHER | | 51 | | 2019-11-26 | 62 | 4 | BOKEMOKETOPER | APPLIED | BOKEMOKETOPER | | 52 | | 2019-11-26 | 62 | 4 | GANO | APPLIED | GANO | | 53 | | 2019-11-26 | 62 | 4 | FLEMATE | EMAILS | FLEMATE | | 54 | | 2019-11-26 | 62 | 4 | SUCORER | APPLIED | SUCORER | | 55 | | 2019-11-26 | 62 | 4 | REPOZOO | APPLIED | REPOZOO | | 56 | | 2019-11-26 | 62 | 4 | AVUURA | APPLIED | AVUURA | | 57 | | 2019-11-26 | 62 | 4 | UNILANE | REJECTED | UNILANE | | 58 | | 2019-11-27 | 61 | 5 | AGINTE | EMAILS | AGINTE | | 59 | | 2019-11-27 | 61 | 5 | AVUURA | REJECTED | AVUURA | | 60 | | 2019-11-27 | 61 | 5 | UNILANE2 | APPLIED | UNILANE | | 61 | | 2019-11-27 | 61 | 5 | SUCORER | REJECTED | SUCORER | | 62 | | 2019-11-27 | 61 | 5 | ROBEDOBE | APPLIED | ROBEDOBE | | 63 | | 2019-11-27 | 61 | 5 | ANOR | APPLIED | ANOR | | 64 | | 2019-11-27 | 61 | 5 | LETOPE | APPLIED | LETOPE | | 65 | | 2019-11-27 | 61 | 5 | AGUSAPARTE | APPLIED | AGUSAPARTE | | 66 | | 2019-11-27 | 61 | 5 | BOKEMOKETOPER | EXERCISE\_REQUEST | BOKEMOKETOPER | | 67 | | 2019-11-27 | 61 | 5 | NACE | APPLIED | NACE | | 68 | | 2019-11-27 | 61 | 5 | ISOLOO | REJECTED | ISOLOO | | 69 | | 2019-11-27 | 61 | 5 | IDIOZZY | REJECTED | IDIOZZY | | 70 | | 2019-11-28 | 60 | 6 | GANO | REJECTED | GANO | | 71 | | 2019-11-29 | 59 | 7 | AGINTE | INTERVIEW | AGINTE | | 72 | | 2019-11-29 | 59 | 7 | FOOLAMINASTE | APPLIED | FOOLAMINASTE | | 73 | | 2019-11-29 | 59 | 7 | BOOG | APPLIED | BOOG | | 74 | | 2019-11-29 | 59 | 7 | COREDUL | APPLIED | COREDUL | | 75 | | 2019-11-29 | 59 | 7 | MARTER | APPLIED | MARTER | | 76 | | 2019-11-29 | 59 | 7 | POKERCONNOR | APPLIED | POKERCONNOR | | 77 | | 2019-11-29 | 59 | 7 | LETOPE | INTERVIEW | LETOPE | | 78 | | 2019-12-01 | 57 | 9 | PORESORE | APPLIED | PORESORE | | 79 | | 2019-12-02 | 56 | 10 | REPOZOO | REJECTED | REPOZOO | | 80 | | 2019-12-02 | 56 | 10 | LETOPE | REJECTED | LETOPE | | 81 | | 2019-12-02 | 56 | 10 | COREDUL | REJECTED | COREDUL | | 82 | | 2019-12-02 | 56 | 10 | ROBOCADRE | REJECTED | ROBOCADRE | | 83 | | 2019-12-03 | 55 | 11 | NASTIPE | APPLIED | NASTIPE | Interesting, but I don’t like their mission | 84 | | 2019-12-03 | 55 | 11 | UNILANE2 | REJECTED | UNILANE | | 85 | | 2019-12-03 | 55 | 11 | ANOR | INTERVIEW | ANOR | | 86 | | 2019-12-04 | 54 | 12 | FLEMATE | INTERVIEW | FLEMATE | | 87 | | 2019-12-04 | 54 | 12 | NASTIPE | INTERVIEW | NASTIPE | Interesting, but I don’t like their mission | 88 | | 2019-12-04 | 54 | 12 | GOOMDOR | REJECTED | GOOMDOR | | 89 | | 2019-12-05 | 53 | 13 | COCOPARNABURN | APPLIED | COCOPARNABURN | | 90 | | 2019-12-05 | 53 | 13 | ZOOXOR | APPLIED | ZOOXOR | | 91 | | 2019-12-05 | 53 | 13 | AGINTE2 | APPLIED | AGINTE | | 92 | | 2019-12-05 | 53 | 13 | BOKEMOKETOPER | EXERCISE\_DONE | BOKEMOKETOPER | | 93 | | 2019-12-06 | 52 | 14 | ARBORPALE | APPLIED | ARBORPALE | | 94 | | 2019-12-06 | 52 | 14 | WOOBOORT | APPLIED | WOOBOORT | | 95 | | 2019-12-09 | 49 | 17 | ANOR | REJECTED | ANOR | | 96 | | 2019-12-09 | 49 | 17 | FLEMATE | INTERVIEW | FLEMATE | | 97 | | 2019-12-09 | 49 | 17 | FLEMATE | OFFER | FLEMATE | | 98 | | 2019-12-09 | 49 | 17 | SYLER | APPLIED | SYLER | | 99 | | 2019-12-09 | 49 | 17 | COCE | APPLIED | COCE | | 100 | | 2019-12-09 | 49 | 17 | HOOROOPO | APPLIED | HOOROOPO | | 101 | | 2019-12-10 | 48 | 18 | BOKEMOKETOPER | REJECTED | BOKEMOKETOPER | | 102 | | 2019-12-10 | 48 | 18 | WOOBOORT | REJECTED | WOOBOORT | | 103 | | 2019-12-10 | 48 | 18 | MARTER | EXERCISE\_REQUEST | MARTER | | 104 | | 2019-12-10 | 48 | 18 | MARTER | EXERCISE\_DONE | MARTER | | 105 | | 2019-12-11 | 47 | 19 | SYLER | INTERVIEW | SYLER | | 106 | | 2019-12-12 | 46 | 20 | SYLER | INTERVIEW | SYLER | | 107 | | 2019-12-12 | 46 | 20 | NACE2 | APPLIED | NACE | | 108 | | 2019-12-13 | 45 | 21 | PEMBROTHER | INTERVIEW | PEMBROTHER | | 109 | | 2019-12-13 | 45 | 21 | PEMBROTHER | EXERCISE\_REQUEST | PEMBROTHER | | 110 | | 2019-12-15 | 43 | 23 | PEMBROTHER | EXERCISE\_DONE | PEMBROTHER | | 111 | | 2019-12-16 | 42 | 24 | SYLER | REJECTED | SYLER | | 112 | | 2019-12-16 | 42 | 24 | FGHTANIO | APPLIED | FGHTANIO | | 113 | | 2019-12-16 | 42 | 24 | AVINU | APPLIED | AVINU | | 114 | | 2019-12-16 | 42 | 24 | BUKULURUPOX | APPLIED | BUKULURUPOX | | 115 | | 2019-12-16 | 42 | 24 | JUJUP | APPLIED | JUJUP | | 116 | | 2019-12-17 | 41 | 25 | FRAMEPORCOCO | APPLIED | FRAMEPORCOCO | | 117 | | 2019-12-17 | 41 | 25 | REPROCA | APPLIED | REPROCA | | 118 | | 2019-12-17 | 41 | 25 | PUXXONA | APPLIED | PUXXONA | | 119 | | 2019-12-17 | 41 | 25 | BUKULURUPOX | INTERVIEW | BUKULURUPOX | | 120 | | 2019-12-17 | 41 | 25 | AVINU | INTERVIEW | AVINU | | 121 | | 2019-12-17 | 41 | 25 | FLEMATE | DECLINED | FLEMATE | | 122 | | 2019-12-18 | 40 | 26 | ROTEBOTEDO2 | APPLIED | ROTEBOTEDO | | 123 | | 2019-12-18 | 40 | 26 | PERALTA | APPLIED | PERALTA | | 124 | | 2019-12-18 | 40 | 26 | DOZENER | APPLIED | DOZENER | | 125 | | 2019-12-18 | 40 | 26 | BUKULURUPOX | EXERCISE\_REQUEST | BUKULURUPOX | | 126 | | 2019-12-18 | 40 | 26 | AGINTE2 | INTERVIEW | AGINTE | | 127 | | 2019-12-19 | 39 | 27 | REPROCA | EMAILS | REPROCA | | 128 | | 2019-12-19 | 39 | 27 | BUKULURUPOX | EXERCISE\_DONE | BUKULURUPOX | | 129 | | 2019-12-19 | 39 | 27 | MARTER | INTERVIEW | MARTER | | 130 | | 2019-12-19 | 39 | 27 | SOAOK | APPLIED | SOAOK | | 131 | | 2019-12-20 | 38 | 28 | COCE | DECLINED | COCE | | 132 | | 2019-12-20 | 38 | 28 | NEXTPUPUS | APPLIED | NEXTPUPUS | | 133 | | 2019-12-20 | 38 | 28 | DOZENER2 | APPLIED | DOZENER | | 134 | | 2019-12-20 | 38 | 28 | PERALTA | REJECTED | PERALTA | | 135 | | 2019-12-23 | 35 | 31 | CUCUPORI | APPLIED | CUCUPORI | | 136 | | 2019-12-26 | 32 | 34 | VIVIZONI | APPLIED | VIVIZONI | | 137 | | 2019-12-26 | 32 | 34 | FREPULATORING | APPLIED | FREPULATORING | | 138 | | 2019-12-27 | 31 | 35 | BAKKANT | APPLIED | BAKKANT | | 139 | | 2019-12-27 | 31 | 35 | REPROCA | INTERVIEW | REPROCA | | 140 | | 2020-01-03 | 24 | 42 | BUBONICA | APPLIED | BUBONICA | | 141 | | 2020-01-03 | 24 | 42 | REAITOR | APPLIED | REAITOR | | 142 | | 2020-01-03 | 24 | 42 | FLIZZOG | APPLIED | FLIZZOG | | 143 | | 2020-01-03 | 24 | 42 | BOOR | APPLIED | BOOR | | 144 | | 2020-01-03 | 24 | 42 | FROSTYMAN | APPLIED | FROSTYMAN | | 145 | | 2020-01-03 | 24 | 42 | PUNNY | APPLIED | PUNNY | | 146 | | 2020-01-03 | 24 | 42 | XAXAPO | APPLIED | XAXAPO | | 147 | | 2020-01-03 | 24 | 42 | QOOBAR | APPLIED | QOOBAR | | 148 | | 2020-01-03 | 24 | 42 | PIXXOTE | APPLIED | PIXXOTE | | 149 | | 2020-01-03 | 24 | 42 | AZZOOMR | APPLIED | AZZOOMR | | 150 | | 2020-01-03 | 24 | 42 | NIXX | APPLIED | NIXX | | 151 | | 2020-01-03 | 24 | 42 | PULE | APPLIED | PULE | | 152 | | 2020-01-07 | 20 | 46 | FLIZZOG | INTERVIEW | FLIZZOG | | 153 | | 2020-01-07 | 20 | 46 | BUKULURUPOX | INTERVIEW | BUKULURUPOX | | 154 | | 2020-01-07 | 20 | 46 | FLUZ | APPLIED | FLUZ | | 155 | | 2020-01-07 | 20 | 46 | AVINU2 | APPLIED | AVINU | | 156 | | 2020-01-07 | 20 | 46 | WOWAWEWIWUPR | APPLIED | WOWAWEWIWUPR | | 157 | | 2020-01-07 | 20 | 46 | LEFTR | APPLIED | LEFTR | | 158 | | 2020-01-07 | 20 | 46 | ZOOXOR | REJECTED | ZOOXOR | | 159 | | 2020-01-08 | 19 | 47 | REPROCA | EXERCISE\_REQUEST | REPROCA | | 160 | | 2020-01-08 | 19 | 47 | REPROCA | EXERCISE\_DONE | REPROCA | | 161 | | 2020-01-08 | 19 | 47 | SOAOK | EMAILS | SOAOK | | 162 | | 2020-01-08 | 19 | 47 | PACKGANO | APPLIED | PACKGANO | | 163 | | 2020-01-08 | 19 | 47 | CIZZZATROPEX | APPLIED | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 164 | | 2020-01-08 | 19 | 47 | BAKKANT | INTERVIEW | BAKKANT | | 165 | | 2020-01-08 | 19 | 47 | SOAOK | REJECTED | SOAOK | | 166 | | 2020-01-09 | 18 | 48 | DOZENER | REJECTED | DOZENER | | 167 | | 2020-01-09 | 18 | 48 | BUBUCUCURUCUS2 | APPLIED | BUBUCUCURUCUS2 | | 168 | | 2020-01-09 | 18 | 48 | FUSTIN | APPLIED | FUSTIN | | 169 | | 2020-01-09 | 18 | 48 | AVINU2 | INTERVIEW | AVINU | | 170 | | 2020-01-09 | 18 | 48 | VAVIT | APPLIED | VAVIT | | 171 | | 2020-01-10 | 17 | 49 | CIZZZATROPEX | INTERVIEW | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 172 | | 2020-01-10 | 17 | 49 | LOROPE | APPLIED | LOROPE | | 173 | | 2020-01-10 | 17 | 49 | BUKULURUPOX | REJECTED | BUKULURUPOX | | 174 | | 2020-01-10 | 17 | 49 | PULE | INTERVIEW | PULE | | 175 | | 2020-01-10 | 17 | 49 | PULE | EXERCISE\_REQUEST | PULE | | 176 | | 2020-01-10 | 17 | 49 | CIZZZATROPEX | EXERCISE\_REQUEST | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 177 | | 2020-01-12 | 15 | 51 | CIZZZATROPEX | EXERCISE\_DONE | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 178 | | 2020-01-13 | 14 | 52 | LEFTR | REJECTED | LEFTR | | 179 | | 2020-01-13 | 14 | 52 | FLIZZOG | REJECTED | FLIZZOG | | 180 | | 2020-01-13 | 14 | 52 | BAKKANT | EXERCISE\_REQUEST | BAKKANT | | 181 | | 2020-01-13 | 14 | 52 | BAKKANT | EXERCISE\_DONE | BAKKANT | | 182 | | 2020-01-13 | 14 | 52 | REPROCA | INTERVIEW | REPROCA | | 183 | | 2020-01-13 | 14 | 52 | PULE | EXERCISE\_DONE | PULE | | 184 | | 2020-01-14 | 13 | 53 | LOGOPOTE | APPLIED | LOGOPOTE | | 185 | | 2020-01-14 | 13 | 53 | CIZZZATROPEX | INTERVIEW | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 186 | | 2020-01-14 | 13 | 53 | VAVIT | REJECTED | VAVIT | | 187 | | 2020-01-15 | 12 | 54 | LOROPE | INTERVIEW | LOROPE | | 188 | | 2020-01-15 | 12 | 54 | WOWAWEWIWUPR | INTERVIEW | WOWAWEWIWUPR | | 189 | | 2020-01-15 | 12 | 54 | LOGOPOTE | INTERVIEW | LOGOPOTE | | 190 | | 2020-01-15 | 12 | 54 | BORNEMASTEROR | APPLIED | BORNEMASTEROR | | 191 | | 2020-01-15 | 12 | 54 | BUBUCUCURUCUS3 | APPLIED | BUBUCUCURUCUS3 | | 192 | | 2020-01-15 | 12 | 54 | GHOOPOHOOZU | APPLIED | GHOOPOHOOZU | | 193 | | 2020-01-15 | 12 | 54 | ESPELUZAN | APPLIED | ESPELUZAN | | 194 | | 2020-01-16 | 11 | 55 | LOROPE | EXERCISE\_REQUEST | LOROPE | | 195 | | 2020-01-16 | 11 | 55 | LOROPE | EXERCISE\_DONE | LOROPE | | 196 | | 2020-01-16 | 11 | 55 | REPROCA | REJECTED | REPROCA | | 197 | | 2020-01-16 | 11 | 55 | CIZZZATROPEX | INTERVIEW | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 198 | | 2020-01-17 | 10 | 56 | BAKKANT | INTERVIEW | BAKKANT | | 199 | | 2020-01-20 | 7 | 59 | CIZZZATROPEX | INTERVIEW | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 200 | | 2020-01-20 | 7 | 59 | WOWAWEWIWUPR | REJECTED | WOWAWEWIWUPR | | 201 | | 2020-01-20 | 7 | 59 | PULE | REJECTED | PULE | | 202 | | 2020-01-20 | 7 | 59 | SLICEMACHINE | REJECTED | None | None | 203 | | 2020-01-21 | 6 | 60 | BAKKANT | INTERVIEW | BAKKANT | | 204 | | 2020-01-22 | 5 | 61 | CIZZZATROPEX | OFFER | CIZZZATROPEX | Looking very good, remember to ask Matt about it | 205 | | 2020-01-24 | 3 | 63 | AGINTE2 | INTERVIEW | AGINTE | | 206 | | 2020-01-27 | 0 | 66 | PEMBROTHER | INTERVIEW | PEMBROTHER | | 207 | | 2020-01-28 | \-1 | 67 | AVINU2 | INTERVIEW | AVINU | | 208 | 209 | This lists active jobs (which have an event other than `APPLIED` and 210 | which have not been `REJECTED` or `DECLINED`), with date of the last 211 | event and 212 | headline. 213 | 214 | | job | company | headline | found\_on | last\_event | 215 | | ------------ | ------------ | ------------------------------------------------ | ---------- | ----------- | 216 | | AVINU2 | AVINU | | LINKEDIN | 2020-01-28 | 217 | | PEMBROTHER | PEMBROTHER | | LINKEDIN | 2020-01-27 | 218 | | AGINTE2 | AGINTE | | | 2020-01-24 | 219 | | CIZZZATROPEX | CIZZZATROPEX | Looking very good, remember to ask Matt about it | RECRUITER3 | 2020-01-22 | 220 | | BAKKANT | BAKKANT | | FRIEND3 | 2020-01-21 | 221 | | LOROPE | LOROPE | | LINKEDIN | 2020-01-16 | 222 | | LOGOPOTE | LOGOPOTE | | RECRUITER4 | 2020-01-15 | 223 | | MARTER | MARTER | | SO | 2019-12-19 | 224 | | AVINU | AVINU | | LINKEDIN | 2019-12-17 | 225 | | NASTIPE | NASTIPE | Interesting, but I don’t like their mission | RECRUITER2 | 2019-12-04 | 226 | | AGINTE | AGINTE | | | 2019-11-29 | 227 | | YAKILIUMER | YAKILIUMER | | WWR | 2019-11-25 | 228 | 229 | This is a referrer report. Shows how many applications done through each 230 | referrer and date of last application (to see if you should check that 231 | referrer again). 232 | 233 | | found\_on | last\_applied | applications | 234 | | ---------- | ------------- | ------------ | 235 | | FRIEND1 | 2019-11-25 | 1 | 236 | | WWR | 2019-11-25 | 7 | 237 | | SOMEREDDIT | 2019-11-26 | 1 | 238 | | FRIEND2 | 2019-11-27 | 1 | 239 | | RECRUITER | 2019-11-27 | 1 | 240 | | SO | 2019-11-29 | 4 | 241 | | RECRUITER2 | 2019-12-03 | 1 | 242 | | | 2019-12-09 | 13 | 243 | | FRIEND3 | 2019-12-27 | 1 | 244 | | RECRUITER3 | 2020-01-08 | 2 | 245 | | ANGELCO | 2020-01-09 | 1 | 246 | | RECRUITER4 | 2020-01-14 | 1 | 247 | | INDEED | 2020-01-15 | 1 | 248 | | INFOJOBS | 2020-01-15 | 6 | 249 | | LINKEDIN | 2020-01-15 | 45 | 250 | | SLACK1 | 2020-01-15 | 3 | 251 | 252 | Counts applications per week: 253 | 254 | | weeks\_from\_start | applications | 255 | | ------------------ | ------------ | 256 | | 0 | 29 | 257 | | 1 | 10 | 258 | | 2 | 6 | 259 | | 3 | 11 | 260 | | 4 | 5 | 261 | | 5 | 1 | 262 | | 6 | 21 | 263 | | 7 | 6 | 264 | 265 | Counts event types: 266 | 267 | | event | quantity | 268 | | ----------------- | -------- | 269 | | APPLIED | 89 | 270 | | DECLINED | 2 | 271 | | EMAILS | 5 | 272 | | EXERCISE\_DONE | 9 | 273 | | EXERCISE\_REQUEST | 9 | 274 | | INTERVIEW | 32 | 275 | | OFFER | 2 | 276 | | REJECTED | 29 | 277 | 278 | Groups job applications by their “event log”. For instance, jobs where 279 | you `APPLY`ed and there was no response, `REJECTED` after `APPLY`, 280 | etc. 281 | 282 | | events | instances | jobs | 283 | | --------------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 284 | | APPLIED | 47 | AGUSAPARTE, ALBICIOUS, ARBORPALE, AZZOOMR, BLUEPOD, BOOG, BOOR, BORNEMASTEROR, BUBONICA, BUBUCUCURUCUS2, BUBUCUCURUCUS3, COCOPARNABURN, CRYPTOBER, CUCUPORI, DEMOVUR, DOZENER2, ESPELUZAN, FGHTANIO, FLUZ, FOOLAMINASTE, FRAMEPORCOCO, FREPULATORING, FROSTYMAN, FUSTIN, GABORLENOR, GHOOPOHOOZU, HOOROOPO, JUJUP, METACERO, NACE, NACE2, NEXTPUPUS, NIXX, PACKGANO, PIXXOTE, POKERCONNOR, PORESORE, PUNNY, PUXXONA, QOOBAR, REAITOR, ROBEDOBE, ROTEBOTEDO, ROTEBOTEDO2, SYMILE, VIVIZONI, XAXAPO | 285 | | APPLIED, REJECTED | 18 | AMBITRI, AVUURA, COREDUL, DOZENER, GANO, GOOMDOR, IDIOZZY, ISOLOO, LEFTR, PERALTA, REPOZOO, ROBOCADRE, SUCORER, UNILANE, UNILANE2, VAVIT, WOOBOORT, ZOOXOR | 286 | | APPLIED, INTERVIEW, REJECTED | 4 | ANOR, FLIZZOG, LETOPE, WOWAWEWIWUPR | 287 | | APPLIED, INTERVIEW | 3 | AVINU, LOGOPOTE, NASTIPE | 288 | | APPLIED, INTERVIEW, INTERVIEW | 2 | AGINTE2, AVINU2 | 289 | | APPLIED, DECLINED | 1 | COCE | 290 | | APPLIED, EMAILS | 1 | YAKILIUMER | 291 | | APPLIED, EMAILS, INTERVIEW | 1 | AGINTE | 292 | | APPLIED, EMAILS, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW, REJECTED | 1 | REPROCA | 293 | | APPLIED, EMAILS, INTERVIEW, INTERVIEW, OFFER, DECLINED | 1 | FLEMATE | 294 | | APPLIED, EMAILS, REJECTED | 1 | SOAOK | 295 | | APPLIED, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW | 1 | MARTER | 296 | | APPLIED, EXERCISE\_REQUEST, EXERCISE\_DONE, REJECTED | 1 | BOKEMOKETOPER | 297 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE | 1 | LOROPE | 298 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW | 1 | PEMBROTHER | 299 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW, INTERVIEW | 1 | BAKKANT | 300 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW, INTERVIEW, INTERVIEW, OFFER | 1 | CIZZZATROPEX | 301 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, INTERVIEW, REJECTED | 1 | BUKULURUPOX | 302 | | APPLIED, INTERVIEW, EXERCISE\_REQUEST, EXERCISE\_DONE, REJECTED | 1 | PULE | 303 | | APPLIED, INTERVIEW, INTERVIEW, REJECTED | 1 | SYLER | 304 | | REJECTED | 1 | SLICEMACHINE | 305 | --------------------------------------------------------------------------------