<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="http://chanter.io/feed.xml" rel="self" type="application/atom+xml" /><link href="http://chanter.io/" rel="alternate" type="text/html" /><updated>2022-05-03T17:51:04+00:00</updated><id>http://chanter.io/feed.xml</id><title type="html">Sean Crowe, Academic Librarian, Developer</title><subtitle>Portfolio and notes from Sean Crowe, an academic librarian &amp; web developer living and working in Dayton, Ohio</subtitle><author><name>Sean Crowe</name></author><entry><title type="html">Open Journal Systems Theme Work</title><link href="http://chanter.io/posts/2021-04-19-open-journal-systems-theme-work.html" rel="alternate" type="text/html" title="Open Journal Systems Theme Work" /><published>2021-04-19T00:00:00+00:00</published><updated>2021-04-19T00:00:00+00:00</updated><id>http://chanter.io/posts/open-journal-systems-theme-work</id><content type="html" xml:base="http://chanter.io/posts/2021-04-19-open-journal-systems-theme-work.html">&lt;p&gt;Over the past few months I have studied customizing themes for our instance of PKP Open Journal Systems, supporting open access journals hosted by the University of Cincinnati Press and Library Publishing Services.&lt;/p&gt;

&lt;p&gt;Working with a freelance designer, we prototyped a new landing page that included a two-column layout, one column for Journals and one for Proceedings. Digging into the discourse on the support forums for PKP, I found discussions about theme-plugins and journal category functionality, with a good &lt;a href=&quot;https://forum.pkp.sfu.ca/t/grouping-journals-by-category-planned-feature-or-tips-on-template-customisation/34629/5&quot;&gt;comment&lt;/a&gt; about a quick and dirty solution for achieving a two-column layout.&lt;/p&gt;

&lt;p&gt;Earlier versions of OJS included a journal category function which has since been deprecated. To achieve the split layout, I followed the documentation on &lt;a href=&quot;https://docs.pkp.sfu.ca/pkp-theming-guide/en/theme-options-api#add-a-theme-option&quot;&gt;Adding a Theme Option&lt;/a&gt; with a text field in which users can input and save journal ids for journals that should be included in the second column.&lt;/p&gt;

&lt;h2 id=&quot;example&quot;&gt;Example&lt;/h2&gt;

&lt;p&gt;Create an array assigned to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$proceedings&lt;/code&gt; variable which will contain integer IDs for titles that should show in the second &lt;em&gt;proceedings&lt;/em&gt; column.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/DefaultJournalsUcThemePlugin.inc.php&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;addOption&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'proceedingsArray'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'FieldText'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;s1&quot;&gt;'label'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'plugins.themes.defaultJournalsUc.option.proceedingsArray.label'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;s1&quot;&gt;'description'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'plugins.themes.defaultJournalsUc.option.proceedingsArray.description'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We create two loops to populate the columns.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/templates/frontend/pages/indexSite.tpl&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// get $journals object and assign to array for repeated iteration&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assign&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;journalsArray&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$journals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()}&lt;/span&gt;

&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// loop through system generated `$journals` array and compare with $proceedings array from input field&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//column 1&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$journalsArray&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;journal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assign&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$journal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;in_array&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proceedings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// ... show journal entry&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//column 2&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$journalsArray&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;journal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assign&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$journal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;in_array&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proceedings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// ... show proceedings entry&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I had some difficulty finding easy access to IDs for journals. Each journal in our instance has a URL that corresponds to the journal initials that are set in configuration. These initials route to a numeric ID for use in the system, e.g. 1,2.3. I was able to expose the journal ID by accessing the setup wizard for each journal, the ID will be exposed in the URL: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost:3000/index.php/index/admin/wizard/12&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can see the new theme &lt;a href=&quot;https://journals.uc.edu/&quot;&gt;https://journals.uc.edu&lt;/a&gt;.&lt;br /&gt;
Source code for the theme is on &lt;a href=&quot;https://github.com/uclibs/defaultJournalsUc&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;-Sean&lt;/p&gt;</content><author><name>Sean Crowe</name></author><summary type="html">Over the past few months I have studied customizing themes for our instance of PKP Open Journal Systems, supporting open access journals hosted by the University of Cincinnati Press and Library Publishing Services.</summary></entry><entry><title type="html">Family Tier One Tech Support</title><link href="http://chanter.io/posts/2021-01-20-family-tier-one-tech-support.html" rel="alternate" type="text/html" title="Family Tier One Tech Support" /><published>2021-01-20T00:00:00+00:00</published><updated>2021-01-20T00:00:00+00:00</updated><id>http://chanter.io/posts/family-tier-one-tech-support</id><content type="html" xml:base="http://chanter.io/posts/2021-01-20-family-tier-one-tech-support.html">&lt;p&gt;We moved back to the Dayton area to be closer to extended family. There are babies being born, chances to lend a hand with siblings and aging parents, I am super happy to be back in Dayton, it feels like coming home. We have a goal to try all of the Dayton style pizza places, my daughter’s favorite so far is the super salty crust at &lt;a href=&quot;https://www.cassanos.com&quot;&gt;Cassanos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When we lived in Cincinnati, I spent a good amount of time on the phone doing tech support for family–laptops, printing, iPhones, iPads, iPads … iPads. Some of the support required a visit, an hour drive for what were often simple fixes that were not really logistically possible at distance. Even now that we have moved closer, it is frustrating for them to have to wait for a fix and for me to sometimes have to interrupt another activity for tech support. I have been thinking about way to preempt problems and better manage devices.&lt;/p&gt;

&lt;p&gt;Over the last couple of months, one of my parents has managed to either forget their passcode or reset it without realizing and locking themselves out of the device. The iPad is used mostly for Netflix viewing, light web-browsing, and email, so a factory reset was not the end of the world–but after the second time, I wondered about ways to keep some stability with the device through updates. The devices were set to update automatically and I noticed that along with the updates there were prompts to activate fingerprint and face ID or other authentication options. Even when resetting the passcode, the options default to a six digit code–my parents have habitual four digit codes and a reluctance to change them. I tried deactivating the passcodes completely, but they would somehow manage to be reactivated, often to a code that they could not recall, requiring a factory reset. Additionally, we have had a couple close calls with scam emails on the iPad; I wanted a way to cut down on phishing and other fraudulent messages.&lt;/p&gt;

&lt;p&gt;Incidentally, we use MacBooks on my team at the Libraries and not too long ago, we were permitted to self-manage our devices leading  to a kind of wild-west and self-reliance for our systems. It worked okay and we had minimal problems so I was initially annoyed at the prospect of having management (nanny) software installed on my new laptop. But, after reading about &lt;a href=&quot;https://arstechnica.com/information-technology/2020/09/patient-dies-after-ransomware-attack-reroutes-her-to-remote-hospital/&quot;&gt;several&lt;/a&gt; hospital ransomware cases, I am okay with some bumpers if it means more security for the university.&lt;/p&gt;

&lt;p&gt;Anyway, at work, we were recently issued new laptops with minimal &lt;a href=&quot;https://www.jamf.com&quot;&gt;JAMF&lt;/a&gt; management, leading me to first look into enterprise device management options, but with little luck. Real control requires institutional licenses, business infrastructure &amp;amp; accounting, too much overhead. Reading further, I wondered if there might not be some built-in options in iOS that could be useful. I discovered the Family Groups and the Screentime features, which offer the ability to limit functionality on accounts for minors. Restrictions can include &lt;strong&gt;preventing passcode changes&lt;/strong&gt; as well as system updates and iTunes &amp;amp; App Store purchases,&lt;/p&gt;

&lt;p&gt;To setup this ad-hoc device administration, I created a child’s iCloud account and added to my family group. I logged into the iPad using this new child’s account and activated the Screentime management option, setting a separate &lt;em&gt;parent&lt;/em&gt; passcode lock for Screentime.&lt;/p&gt;

&lt;p&gt;I configured the iPad with the habitual apps and layout as well as the familiar passcode. Finally, I restricted new app installs, and basically locked down the iPad. As a bonus I was also able to add a fresh iCloud email account, without any of the spammy/scammy messages.&lt;/p&gt;

&lt;p&gt;It has been at least a month now since rolling this out and we have not encountered any issues. Since these are fairly significant restrictions, I made sure to discuss the changes I was making and establish consent. I think they are happy with the stability. I wrote this post because I was not able to find much literature on device management for seniors or those with memory issues, especially around iPads. I think cases can vary but this approach is working well so far for us, partly because we have close relationship with well established trust. YMMV.&lt;/p&gt;

&lt;p&gt;-Sean&lt;/p&gt;</content><author><name>Sean Crowe</name></author><summary type="html">We moved back to the Dayton area to be closer to extended family. There are babies being born, chances to lend a hand with siblings and aging parents, I am super happy to be back in Dayton, it feels like coming home. We have a goal to try all of the Dayton style pizza places, my daughter’s favorite so far is the super salty crust at Cassanos.</summary></entry><entry><title type="html">Some Notes On My New Site</title><link href="http://chanter.io/posts/2020-12-15-some-notes-on-my-new-site.html" rel="alternate" type="text/html" title="Some Notes On My New Site" /><published>2020-12-15T00:00:00+00:00</published><updated>2020-12-15T00:00:00+00:00</updated><id>http://chanter.io/posts/some-notes-on-my-new-site</id><content type="html" xml:base="http://chanter.io/posts/2020-12-15-some-notes-on-my-new-site.html">&lt;p&gt;This year has brought many changes for me and my family. We have been fortunate to be able to work remotely and afford to keep in relative isolation. I have been given time to consider how I move through and engage with the world. So far this year I have experienced:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shift in work environment, moving to remote&lt;/li&gt;
  &lt;li&gt;Passing of a loved one&lt;/li&gt;
  &lt;li&gt;Isolation from friends and family as health precaution&lt;/li&gt;
  &lt;li&gt;Remote schooling for a primary school student&lt;/li&gt;
  &lt;li&gt;Mindful reduction in social media consumption, weaning off of twitter.com&lt;/li&gt;
  &lt;li&gt;Bike rides and golfing&lt;/li&gt;
  &lt;li&gt;Continued study in systems administration, dev-ops, and software development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like many, I think, I have a nagging sense of civic/environmental doom that colors my experiences. I am starting to actively seek affirmative and positive things. Before, as a younger, busy person, I’ve tolerated the world sort of washing over me and grabbing onto strings in close proximity. I don’t want to cast about any longer.&lt;/p&gt;

&lt;p&gt;So, not unrelatedly, I want to start documenting some of my notes and work, posting things that I think could be interesting or helpful to others as well as an outlet for writing for myself. I’m learning the ropes with &lt;a href=&quot;https://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; to revamp my portfolio and write.&lt;/p&gt;

&lt;p&gt;Et voila.&lt;/p&gt;

&lt;p&gt;-Sean&lt;/p&gt;</content><author><name>Sean Crowe</name></author><summary type="html">This year has brought many changes for me and my family. We have been fortunate to be able to work remotely and afford to keep in relative isolation. I have been given time to consider how I move through and engage with the world. So far this year I have experienced:</summary></entry></feed>