Move post code chunks to Gists

Also, remove highlight specific things from style.sass
This commit is contained in:
Gergely Polonkai 2015-04-27 11:00:04 +02:00
parent 32fac1feae
commit 2f61b11a5a
11 changed files with 20 additions and 665 deletions

View File

@ -17,14 +17,6 @@ hosting the page yet. Until we get it in our hands, I did a trick.
I enabled `mod_rewrite`, `mod_proxy` and `mod_proxy_http`, then added the following
lines to my apache config:
{% highlight apache %}
RewriteEngine on
RewriteRule ^/$ http://172.16.72.131:8080/ [QSA,L,P]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*) http://172.16.72.131:8080/$1 [QSA,L,P]
Order allow,deny
Allow from all
{% endhighlight %}
{% gist gergelypolonkai/47680bfa44eb29708f20 %}
Im not totally sure its actually secure, but it works for now.

View File

@ -24,9 +24,7 @@ own role hierarchy service that implements `RoleHierarchyInterface`.
So far so good, first tests. It soon turned out that if `User::getRoles()`
returns a `DoctrineCollection` as it does by default, then the standard
{% highlight php %}
$this->get('security.context')->isGranted('ROLE_ADMIN');
{% endhighlight %}
{% gist gergelypolonkai/883ace4f35e440f6fe0f WhatEver.php %}
doesnt work. I know, it should not be hard coded, as my roles and permission
tables are dynamic, I have just tested. So I fixed my `User` entity so
@ -37,24 +35,12 @@ return the original collection, but I think it will never be used.
After that, I had to implement some more features so I put this task away.
Then, I tried to create my first ACL.
{% highlight php %}
$securityIdentity = new RoleSecurityIdentity('ROLE_ADMIN');
$objectIdentity = new ObjectIdentity('newsClass', 'Acme\\DemoBundle\\Entity\\News');
$acl = $aclProvider->createAcl($objectIdentity);
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
{% endhighlight %}
{% gist gergelypolonkai/883ace4f35e440f6fe0f WhatEver2.php %}
I was about to check if the user who is logged in has an `OWNER` permission on
the `User` class.
{% highlight php %}
$this->objectIdentity = new ObjectIdentity(self::OBJECT_ID, self::OBJECT_FQCN);
if ($this->securityContext->isGranted('OWNER', $this->objectIdentity) === false) {
throw new AccessDeniedException('You dont have the required permissions!');
}
{% endhighlight %}
{% gist gergelypolonkai/883ace4f35e440f6fe0f WhatEver3.php %}
The ACL was defined based on a role, so everyone who had the `ROLE_ADMIN` role
should gain access to the user listing page. But they didnt. It took several

View File

@ -17,10 +17,4 @@ the same name.
To change this, you will have to modify the `config.yml` file like this:
{% highlight yaml %}
session:
name: SiteSpecificSessionName
lifetime: 3600
{% endhighlight %}
I hope it helps some of you.
{% gist gergelypolonkai/c695670ecca2809f7c93 %}

View File

@ -13,44 +13,10 @@ author:
Few days ago I have struggled with a problem using Symfony2 configuration. I
wanted to add the following kind of configuration to `config.yml`:
{% highlight yaml %}
acme_demo:
transitions:
- { hc_cba: 180 }
- { cba_hc: -1 }
{% endhighlight %}
{% gist gergelypolonkai/30440e25f7a447730064 config.yml %}
The problem was that the stuff under `transitions` is dynamic, so those
`hc_cba` and `cba_hc` tags can be pretty much anything. After hitting many
errors, I came to the solution:
{% highlight php %}
<?php
$rootNode
->children()
->arrayNode('state_machine')
->requiresAtLeastOneElement()
->beforeNormalization()
->ifArray()
->then(function($values) {
$ret = array();
foreach ($values as $value) {
foreach ($value as $transition => $time) {
$ret[] = array('transition' => $transition, 'time' => e);
}
}
return $ret;
})
->end()
->prototype('array')
->children()
->scalarNode('transition')->end()
->scalarNode('time')->end()
->end()
->end()
->end()
->end()
;
{% endhighlight %}
{% gist gergelypolonkai/30440e25f7a447730064 DynarrayConfiguration.php %}

View File

@ -20,78 +20,9 @@ feature](https://developer.gnome.org/gobject/unstable/gtype-non-instantiable.htm
obvious. Making the long story short, I have checked with the `GIO` sources for
an example, and using that, I have created this small, working chunk:
{% highlight c %}
#ifndef __WMUD_CLIENT_STATE_H__
#define __WMUD_CLIENT_STATE_H__
{% gist gergelypolonkai/47794b6fb94484f8160b client-state.h %}
#include <glib-object.h>
/**
* WmudClientState:
* @WMUD_CLIENT_STATE_FRESH: Client is newly connected. Waiting for a login
* player name
* @WMUD_CLIENT_STATE_PASSWAIT: Login player name is entered, waiting for a
* login password
* @WMUD_CLIENT_STATE_MENU: Authentication was successful, player is now in the
* main game menu
* @WMUD_CLIENT_STATE_INGAME: Character login was successful, player is now
* in-game
* @WMUD_CLIENT_STATE_YESNO: Player was asked a yes/no question, and we are
* waiting for the answer. client.yesNoCallback MUST be set at this point!
* TODO: if wmudClient had a prevState field, and there would be some hooks
* that are called before and after the client enters a new state, this
* could be a three-state stuff, in which the player can enter e.g ? as
* the answer, so they would be presented with the question again.
* @WMUD_CLIENT_STATE_REGISTERING: Registering a new player. Waiting for the
* e-mail address to be given
* @WMUD_CLIENT_STATE_REGEMAIL_CONFIRM: E-mail address entered séms valid,
* waiting for confirmation
*
* Game client states.
*/
typedef enum {
WMUD_CLIENT_STATE_FRESH,
WMUD_CLIENT_STATE_PASSWAIT,
WMUD_CLIENT_STATE_MENU,
WMUD_CLIENT_STATE_INGAME,
WMUD_CLIENT_STATE_YESNO,
WMUD_CLIENT_STATE_REGISTERING,
WMUD_CLIENT_STATE_REGEMAIL_CONFIRM
} WmudClientState;
GType wmud_client_state_get_type (void) G_GNUC_CONST;
#define WMUD_TYPE_CLIENT_STATE (wmud_client_state_get_type())
#endif /* __WMUD_CLIENT_STATE_H__ */
{% endhighlight %}
{% highlight c %}
#include "wmudclientstate.h"
GType
wmud_client_state_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter(&g_define_type_id__volatile)) {
static const GEnumValue values[] = {
{ WMUD_CLIENT_STATE_FRESH, "WMUD_CLIENT_STATE_FRESH", "fresh" },
{ WMUD_CLIENT_STATE_PASSWAIT, "WMUD_CLIENT_STATE_PASSWAIT", "passwait" },
{ WMUD_CLIENT_STATE_MENU, "WMUD_CLIENT_STATE_MENU", "menu" },
{ WMUD_CLIENT_STATE_INGAME, "WMUD_CLIENT_STATE_INGAME", "ingame" },
{ WMUD_CLIENT_STATE_YESNO, "WMUD_CLIENT_STATE_YESNO", "yesno" },
{ WMUD_CLIENT_STATE_REGISTERING, "WMUD_CLIENT_STATE_REGISTERING", "registering" },
{ WMUD_CLIENT_STATE_REGEMAIL_CONFIRM, "WMUD_CLIENT_STATE_REGEMAIL_CONFIRM", "regemail-confirm" },
{ 0, NULL, NULL }
};
GType g_define_type_id = g_enum_register_static(g_intern_static_string("WmudClientState"), values);
g_once_init_leave(&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
{% endhighlight %}
{% gist gergelypolonkai/47794b6fb94484f8160b client-state.c %}
Still, it can be made more perfect by using the
[glib-mkenums](http://developer.gnome.org/gobject/stable/glib-mkenums.html)

View File

@ -14,13 +14,4 @@ Just insert it in your database, feed them two Google coordinates, and you get
the distance in kilometres. If you happen to need it in miles, change the
constant `12756.200` in the `RETURN` row to `7922.6` instead.
{% highlight sql %}
DELIMITER $$
CREATE FUNCTION `haversine` (lng1 FLOAT, lat1 FLOAT, lng2 FLOAT, lat2 FLOAT)
RETURNS float NO SQL DETERMINISTIC
BEGIN
SET @a = ABS(POWER(SIN(RADIANS(lat1 - lat2)) / 2, 2) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * POWER(SIN(RADIANS(lng1 - lng2)) / 2, 2));
RETURN 12756.200 * ATAN2(SQRT(@a), SQRT(1 - @a));
END$$
{% endhighlight %}
{% gist gergelypolonkai/bdad1cf2d410853bef35 %}

View File

@ -20,38 +20,7 @@ does the work for me. Its only requirements are git (of course), and the
`column` command, which is pretty obviously present on every POSIX
compliant systems (even OSX).
{% highlight sh %}
#! /bin/sh
COLUMN=`which column 2> /dev/null`
if test -z $COLUMN
then
echo "`column' is not found in PATH. Cannot continue."
exit 1
fi
current_branch=`git rev-parse --abbrev-ref HEAD`
for branch in $(git for-each-ref --shell --format='%(refname)' refs/heads | sed -e s/^\'refs\\/heads\\///-e s/\'$//)
do
remote=`git config branch.$branch.remote`
merge=`git config branch.$branch.merge | sed -e 's/^refs\/heads\///'`
[ x"$current_branch" == x"$branch" ] && echo -n '*'
echo -n "$branch"
if ! test -z $merge
then
echo -en "\t"
echo -n $remote
echo -n /
echo -n $merge
fi
echo
done | $COLUMN -t
{% endhighlight %}
{% gist gergelypolonkai/8af6a3e86b57dd4c250e %}
I just put it in my path, and `git branches-with-remotes` does the work!

View File

@ -20,14 +20,7 @@ In my other project,
method. The following two rules in `Makefile.am` create `gswe-enumtypes.h`
and `gswe-enumtypes.c`.
{% highlight make %}
gswe-enumtypes.h: $(gswe_enum_headers) gswe-enumtypes.h.template
$(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \
gswe-enumtypes.h.tmp && mv gswe-enumtypes.h.tmp gswe-enumtypes.h
gswe-enumtypes.c: $(gswe_enum_headers) gswe-enumtypes.h gswe-enumtypes.c.template
$(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \
gswe-enumtypes.c.tmp && mv gswe-enumtypes.c.tmp gswe-enumtypes.c
{% endhighlight %}
{% gist gergelypolonkai/1e2fdedb136de3ca67f0 Makefile %}
`$(GLIB_MKENUMS)` is set in `configure` with
`AC_PATH_PROG([GLIB_MKENUMS], [glib-mkenums])`.
@ -38,111 +31,6 @@ files, one for the header and one for the code. `$(gswe_enum_headers)`
contains a list of all the header files that have enum types defined
throughout the project.
{% highlight c %}
/*** BEGIN file-header ***/
/* gswe-enumtypes.h - Enumeration types for SWE-GLib
*
* Copyright © 2013 Gergely Polonkai
*
* SWE-GLib is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* SWE-GLib is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GSWE_ENUM_TYPES_H__
#define __GSWE_ENUM_TYPES_H__
#include <glib-object.h>
{% gist gergelypolonkai/1e2fdedb136de3ca67f0 gswe-enumtypes.h %}
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
#include "@filename@"
/*** END file-production ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type(void);
#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/
/*** BEGIN file-tail ***/
#endif /* __GSWE_ENUM_TYPES_H__ */
/*** END file-tail ***/
{% endhighlight %}
{% highlight c %}
/*** BEGIN file-header ***/
/* gswe-enumtypes.c - Enumeration types for SWE-GLib
*
* Copyright © 2013 Gergely Polonkai
*
* SWE-GLib is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* SWE-GLib is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include "swe-glib.h"
#include "gswe-enumtypes.h"
#include "@filename@"
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType
@enum_name@_get_type(void)
{
static volatile gsize g_define_type_id__volatile = 0;
gswe_init();
if (g_once_init_enter(&g;_define_type_id__volatile)) {
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{
@VALUENAME@,
"@VALUENAME@",
"@valuenick@"
},
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL }
};
GType g_define_type_id = g_@type@_register_static(
g_intern_static_string("@EnumName@"),
values
);
g_once_init_leave(&g;_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
/*** END value-tail ***/
{% endhighlight %}
{% gist gergelypolonkai/1e2fdedb136de3ca67f0 gswe-enumtypes.c %}

View File

@ -16,25 +16,7 @@ displayed in small size, so this amount of precision was irrelevant, and
these numbers took almost half of my SVG images size. So I created an
Elisp defun to round these numbers to 2 decimals:
{% highlight common-lisp %}
(defun get-number-at-point ()
(interactive)
(skip-chars-backward "0123456789.-")
(or (looking-at "[0123456789.-]+")
(error "No number at point"))
(string-to-number (match-string 0)))
(defun round-number-at-point-to-decimals (decimal-count)
(interactive "NDecimal count: ")
(let ((mult (expt 10 decimal-count)))
(replace-match (number-to-string
(/
(fround
(*
mult
(get-number-at-point)))
mult)))))
{% endhighlight %}
{% gist gergelypolonkai/9c721ceda6d3079b4f05 %}
This finds the first digit of the number under point (the cursor), and
reduces its digits to the given amount (or the number given with `C-u`). It

View File

@ -43,9 +43,4 @@ his local repository with the same technique).
[This StackOverflow answer](http://stackoverflow.com/a/17153598/1305139)
suggests the very same, but with some aliases:
{% highlight ini %}
[alias]
bisect-fixed = bisect bad
bisect-unfixed = bisect good
{% endhighlight %}
{% gist gergelypolonkai/a98f4aab84659d60364e %}

View File

@ -64,6 +64,10 @@ article.post
margin-top: .8em
margin-bottom: .5em
.gist-data
max-height: 300px
overflow: auto
body
background-color: $page-background
margin: 50px 0 0 0
@ -82,349 +86,6 @@ body
img
padding-right: 1em
.highlight
background-color: #fdf6e3
color: #586e75
padding: 10px
/* Line Numbers */
/* Make line numbers unselectable: excludes line numbers from */
/* copy-paste user ops */
.lineno
color: #93a1a1
-webkit-user-select: none
-moz-user-select: none
-o-user-select: none
.lineno::-moz-selection /* Mozilla specific */
background-color: transparent
.lineno::selection /* Other major browsers */
background-color: transparent
.code-title
text-indent: 0 !important
font-size: 120%
font-weight: bold
.code-description
border: 1px solid #333
background-color: #d9d9d9
padding: 3px
text-indent: 0 !important
margin: .5em 0 0 0 !important
font-size: 75%
color: #444
pre
font-family: monospace
padding: 5px
height: 300px
overflow: auto
color: #586e75
*
font-family: monospace
color: #586e75
code
/* Comment */
.c
color: #93a1a1
font-style: italic
/* Error */
.err
color: #586e75
/* Generic */
.g
color: #586e75
/* Keyword */
.k
color: #859900
font-weight: bold
/* Literal */
.l
color: #586e75
/* Name */
.n
color: #586e75
/* Operator */
.o
color: #859900
font-weight: bold
/* Other */
.x
color: #cb4b16
/* Punctuation */
.p
color: #586e75
/* Comment.Multiline */
.cm
color: #93a1a1
font-style: italic
/* Comment.Preproc */
.cp
color: #859900
font-weight: bold
/* Comment.Single */
.c1
color: #93a1a1
font-style: italic
/* Comment.Special */
.cs
color: #859900
font-weight: bold
font-style: italic
/* Generic.Deleted */
.gd
color: #2aa198
background-color: #ffdddd
/* Generic.Deleted.Specific */
.x
color: #000000
background-color: #ffaaaa
/* Generic.Emph */
.ge
color: #586e75
font-style: italic
/* Generic.Error */
.gr
color: #dc322f
/* Generic.Heading */
.gh
color: #cb4b16
/* Generic.Inserted */
.gi
color: #859900
/* Generic.Output */
.go
color: #586e75
/* Generic.Prompt */
.gp
color: #586e75
/* Generic.Strong */
.gs
color: #586e75
font-weight: bold
/* Generic.Subheading */
.gu
color: #cb4b16
/* Generic.Traceback */
.gt
color: #586e75
/* Keyword.Constant */
.kc
color: #cb4b16
font-weight: bold
/* Keyword.Declaration */
.kd
color: #268bd2
font-weight: bold
/* Keyword.Namespace */
.kn
color: #859900
/* Keyword.Pseudo */
.kp
color: #859900
font-weight: bold
/* Keyword.Reserved */
.kr
color: #268bd2
font-weight: bold
/* Keyword.Type */
.kt
color: #dc322f
font-weight: bold
/* Literal.Date */
.ld
color: #586e75
/* Literal.Number */
.m
color: #2aa198
/* Literal.String */
.s
color: #2aa198
/* Name.Attribute */
.na
color: #586e75
/* Name.Builtin */
.nb
color: #b58900
/* Name.Class */
.nc
color: #268bd2
font-weight: bold
/* Name.Constant */
.no
color: #cb4b16
/* Name.Decorator */
.nd
color: #268bd2
/* Name.Entity */
.ni
color: #cb4b16
/* Name.Exception */
.ne
color: #cb4b16
font-weight: bold
/* Name.Function */
.nf
color: #268bd2
font-weight: bold
/* Name.Label */
.nl
color: #586e75
/* Name.Namespace */
.nn
color: #586e75
/* Name.Other */
.nx
color: #586e75
/* Name.Property */
.py
color: #586e75
/* Name.Tag */
.nt
color: #268bd2
/* Name.Variable */
.nv
color: #268bd2
/* Operator.Word */
.ow
color: #859900
/* Text.Whitespace */
.w
color: #586e75
/* Literal.Number.Float */
.mf
color: #2aa198
/* Literal.Number.Hex */
.mh
color: #2aa198
/* Literal.Number.Integer */
.mi
color: #2aa198
/* Literal.Number.Oct */
.mo
color: #2aa198
/* Literal.String.Backtick */
.sb
color: #93a1a1
/* Literal.String.Char */
.sc
color: #2aa198
/* Literal.String.Doc */
.sd
color: #586e75
/* Literal.String.Double */
.s2
color: #2aa198
/* Literal.String.Escape */
.se
color: #cb4b16
/* Literal.String.Heredoc */
.sh
color: #586e75
/* Literal.String.Interpol */
.si
color: #2aa198
/* Literal.String.Other */
.sx
color: #2aa198
/* Literal.String.Regex */
.sr
color: #dc322f
/* Literal.String.Single */
.s1
color: #2aa198
/* Literal.String.Symbol */
.ss
color: #2aa198
/* Name.Builtin.Pseudo */
.bp
color: #268bd2
/* Name.Variable.Class */
.vc
color: #268bd2
/* Name.Variable.Global */
.vg
color: #268bd2
/* Name.Variable.Instance */
.vi
color: #268bd2
/* Literal.Number.Integer.Long */
.il
color: #2aa198
#keywords-button
font-size: 50%
color: #7f7f7f