<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-28371165</id><updated>2021-02-13T17:09:43.117+08:00</updated><category term="Fedora"/><category term="PlanetFedora"/><category term="Geek Log"/><category term="Linux"/><category term="Open Source"/><category term="Hacks"/><category term="HOWTO"/><category term="Announcement"/><category term="PlanetPlone"/><category term="Python"/><category term="Plone"/><category term="Misc"/><category term="Zope"/><category term="Events"/><category term="Rant"/><category term="Inigo"/><category term="Compiz"/><category term="Reviews"/><category term="UTP-OSS"/><category term="Web"/><category term="Programming"/><category term="GNOME"/><category term="Tips"/><category term="UTPchat"/><category term="Ubuntu"/><category term="Anime"/><category term="Blogger"/><category term="FreeBSD"/><category term="Grok"/><category term="foss.my"/><category term="Buildout"/><category term="CentOS"/><category term="MyOSS"/><category term="Tools"/><category term="EventReport"/><category term="Framework"/><category term="Yum"/><category term="Diazo"/><category term="Funny"/><category term="Java"/><category term="OpenShift"/><category term="Philosophy"/><category term="AppRepo"/><category term="Cloud"/><category term="Deen of God"/><category term="Guide"/><category term="repoze.bfg"/><category term="Debian"/><category term="Devices"/><category term="FUDCon"/><category term="HTML5"/><category term="Ideas"/><category term="News"/><category term="Psychology"/><category term="Security"/><category term="Virtualization"/><category term="Bicycle"/><category term="CampusCamp"/><category term="Copr"/><category term="Doppelganger"/><category term="Dovecot"/><category term="Firefox"/><category term="Google"/><category term="Hakaze"/><category term="HiTB"/><category term="Javascript"/><category term="KDE"/><category term="KVM"/><category term="LDAP"/><category term="LXC"/><category term="Obviel"/><category term="OpenERP"/><category term="Physics"/><category term="Pidgin"/><category term="Postfix"/><category term="QT/KDE"/><category term="Redash"/><category term="Reg"/><category term="Ruby"/><category term="Zenoss"/><title type='text'>KageSenshi&#39;s Logs</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default?max-results=5&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default?start-index=6&amp;max-results=5&amp;redirect=false'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>367</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>5</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-28371165.post-1661464010874234173</id><published>2021-02-07T12:04:00.004+08:00</published><updated>2021-02-07T12:09:36.300+08:00</updated><title type='text'>Abyres Data Visualization, powered by Apache Superset is now on COPR</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-v-dUySg5dF4/YB9m3KWqkaI/AAAAAAAAXog/tOhAu4Ks85Yghm7iwxZ7ipXWXJ7pfLEWQCLcBGAsYHQ/s1317/Screenshot%2Bfrom%2B2021-02-04%2B22-52-10.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;597&quot; data-original-width=&quot;1317&quot; src=&quot;https://1.bp.blogspot.com/-v-dUySg5dF4/YB9m3KWqkaI/AAAAAAAAXog/tOhAu4Ks85Yghm7iwxZ7ipXWXJ7pfLEWQCLcBGAsYHQ/s320/Screenshot%2Bfrom%2B2021-02-04%2B22-52-10.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;In Abyres, we use Apache Superset for many of our data visualization needs. Traditionally, we utilize Superset primarily from what distributed by Hortonworks (now Cloudera)As we are investing more into Superset, and that we are increasingly seeing Superset requirements in situation where Hadoop is not really required, we decided to further our commitment in Superset by creating our own distribution package of it.&lt;br /&gt;&lt;br /&gt;So, we created Abyres Enterprise Data Visualization, .. a Superset distribution that have been packaged and tested for use with CentOS, RHEL and Fedora. As we are well versed in the RPM packaging world, we ensured this package to integrate seamlessly with traditional management tools available for CentOS/RHEL/Fedora.&lt;br /&gt;&lt;br /&gt;Alongside with the distribution, we also providing commercial support &amp;amp; consulting for the tooling for enterprises who wishes to leverage the capabilities of Superset in their organization.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;If you want to try out `ae_datavisualization`, we have made it available in COPR for CentOS Stream, Fedora 33 and EPEL-8.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To install::&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;# dnf copr enable izhar/ae_datavisualization&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# dnf install ae_datavisualization&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To configure, the config file is in `/etc/ae_datavisualization/superset_config.py`. You&#39;ll need 2 postgresql databases (`ae_datavisualization`, `ae_datavisualization_cache`) and a rabbitmq server running.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To initialize database and admin user::&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# ae_datavisualization db upgrade&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# ae_datavisualization init&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# ae_datavisualization fab create-admin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To start service::&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# systemctl start ae_datavisualization-web&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# systemctl start ae_datavisualization-scheduler&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;# systemctl start ae_datavisualization-worker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;If nothing went wrong, you should be able to access Superset at port 8999. If you wish to change the listen port, you can edit at `/etc/sysconfig/ae_datavisualization`.&lt;/div&gt;&lt;br /&gt;Interested to know more?.. Contact us at &lt;a href=&quot;mailto:contactus@abyres.net&quot;&gt;contactus@abyres.net&lt;/a&gt; / +603 2724 2535&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
- Izhar Firdaus -&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/1661464010874234173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28371165&amp;postID=1661464010874234173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/1661464010874234173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/1661464010874234173'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/2021/02/abyres-data-visualization-powered-by.html' title='Abyres Data Visualization, powered by Apache Superset is now on COPR'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-v-dUySg5dF4/YB9m3KWqkaI/AAAAAAAAXog/tOhAu4Ks85Yghm7iwxZ7ipXWXJ7pfLEWQCLcBGAsYHQ/s72-c/Screenshot%2Bfrom%2B2021-02-04%2B22-52-10.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28371165.post-6991081067386992489</id><published>2017-04-10T00:26:00.001+08:00</published><updated>2017-04-10T00:26:20.568+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Copr"/><category scheme="http://www.blogger.com/atom/ns#" term="Fedora"/><category scheme="http://www.blogger.com/atom/ns#" term="MyOSS"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetFedora"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Redash"/><title type='text'>Redash RPM in COPR</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Just a quick announcement post.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;I&#39;ve added a &lt;a href=&quot;http://redash.io/&quot;&gt;redash&lt;/a&gt; build in COPR.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-LLMV53VgLdU/WOpggDEUl_I/AAAAAAAAL4M/A5YggCFSHrEafC5PXrEZgk10z0LtNG3gwCLcB/s1600/redash.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://3.bp.blogspot.com/-LLMV53VgLdU/WOpggDEUl_I/AAAAAAAAL4M/A5YggCFSHrEafC5PXrEZgk10z0LtNG3gwCLcB/s400/redash.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To install:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dnf copr enable izhar/redash&lt;br /&gt;dnf install redash&lt;/pre&gt;&lt;br /&gt;Configure your database at &lt;code&gt;/etc/redash.cfg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Service is managed by supervisord, so start supervisord to start the service.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;service redis start&lt;br /&gt;service supervisord start&lt;/pre&gt;&lt;br /&gt;(I probably should figure out how to write systemd service)&lt;br /&gt;&lt;br /&gt;Load redash on &lt;a href=&quot;http://localhost:5000/&quot;&gt;http://localhost:5000&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
- Izhar Firdaus -&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/6991081067386992489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28371165&amp;postID=6991081067386992489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/6991081067386992489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/6991081067386992489'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/2017/04/redash-rpm-in-copr.html' title='Redash RPM in COPR'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-LLMV53VgLdU/WOpggDEUl_I/AAAAAAAAL4M/A5YggCFSHrEafC5PXrEZgk10z0LtNG3gwCLcB/s72-c/redash.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28371165.post-2610091424935231848</id><published>2014-08-07T10:31:00.003+08:00</published><updated>2014-08-07T11:56:09.247+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Announcement"/><category scheme="http://www.blogger.com/atom/ns#" term="CentOS"/><category scheme="http://www.blogger.com/atom/ns#" term="Geek Log"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetFedora"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetPlone"/><category scheme="http://www.blogger.com/atom/ns#" term="Plone"/><category scheme="http://www.blogger.com/atom/ns#" term="Zope"/><title type='text'>Announcing PlatoCDP, a Plone distribution for enterprises.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-kbU3Qyscp0w/U-LctBYuYkI/AAAAAAAAD7Q/GttEQEMgx30/s1600/platocdplogo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-kbU3Qyscp0w/U-LctBYuYkI/AAAAAAAAD7Q/GttEQEMgx30/s1600/platocdplogo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Announcing the first release of &lt;a href=&quot;http://koslab.org/&quot;&gt;PlatoCDP Plone distribution&lt;/a&gt;.  A Plone distribution with the goal of attempting to build a more  supportable, enterprise-ready, document management and content  management&amp;nbsp; solution for government and enterprises. The ideal aim is to  develop improvements on the distribution so that it will be a viable alternative to Sharepoint.&lt;br /&gt;So what is it exactly?&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;An  enterprise Plone distribution - that is, an integrated product which  includes Plone, selected Plone add-ons, 3rd party softwares and  integration/automation improvements to deliver an enterprise ready  product for customers.&lt;/li&gt;&lt;li&gt;Is it a rebrand of Plone? - It is an  enterprise distribution product. PlatoCDP to Plone is like RHEL to Fedora. It is not a mere rebrand. PlatoCDP includes core Plone, additional components from the  collective and its own improvements. We engage on packaging, certification and development activities to make the whole stack supportable for enterprises. These components of the  distribution will be supported by KOSLAB through our support  subscription. &lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-F5EJIny38eI/U-LdJh9MLJI/AAAAAAAAD7Y/__e6bxmlnGc/s1600/platocdp-enterprise-cycle.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-F5EJIny38eI/U-LdJh9MLJI/AAAAAAAAD7Y/__e6bxmlnGc/s1600/platocdp-enterprise-cycle.png&quot; height=&quot;148&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Major features highlights of PlatoCDP 4.0b1&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Out of the box clustered Plone setup - preconfigured for high availability and scaling. &lt;/li&gt;&lt;li&gt;Out of the box support of collective.documentviewer. The whole setup is fully functional with very minimal effort.&amp;nbsp; &lt;/li&gt;&lt;li&gt;Commonly used add-ons such as&lt;/li&gt;&lt;ul&gt;&lt;li&gt;eea.facetednavigation&lt;/li&gt;&lt;li&gt;solgema.fullcalendar&lt;/li&gt;&lt;li&gt;plonetruegallery&lt;/li&gt;&lt;li&gt;contentwellportlets&lt;/li&gt;&lt;li&gt;collective.unslider &lt;/li&gt;&lt;li&gt;and more (&lt;a href=&quot;https://github.com/koslab/platocdp.policy/blob/master/setup.py&quot;&gt;dependency list&lt;/a&gt;) &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Some future roadmap in mind&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Development  of cluster management console to aid system administrators in managing,  scaling and monitoring PlatoCDP deployments, plus aiding with filing  bugs and support requests.&lt;/li&gt;&lt;li&gt;Fix WSAPI4Plone and include it into distribution, and provide an API for 3rd party integration.&lt;/li&gt;&lt;li&gt;Marketplace for 3rd party add-on/themes&lt;/li&gt;&lt;li&gt;Video conversion integration (possibly from Plumi transcoder) &lt;/li&gt;&lt;li&gt;Mobile client&lt;/li&gt;&lt;li&gt;Folder sync client&lt;/li&gt;&lt;li&gt;Cloud offering&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Upstream  commitment - Having been a Fedora Ambassador for over 7 years now, I  believe in the philosophy of innovating on upstream rather than  downstream. Therefore, wherever practical, PlatoCDP improvements shall  be developed primarily on the Plone collective. &lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Check it out at &lt;a href=&quot;http://www.koslab.org/&quot;&gt;http://www.koslab.org&lt;/a&gt; &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
- Izhar Firdaus -&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/2610091424935231848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28371165&amp;postID=2610091424935231848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/2610091424935231848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/2610091424935231848'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/2014/08/announcing-platocdp-plone-distribution.html' title='Announcing PlatoCDP, a Plone distribution for enterprises.'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-kbU3Qyscp0w/U-LctBYuYkI/AAAAAAAAD7Q/GttEQEMgx30/s72-c/platocdplogo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28371165.post-3796864525513136677</id><published>2014-08-07T10:18:00.000+08:00</published><updated>2014-08-07T10:19:10.961+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geek Log"/><category scheme="http://www.blogger.com/atom/ns#" term="Inigo"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetFedora"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetPlone"/><category scheme="http://www.blogger.com/atom/ns#" term="Plone"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Zope"/><title type='text'>Lessons learned on how not to run an Open Source company</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;Back when I co-founded Inigo, one of my primary motivation was to create an Open Source company which:&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Provide quality Open Source solution for Malaysian market (in this case, KM &amp;amp; CMS solution) &lt;/li&gt;&lt;li&gt;Work closely with upstream on improving the products supported by the company (in this case, Plone)&lt;/li&gt;&lt;li&gt;Actively develop local talents and human resource on Open Source skills, following pure Open Source philosophy&lt;/li&gt;&lt;li&gt;Actively create new innovation for the market related to our core solutions&lt;/li&gt;&lt;li&gt;Scale the company up that it become a prominent player on its core market&lt;/li&gt;&lt;/ul&gt;Unfortunately, over the years, none of the goals were reached. Due to our business model approach, ended up as a company which primarily focus on developing client-specific add-ons on top of Plone. The projects were fun, and challenging, however, due to a poor support and pricing model, the business unable to scale and we ended up in a hamster wheel of non-stop trying to catch up to pay the bills. Mistakes done includes:&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Poor business/pricing model which penalize efficiency (the more efficient you become, the less you earn), made things very unsustainable.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Hiring is difficult due to the business model creates no sustainable revenue for investing on human capital development or hiring an experienced developer. Plone is not exactly something junior developer can pick up quickly. So the bus factor of Inigo is very poor, with only me as the developer. &lt;/li&gt;&lt;li&gt;The support model which we adopted also was self-destructive. It is an all-encompassing support package which does not limit what code will be supported - therefore, I have to be familiar with whatever codebase the client use on their system - including custom code which was developed by other vendors - fun at first - but a too high of a bar to handle after a while - human brain have its limits.&lt;/li&gt;&lt;li&gt;Continuously building downstream customizations removes the benefit of being part of Open Source community. Almost none of the code can be collaborated with other contributors because it is too specific to a single client.&lt;/li&gt;&lt;li&gt;Growing number of non-upstream custom code, of which are too client-specific that we could not immediately reuse, (if we managed to, the pricing/support model does not reward code reusability), inability to hire for help and/or build local capacity to help things out (due to I have to focus on delivering projects to pay the bills instead of building a team) - slowly take a toll on my mental health.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;Being somewhat &lt;a href=&quot;http://en.wikipedia.org/wiki/Alexithymia&quot;&gt;alexithemic&lt;/a&gt;, I did not notice the signs that I have been stressed out for over 2 years - something which apparently many people around me, especially those in Hack In The Box community have noticed way earlier than me - until I finally broke my brain circuitry and ended up with anxiety disorder (I&#39;m still on xanax therapy until this date), and almost falling to a deadly state of depression. It took me 4 months struggling to figure out what was wrong with the brain function, nausea and constant chest pain made things harder to manage, only after finally medically diagnosed with anxiety disorder I decided to stop whatever I was doing, and take a break from programming.&lt;br /&gt;&lt;br /&gt;Having said that, over the past 5 months, I have been working as a solution architect in a local Open Source system integrator company. The position I&#39;m at gain me access to observe the process utilized by 2 of the major companies which adopt the philosophy of 100% open source and high commitment to upstream - Red Hat and Hortonworks. Picked up quite a bit from them, especially on the business side of enterprise open source, and learned how they create a sustainable support model around 100% open source software.&lt;br /&gt;&lt;br /&gt;From the newly acquired knowledge, it created a new motivation to attempt again in bringing Plone to this region, through a creation of a Plone distribution - &lt;a href=&quot;http://www.koslab.org/&quot;&gt;KOSLAB PlatoCDP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;More information, on the next blog post.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
- Izhar Firdaus -&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/3796864525513136677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28371165&amp;postID=3796864525513136677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/3796864525513136677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/3796864525513136677'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/2014/08/lessons-learned-on-how-not-to-run-open.html' title='Lessons learned on how not to run an Open Source company'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28371165.post-3128117436084145256</id><published>2014-03-22T08:52:00.001+08:00</published><updated>2014-03-22T10:10:49.231+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Grok"/><category scheme="http://www.blogger.com/atom/ns#" term="Guide"/><category scheme="http://www.blogger.com/atom/ns#" term="Hacks"/><category scheme="http://www.blogger.com/atom/ns#" term="HOWTO"/><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetFedora"/><category scheme="http://www.blogger.com/atom/ns#" term="PlanetPlone"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Reg"/><category scheme="http://www.blogger.com/atom/ns#" term="Zope"/><title type='text'>Reg for ZCA addicts - Part 1: Adapter</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Recently I have been exploring &lt;a href=&quot;http://reg.readthedocs.org/&quot;&gt;Reg&lt;/a&gt;, a library inspired by &lt;a href=&quot;http://docs.zope.org/zope.component/&quot;&gt;zope.component &lt;/a&gt;written by Faassen, and I found its simplification of ZCA to be pretty interesting. Being really loving ZCA for a while now, I end up trying to figure out how the ZCA patterns fits if I were to use Reg in my future projects. So here are the list of items I discovered so far:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Adapters&lt;/b&gt;&lt;br /&gt;This is the most common pattern I use with ZCA, primarily to simplify writing logic by standardizing the interface of objects I work with into a common set of behavior/functions:&lt;br /&gt;&lt;br /&gt;In ZCA , adapters are done this way:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;from zope import interface&lt;br /&gt;from zope import component&lt;br /&gt;&lt;br /&gt;class IDog(interface.Interface):&lt;br /&gt;    def bark():&lt;br /&gt;        pass&lt;br /&gt;&lt;br /&gt;class Dog(object):&lt;br /&gt;    interface.implements(IDog)&lt;br /&gt;&lt;br /&gt;    def bark(self):&lt;br /&gt;        return &#39;Woof&#39;&lt;br /&gt;&lt;br /&gt;class IDuck(interface.Interface):&lt;br /&gt;    def quack():&lt;br /&gt;        pass&lt;br /&gt;&lt;br /&gt;class Duck(object):&lt;br /&gt;    interface.implements(IDuck)&lt;br /&gt;&lt;br /&gt;    def quack(self):&lt;br /&gt;        return &#39;Quack&#39;&lt;br /&gt;&lt;br /&gt;class IAnimalSoundAdapter(interface.Interface):&lt;br /&gt;    def make_sound():&lt;br /&gt;        pass&lt;br /&gt;&lt;br /&gt;class DogSoundAdapter(grok.Adapter):&lt;br /&gt;    interface.implements(IAnimalAdapter)&lt;br /&gt;    interface.adapts(IDog) &lt;br /&gt;&lt;br /&gt;    def __init__(self, dog):&lt;br /&gt;        self._dog = dog&lt;br /&gt;&lt;br /&gt;    def make_sound(self):&lt;br /&gt;        return self._dog.bark()&lt;br /&gt;&lt;br /&gt;class DuckSoundAdapter(grok.Adapter):&lt;br /&gt;    interface.implements(IAnimalSoundAdapter)&lt;br /&gt;    interface.adapts(IDuck)&lt;br /&gt;&lt;br /&gt;    def __init__(self, duck):&lt;br /&gt;        self._duck = duck&lt;br /&gt;&lt;br /&gt;    def make_sound(self):&lt;br /&gt;        return self._duck.quack()&lt;br /&gt;&lt;br /&gt;gsm = component.getGlobalSiteManager()&lt;br /&gt;gsm.registerAdapter(DogSoundAdapter, (IDog,), IAnimalSoundAdapter)&lt;br /&gt;gsm.registerAdapter(DuckSoundAdapter, (IDuck,), IAnimalSoundAdapter)&lt;br /&gt;&lt;br /&gt;dog = Dog()&lt;br /&gt;duck = Duck()&lt;br /&gt;&lt;br /&gt;dog.bark() # Woof&lt;br /&gt;duck.quack() # Quack&lt;br /&gt;&lt;br /&gt;IAnimalSoundAdapter(dog).make_sound() # Woof&lt;br /&gt;IAnimalSoundAdapter(duck).make_sound() # Quack&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And that is quite a code, which utilizes classes, and large external interfaces libraries and component libraries which might can make many pythonistas cringe.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In Reg, things are simplified. Similar functionality is done not through interfaces and complex object/class markers, but through simple functions. Reg adapter interfaces are simply functions:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;import reg&lt;br /&gt;import reg.implicit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Dog(object):&lt;br /&gt;    def bark(self):&lt;br /&gt;        return &#39;Woof&#39;&lt;br /&gt;&lt;br /&gt;class Duck(object):&lt;br /&gt;    def quack(self):&lt;br /&gt;        return &#39;Quack&#39;&lt;br /&gt;&lt;br /&gt;@reg.generic&lt;br /&gt;def make_sound(obj):&lt;br /&gt;    raise NotImplementedError&lt;br /&gt;&lt;br /&gt;def dog_sound(dog):&lt;br /&gt;    return dog.bark()&lt;br /&gt;&lt;br /&gt;def duck_sound(duck):&lt;br /&gt;    return duck.quack()&lt;br /&gt;&lt;br /&gt;registry = reg.Registry()&lt;br /&gt;reg.implicit.initialize(registry)&lt;br /&gt;&lt;br /&gt;registry.register(make_sound, [Dog], dog_sound)&lt;br /&gt;registry.register(make_sound, [Duck], duck_sound)&lt;br /&gt;&lt;br /&gt;dog = Dog()&lt;br /&gt;duck = Duck()&lt;br /&gt;&lt;br /&gt;make_sound(dog) # Woof&lt;br /&gt;make_sound(duck) # Quack&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now, ZCA users might shout by now, &quot;I want class based adapters!&quot; (I know I did). This is how it can be implemented in Reg:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import reg&lt;br /&gt;import reg.implicit&lt;br /&gt;&lt;br /&gt;class Dog(object):&lt;br /&gt;    def bark(self):&lt;br /&gt;        return &#39;Woof&#39;&lt;br /&gt;&lt;br /&gt;class Duck(object):&lt;br /&gt;    def quack(self):&lt;br /&gt;        return &#39;Quack&#39;&lt;br /&gt;&lt;br /&gt;@reg.generic&lt;br /&gt;def animal_sound_adapter(obj):&lt;br /&gt;    raise NotImplementedError&lt;br /&gt;&lt;br /&gt;class DogSoundAdapter(object):&lt;br /&gt;&lt;br /&gt;    def __init__(self, dog):&lt;br /&gt;        self._dog = dog&lt;br /&gt;&lt;br /&gt;    def make_sound(self):&lt;br /&gt;        return self._dog.bark()&lt;br /&gt;&lt;br /&gt;class DuckSoundAdapter(object):&lt;br /&gt;&lt;br /&gt;    def __init__(self, duck):&lt;br /&gt;        self._duck = duck&lt;br /&gt;&lt;br /&gt;    def make_sound(self):&lt;br /&gt;        return self._duck.quack() &lt;br /&gt;&lt;br /&gt;registry = reg.Registry()&lt;br /&gt;reg.implicit.initialize(registry)&lt;br /&gt;&lt;br /&gt;registry.register(animal_sound_adapter, [Dog], DogSoundAdapter)&lt;br /&gt;registry.register(animal_sound_adapter, [Duck], DuckSoundAdapter)&lt;br /&gt;&lt;br /&gt;dog = Dog()&lt;br /&gt;duck = Duck()&lt;br /&gt;&lt;br /&gt;animal_sound_adapter(dog).make_sound() # Woof&lt;br /&gt;animal_sound_adapter(duck).make_sound() # Quack&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Thats it for now, next one I will probably share about multiadapters on Reg.&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
- Izhar Firdaus -&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kagesenshi.blogspot.com/feeds/3128117436084145256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28371165&amp;postID=3128117436084145256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/3128117436084145256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28371165/posts/default/3128117436084145256'/><link rel='alternate' type='text/html' href='http://kagesenshi.blogspot.com/2014/03/reg-for-zca-addicts-part-1-adapter.html' title='Reg for ZCA addicts - Part 1: Adapter'/><author><name>izhar firdaus</name><uri>http://www.blogger.com/profile/00019993555432609309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>