Recent work / View all work

Varnish Cache

Varnish Cache is a web application accelerator also known as a caching HTTP reverse proxy. You install it in front of any server that speaks HTTP and configure it to cache the contents. Varnish Cache is really, really fast.

FastCGI Server

This is a guide for the installation and configuration of a fastcgi server called php-fpm for a local development environment (even so this guide can be used to install it in a production server with the same functionality).

Nginx Server

This is a guide for the installation and configuration of a nginx server for a local development environment (even so this guide can be used to install nginx in a production server with the same functionality).

GitHub Username

I was looking around when suddenly I remembered that in the past I saw a GitHub account with a single letter as username, so I wanted to check how many single-letter-accounts were available at this time, and wrote a script to quickly check the availability of those usernames.

Development Stats

19 hours ago
  • cixtor8984214Added new screenshot and deleted unnecessary files This adds a new image showcasing the new interface after the initial rewrite of the code, additionally to the deletion of unnecessary HTML files that were being used by the old Node.JS-based web application. Notice that the functionality is still broken but it will be added in subsequent commits.
19 hours ago
  • cixtordc8c72fAdded logger and separated into different files This adds a global log function that will write into the command line useful information about each request after the data is sent to the client, this will allow to measure the amount of time required to process it (aka. latency) for future debug procedures.
  • cixtor6438ecfModified JavaScript library to clean the binds There are a couple of events in the interface that are triggered when certain buttons or anchor tags are clicked, the actions executed after these events are big enough to require a separate set of functions, this commit cleans the code to separate the parts that can be isolated.
  • cixtor1930cacAdded required JavaScript code to process events This adds the necessary JavaScript code to power the interface including click events, ajax requests, and all sort of actions associated with the code editor. Some default features available in the Bootstrap.JS script like tooltips and popovers are being initialized for future usage.
  • cixtora6decbbAdded HTML interface with stylesheet and font files This commit adds the necessary HTML code to render the interface with the ACE editor and some custom elements in the bottom of the pane that will act as a status bar, and the top of the pane that will act as the toolbar. This also includes the required CSS and font files.
  • cixtor22c50c8Added support to render static files without dir listing CSS, JavaScript and font files stored in the assets directory will be available in the endpoint "/assets/*". However, the http.FileServer does automatic directory listing which is not good from a security point of view, so this commit also adds a mechanism to prevent this when the URL ends in forward slash instead of a file name.
  • cixtor8821edaAdded index handler with template and dummy content Making use of the html/template package this commit adds support to render HTML code from a semi-hidden directory named "_views" initially from the index handler which was previously writing a simple text via http.ResponseWriter
  • cixtor7a94b51Added initial Go implementation for the API service I have decided to rewrite the project in Go as a mean to improve my skills in the language, this was originally written as a web application in PHP then rewritten into Node.JS and recently after getting more interested in the Go programming language I have decided to use it more in my personal projects. Hopefully this will be both an API service and a command line tool to send content to the repository.
  • View comparison for these 7 commits
1 day ago
  • cixtorbc5b982Added implementation for the chat.robotMessage method Allows to send messages to a specific channel as a robot. You will have to generate a private API key (aka. xoxp Slack token) as the common key ignores the "as_user" parameter which is the one used by the Slack API service to determine if the message will be displayed as sent by a robot and also have to set two additional environment variables named SLACK_ROBOT_NAME and SLACK_ROBOT_IMAGE which can be an URL pointing to a JPEG, GIF, or PNG file or the name of a regular emoji prefixed with a colon character.
  • cixtor8083890Modified verbose environment variable for compatibility The environment variable used to force the program to display debug information was too generic and could have been accidentally triggered, I have decided to rename this variable to be more specific and avoid the printing of this unnecessary information.
  • View comparison for these 2 commits
6 days ago
  • cixtor018b377Added new methods to set the user avatar and omit errors Some of the Slack API endpoints are hidden in the documentation, this includes the methods used to upload a picture and set it as the avatar, as well as the method to delete it. This commit adds these placeholders to be later implemented, and adds additional tags for the default response object to omit empty error messages.
  • cixtor77c8b47Added implementation for the users.profile.set method This method is used to set the profile information for a user. Individual fields can be updated by passing the pair of arguments name and value; or multiple fields can be updated at once by passing the argument profile. The profile argument accepts a URL-encoded JSON object containing all the fields to be updated. The recommended way to set the profile image fields is to call users.setPhoto. To clear them, call users.deletePhoto. The fields key is an array of key:value pairs holding the values for the user's custom profile fields. The key is the ID of the definition for that field, which is per-team. This ID can also be used in the name field of this method. The value of a field is what should be displayed, unless the alt key is also present, in which case that is displayed instead. The value can be up to 256 characters for fields of type text and link. Use team.profile.get to retrieve the profile fields used by a team.
  • cixtor01fafabAdded implementation for the users.profile.get method This method is used to get the profile information for a user. If you call users.profile.get frequently on behalf of a team or user, we recommend caching labels retrieved from team.profile.get or from when you sparingly use the include_labels parameter with users.profile.get. The include_labels parameter is heavily rate-limited. The response contains a profile item with an array of key:value pairs. The first_name, last_name, email and skype keys are self-explanatory. The image_ keys hold links to the different sizes we support for the user's profile image from 24x24 to 1024x1024 pixels. A link to the image in its original size is stored in image_original. For a description of the fields key, see the users.profile.set method.
  • cixtor5d29349Added implementation for the team.billableInfo method This method lists billable information for each user on the team. Currently this consists solely of whether the user is subject to billing per Slack's Fair Billing policy. The response contains a list of activity logs followed by pagination information. A billing_active status of true indicates that the user is eligible per billing per Slack's Fair Billing policy. The billing_active status is computed periodically and the values returned by this API reflect the most recently computed status and should not be interpreted as a real-time view of each user's billing_active status.
  • cixtor4075f20Added implementation for the chat.meMessage method This method sends a me message to a channel from the calling user. This table lists the expected errors that this method could return. However, other errors can be returned in the case where the service is down or other unexpected factors affect processing. Callers should always check the value of the ok params in the response.
  • cixtor81c85f3Added implementation for the bots.info method Method to return information about a bot user. The bot identifier is returned from "bot_message" message events and in the response of methods like channel history. Notice that a bot user is not the same as an integration, you will have to find the correct identifier to query the bot information.
  • cixtor7c5226bFixed trailing period for each new API service endpoint
  • cixtor79a2ab5Added implementation for the auth.revoke method This method revokes an access token. Use it when you no longer need a token. For example, with a Sign In With Slack app, call this to log a user out. Notice that "auth.revokeTest" is also available to offer a method that will simply test the revocation of the token but will keep the authorization alive.
  • cixtor7059654Added implementation for the groups.createChild method This method renames the existing private channel (from "example" to "example-archived"); archives the existing private channel; creates a new private channel with the name of the existing private channel; adds all members of the existing private channel to the new private channel. This is useful when inviting a new member to an existing private channel while hiding all previous chat history from them. In this scenario you can call groups.createChild followed by groups.invite. The new private channel will have a special parent_group property pointing to the original archived private channel. This will only be returned for members of both private channels, so will not be visible to any newly invited members.
  • cixtore469171Added implementation for the groups.create method Method to allow the creation of new groups if the authorization scope has "groups:write". Groups names can only contain lowercase letters, numbers, hyphens, and underscores, and must be 21 characters or less. The name will be validated and modified to meet the requirements.
  • cixtora428189Added implementation for the groups.invite method Method to allow the invitation of one user at a time to certain group as long as the user is authorized to invite with scope "groups:write" and the invitee exists and is not deleted. The response contains the result of the action and the information of the group on success.
  • cixtor645e314Added implementation for the groups.kick method Method allow to remove one user at a time from a group as long as the user exists and has joined the group, otherwise an unauthorized error message is returned in the response. Notice that kicking the same user that is sending the request is not possible, another user needs to execute the operation with a different token.
  • cixtor8e171aaAdded implementation for the groups.leave method Method to allow the current user to leave a group. This method will not return an error if the user was not in the group before it was called, instead the response will include a "not_in_group" property.
  • cixtor6065f96Modified archive and unarchive methods to recycle code Both the channel and group endpoints have similarities in some of their methods, including the archive and unarchive actions which only differ in the name but the required parameters and response are the same, considering this I will merge them for readability.
  • cixtorb3112a1Added implementation for the groups.rename method Method to allow the renaming of a group. Group names can only contain lowercase letters, numbers, hyphens, and underscores, and must be 21 characters or less. The name will be validated and modified to meet the requirements
  • cixtor27cb48aAdded implementation for the groups.unarchive method Method to allow the current user to unarchive a group as long as the user has "groups:write" privileges, otherwise a list of error messages explaining the failure will be returned in the response, this includes: group_not_found, no_archived, no_authed among others.
  • cixtorb7b2d35Added implementation for the groups.archive method Method to allow the current user to archive a group as long as the user has "groups:write" privileges, otherwise a list of error messages explaining the failure will be returned in the response, this includes: group_not_found, already_archived, cant_archive_general among others.
  • cixtor61cd3f8Removed unnecessary CLI interface for simplicity During the execution of the supported methods the program collects the parameters from the terminal and pass them to a function that calls a second function that communicates with the API service. This middle function call is unnecessary is most cases, this commit deletes the unnecessary function calls for readability and hopefully will open the opportunity to design a chained call like `client.Function().Output()`
  • cixtord0c037bAdded new methods recently included in the API service
  • View comparison for these 19 commits
7 days ago
  • cixtorf8714aaAdded implementation for the channels.unarchive method Method to allow the current user to unarchive a channel as long as the user has "channels:write" privileges, otherwise a list of error messages explaining the failure will be returned in the response, this includes: channel_not_found, no_archived, no_authed among others.
  • cixtord5e342eAdded implementation for the channels.archive method Method to allow the current user to archive a channel as long as the user has "channels:write" privileges, otherwise a list of error messages explaining the failure will be returned in the response, this includes: channel_not_found, already_archived, cant_archive_general among others.
  • cixtorf1a530eAdded implementation for the channels.leave method Method to allow the current user to leave a channel. This method will not return an error if the user was not in the channel before it was called, instead the response will include a "not_in_channel" property.
  • cixtor7c473d9Added implementation for the channels.kick method Method allow to remove one user at a time from a channel as long as the user exists and has joined the channel, otherwise an unauthorized error message is returned in the response. Notice that kicking the same user that is sending the request is not possible, another user needs to execute the operation with a different token.
  • cixtor2e007ffAdded implementation for the channels.rename method Method to allow the renaming of a channel. Channel names can only contain lowercase letters, numbers, hyphens, and underscores, and must be 21 characters or less. The name will be validated and modified to meet the requirements
  • cixtor48cee6fAdded implementation for the channels.invite method Method to allow the invitation of one user at a time to certain channel as long as the user is authorized to invite with scope "channels:write" and the invitee exists and is not deleted. The response contains the result of the action and the information of the channel on success.
  • cixtorc63b0dcAdded implementation for the channels.create method Method to allow the creation of new channels if the authorization scope has "channels:write". Channels names can only contain lowercase letters, numbers, hyphens, and underscores, and must be 21 characters or less. The name will be validated and modified to meet the requirements.
  • cixtorecb080cAdded implementation for the channels.join method Slack offers the ability to join a room channel in a team as long as the user is authorized to do so, otherwise an error "restricted_action" will be returned. If the operation suceeds the response will contain the status and the information associated with the channel. Notice that if the channel doesn't exists and the user is authorized to create it the HTTP request will do so and return the same information on success.
  • View comparison for these 8 commits
8 days ago
  • cixtor7dc2f1bAdded option to activate debug information During the execution of certain operations like the communication with the API service and the built-in chat session client, there may be some issues with race conditions or unsupported functionality, you can pass an environment variable "VERBOSE=true" to activate the debug mode.
9 days ago
  • cixtor4753935Added alias to colorize man command using less pager Termcap is a database of terminal capabilities, so there needs to be a database in which you can look up whichever terminal the user has in order to find out what that kind of terminal is capable of and how to tell it to do each thing. Each capability has a two-letter identifier, and maps to a string of characters: mb - Start blinking md - Start bold mode me - End all mode like so, us, mb, md and mr so - Start standout mode se - End standout mode us - Start underlining ue - End underlining So when we want something underlined, for example, the "us" and "ue" entries in our terminal's termcap record are what we need to send to the terminal to start and end underlining that section of text. Since the "man" command uses "less" to page the output of a document before it is rendered we can colorize the output using this technique. Details at https://news.ycombinator.com/item?id=12296000
9 days ago
10 days ago
  • cixtorb0ccf76Fixed some mixtures in the coding standard of the code
  • cixtorcb3d276Added option to force custom website in malware scan To help during the debugging of some issues with the non-existence of the HTTP transport protocol in some servers reported by some plugin users we decided to include this semi-hidden option to force the plugin to scan a specific (custom?) website, which can either be WordPress or not, the option will bypass the recycling of the HTTP requests to the API service.
  • cixtorbf3a144Fixed rare edge cases with the hardening of core directories When the user decides to revert the hardening in one of the core folder the plugin was supposed to delete the access control file if it detected that the file was empty after the deletion of the denying rules, this was not happening, this commit adds the missing feature. Additionally, the hardening of a directory with an existing access control file was breaking the website with a 500 Internal Server Error due to missing new line characters in the existing rules, we fixed this by forcing the plugin to append a new line character right before any pre-existing content of the file.
  • cixtorf43daddModified error report to use exceptions instead of strings To increase the coverage of the automated tests we will force the source code to throw exceptions when an error message is reported via the CMS admin notices, the interface will continue working normally, the only difference is that when the automated tests are executed these messages will be returned and expected by the test cases
  • View comparison for these 4 commits
10 days ago
28 days ago
  • cixtor3798b5bModified format of the alias to monitor file changes The alias used to monitor a directory or file for changes and then execute a specified command was throwing some warnings via ShellShock because the conditions were wrapped about parenthesis; additionally, the alert was surpassing the limit of text and showing unnecessary sections in the directory path.
  • cixtora02df01Fixed format of the Hostman alias command The alias that was being used to determine when to prefix the hostman tool with sudo was a bit messy according to the ShellShock syntax checker, this commit fixes the warnings and wraps the additional dynamic arguments for hostman between double quotes to prevent unwanted expansion
  • cixtord7c2c75Modified alias command to alert on finished programs There was an alias that was being used to display an alert using libnotify once a command finished its execution via the Terminal, this was based on an old version of the same alias that appears in the Linux Mint distribution; this commit cleans the command to display simpler alerts
  • cixtor095834cModified configuration for the Clang code formatter After the addition of a reference in the Bash resource loader to integrate the LLVM compiler and its associated tools like the alternate Clang formatter, I have decided to replace the configuration that the code editor was using to automatically format the code in my C++ projects
  • cixtora59acb6Removed unnecessary color scheme for the code editor Following the release of a personalized syntax highlight color scheme named Monnokay at https://github.com/cixtor/monnokay based on Monokai the popular TextMate color theme; I have decided that this file provided by the "Music For Programming" project is no longer necessary
  • View comparison for these 5 commits
28 days ago
  • cixtorfc466baAdded project description and screenshot in front
28 days ago
cixtor created branch master at repos/cixtor
28 days ago
cixtor created repository cixtor 28 days ago
1 month ago
  • cixtorb398820Added scroll past end of file in main code editor This setting allows to extend the visual scroll of the text view past the end of the file to increase visibility, and to allow the execution of the shortcut "ctrl+k - ctrl+c" which centers the cursor to the center of the text view.
1 month ago
1 month ago
  • cixtor34c7ca2Modified logic of the settings in database checker The naming of the function used to check if the user has decided to keep using the database to store the plugin's settings was ambiguous; this adds a new function with a clear definition of the boolean check.
1 month ago
  • cixtorc7fbbe3Modified default value for the available updates alerts After complains from some users we decided to revert the default value for the availalbe plugin and themes email alerts back to "disabled" as we found that some web agencies have several WordPress websites running with outdated software and possibly not willing to update them all, so the notifications are being seen as annoying.
1 month ago
  • cixtor6794849Fixed undefined array and object keys in audit logs The audit logs is not responding if PHP is configured to be strict with the warnings, there is a missing initializator for an array key that was used to concatenate strings, as well as a read access to a non-existent object property.
1 month ago
  • cixtor74478d3Fixed incompatibilities with foreign API service responses I have found that the WordPress API service is returning different responses when the available updates endpoint for plugins is contacted, for instance, the property "tested" in the JSON object does not exists; this commit adds conditions to prevent unnecessary PHP warnings for non-existent object properties for the 3rd-party WordPress API service.
1 month ago
  • cixtorbd6ada3Added alias to download a top Internet domains list The command downloads a fresh copy of the top one milllion Internet domain names from the Alexa ranking service; the downloaded file is a Zip archive containing a single CSV file with two columns, the first one is the line counter, and the second one is the domain name in that position.
  • cixtor48355c9Modified notifications for the run on change command The command that executes custom commands when it detects changes in a directory was sending the same notifications no matter the result of the custom command; now if the command fails the notification sets critical as its urgency level and normal for the rest of exit codes.
  • cixtor31078b9Added alias with an example date following Go date format The Go programming language has an interesting idea to format dates via their standarad package "time" following query-by-example concept that can be resumed with: https://golang.org/pkg/time/#pkg-constants Go basically takes a sequence of numbers from one to seven: Example: Mon Jan 02 15:04:05 2006 1. Jan (month) 2. 02 (day) 3. 15 (hour) 4. 04 (minute) 5. 05 (second) 6. 2006 (year) 7. -0700 (timezone)
  • cixtorecfa58fAdded environment variable to set default EDITOR For systems with multiple terminal editors it is hard to interact with the popular version control tools because they all pick a different editor to explain a commit; now the default editor is set to use Vim which offers good syntax highlighting and word wrapping for multiline text in the commit messages, which by default is set to 72 characters.
  • cixtorb3e57dfAdded better Git commit with custom date expander The custom alias used to commit changes in a Git repository with a given date was too strict with the options, many of them were being ignored and consequently some nice features associated with the commit action were being dropped; now the alias relies entirely in the real control system tool and only the date parameter is override when a custom date is passed, otherwise the current date is used.
  • cixtora61f8abModified git log command with pretty history graph
  • View comparison for these 6 commits
1 month ago
  • cixtor0558514Added option for number of pages in WordPress tickets Up until now the tool that checks the number of unresolved tickets for a WordPress plugin was analyzing the first twenty pages, for new plugins this was obviously a problem because they do not have that many tickets and for big projects this was skipping the oldest pages; this commit adds an option to specify how many pages will be analyzed, by default the number of pages is set to ten.
  • cixtoraba6502Added more network locations in domain performance tool The domain performance tool now tests the connection time, time to first byte, and total time against servers in San Francisco, Toronto and India with a datacenter located in Bangalore; also standarized the title for the servers for Sao Paulo and Frankfurt.
  • cixtor6a86a99Modified domain connection time tester for readability Some of the conditions used to check if the JSON query tool, Curl, or the system notification dispatcher were too verbose, this commit changes the conditions to use the Unix utility "command", and adds redirections for unnecessary error messages to /dev/null for comodity.
  • cixtor3f9aa03Modified massive Git updater script to cleanup code Unnecessary nested conditions were simplified with exit codes for detected errors, colored strings were removed to improve the cross compatibility of the code, and the usage options were improved to clarify the available arguments.
  • cixtore727a11Modified coding standard for the massive Git updater An unnecessary clear command was removed from the top of the script, in some cases this command generates random garbage that some terminal emulators are not able to understand. Also added some fixes for the conditionals that were taking unescaped strings, and some spacing between code blocks.
  • cixtor023c5b6Fixed DNS lookup tool to prioritize last nameservers Up until now the DNS lookup tool was using the first NS record to extract one of the name servers associated with the domain, this causes in some rare cases to drop all the subsequent queries because the first name servers are usually place holders for the root zone file; this commit fixes this issue prioritizing the address associated with the last name server.
  • View comparison for these 6 commits
1 month ago
  • cixtoraf46d6aAdded development option to keep using the database Some power users have complained because they do not agree with the idea introduced in version 1.7.18 to force the plugin to store its settings in a plain text file for security reasons; I have decided to offer a way to go around this by defining a constant "SUCURI_SETTINGS_IN" with value "database" in the configuration file to force the plugin to keep using the database to store its settings.
1 month ago
  • cixtore95d668Added development option to keep using the database Some power users have complained because they do not agree with the idea introduced in version 1.7.18 to force the plugin to store its settings in a plain text file for security reasons; I have decided to offer a way to go around this by defining a constant "SUCURI_SETTINGS_IN" with value "database" in the configuration file to force the plugin to keep using the database to store its settings.
1 month ago
  • cixtor233854dAdded panel with information about the plugin settings Since version 1.7.18 the plugin started storing its settings in a plain text file located in the /wp-content/uploads/sucuri directory or the directory defined by the user with the SUCURI_DATA_STORAGE constant, some users raised complains that not using the database is a bad idea but in fact this is a good security measure to reduce the number of attacks against the database and to simplify the management of the settings for multisite installations; information about these changes and solutions for common issues were added with this commit.
1 month ago
  • cixtorf21d2e9Added conditional to prevent redeclaration of class Some users have reported that using APC and/or FastCGI causes an internal server error with the declaration of the class used to manage the code for the malware scanner settings; this is because APC has a bug that duplicates the autoloaders thinking that a class was defined twice, the only apparent solution is to set these settings: apc.include_once_override = 0 apc.canonicalize = 0 apc.stat = 0
  • cixtor24d9a07Fixed cache flush function used to delete datastore The function that flushes the content of the cache files was intended to take the information from the file and then reset its entries before the new content is written, leaving only the original headers; however, the piece of code that was supposed to reset the array of entries is missing
  • View comparison for these 2 commits
2 months ago
2 months ago
  • cixtor0a286c5Fixed regression with clear cache in firewall page After the replacement of the API request handler the plugin started to report errors related with the execution of the clear cache API endpoint associated with the CloudProxy API service, this is because the code is expecting an extra level in the JSON response that was removed when the HTTP request handler was implemented using Curl and raw Sockets
2 months ago
  • cixtor1d3ea0aFixed settings and audit logs for the firewall page The API request handler that was being used by the plugin to communicate with remote API services was replaced with a custom implementation using Curl and raw Sockets due to breaking changes with the upcoming WordPress release 4.6; this modification caused some issues with the code that was used to retrieve the settings from the CloudProxy API

Open-Source

I create and collaborate in open-source projects. And I'm happy to help Startups to build their products and/or services, converting their ideas in code.

High Quality

Enjoying the job is the first step to give excellent results in my work, and that's reflected in the products and services that I develop.

Top 1% Developer

I'm a top developer at the website CodeEval.com with 100% of accurasy in almost all the challenges available.

Send me a gift

If you like my work, if my projects are of use to you, if my articles are improving your knowledge, I wouldn't mind if you send me a gift in exchange.

Do you have a project idea? Let's make it together!