Bartosz Jarzyna

Backend programmer

Programowanie to moja pasja

Kilka słów o mnie

Pasjonat, perfekcjonista, realista - te określenia świetnie pasują do mojej osoby. Nazywam się Bartosz Jarzyna i jestem programistą. Zajmuję się programowaniem od roku 2006. W swojej pracy łączę entuzjazm typowy dla hobbysty z ciągłym dążeniem do perfekcji. Stawiam na czytelność i wydajność kodu oraz jego ponowne wykorzystywanie. Ciągle podnoszę swoje kwalifikacje ucząc się nowych zagadnień. Specjalizuję się w stronach internetowych oraz aplikacjach desktopowych. Mam również niewielkie doświadczenie w tworzeniu aplikacji mobilnych oraz programów niskiego poziomu.
Liczy się czytelność i prostota

Umiejętności

Web backendPHPPythonSQLMVC (Django, Yii)
5/54/54/55/5
Web frontendHTMLCSSJavascriptjQuery
5/54/54/54/5
ProgramowanieC++QtOOPAlgorytmika
4/54/55/54/5
InneGitBezpieczeństwo stronOptymalizacjaJęzyk angielski
4/54/55/54/5
Web backend
PHPPython
5/54/5
SQLMVC (Django, Yii)
4/55/5
Web frontend
HTMLCSS
5/54/5
JavascriptjQuery
4/54/5
Programowanie
C++Qt
4/54/5
OOPAlgorytmika
5/54/5
Inne
GitBezpieczeństwo stron
4/54/5
OptymalizacjaJęzyk angielski
5/54/5
Jakość na najwyższym poziomie

Życie osobiste

Gdy nie programuję zazwyczaj oddaję się swoim pozostałym pasjom. Uwielbiam rywalizację jaką oferują gry esportowe oraz szachy Lubię trzymać rękę na pulsie śledząc aktualne wydarzenia w polityce w kraju oraz w mniejszym stopniu za granicą Interesuje mnie również fizyka oraz ekonomia
Skontaktuj się ze mną

Masz pytanie lub ofertę? Napisz do mnie!

captcha

  bjarzyna.dev@gmail.com

  +48 737 925 380

class WidgetParser:
    allowed_args = ["name", "default"]
    class patterns:
        var_def_syntax = re.compile("^[ |\t]*__VAR.*__[ |\t|\r]*$", re.MULTILINE)
        var_def = re.compile("^[ |\t]*__VAR (?P.*)__[ |\t|\r]*$", re.MULTILINE)
        var_name = re.compile("^([a-zA-Z]((\w)?[a-zA-Z0-9])*?(?= |$))")
        var_arg = re.compile("(?P[a-z]*)=.(?P((?<=')[^']*?(?='))|((?<=\")[^\"]*?(?=\"))).")
        css_class = re.compile("([^}{]+)(?=\s*{)")
    
    def validate_string(string):
        variables = {}
        errors = []
        declarations = WidgetParser.patterns.var_def.findall(string)
        for var in declarations:
            var_attrs = WidgetParser.unpack_var(var)
            if not var_attrs:
                errors.append("Błąd składni - następująca deklaracja zmiennej jest niepoprawna: " + var)
            else:
                try:
                    x = variables[var_attrs["var"]]
                    errors.append("Błąd składni - ponowna deklaracja zmiennej: " + var_attrs["var"])
                except:
                    variables[var_attrs["var"]] = True
        return errors
        
    # Unpacking variable definitions
    def unpack_var(string):
        string = string.strip()
        var = WidgetParser.patterns.var_name.search(string)
        if var:
            string = string[var.end():]
            args = {"var": var.group(0)}
            while len(string):
                string = string.strip()
                match = WidgetParser.patterns.var_arg.match(string)
                if match:
                    if not match.group("name") in WidgetParser.allowed_args:
                        return None
                    args[match.group("name")] = match.group("value")
                    string = string[match.end():]
                else:
                    return None
            return args
        else:
            return None
            
    # Either WidgetVariable objects iterable or dictionary representing it (var as keys)                                    
    def replace_tags(widget, dict=None, objects=None, commit=False):
        if dict is None and objects is None:
            return False
        parsedhtml = widget.html
        parsedcss = widget.css
        if dict:
            for key, var in dict.items():
                parsedhtml = parsedhtml.replace("__"+key+"__", var[1])
                parsedcss = parsedcss.replace("__"+key+"__", var[1])
        elif objects:
            for item in objects:
                parsedhtml = parsedhtml.replace("__"+item.var+"__", item.value)
                parsedcss = parsedcss.replace("__"+item.var+"__", item.value)
        widget.parsedhtml = WidgetParser.remove_vars(parsedhtml)
        widget.parsedcss = WidgetParser.remove_vars(parsedcss)
        widget.get_class()
        if commit:
            widget.save()
        return widget
        
    def remove_vars(text):
        return WidgetParser.patterns.var_def_syntax.sub("",text).strip()
        
    def parse(widget, with_vars = True, commit = True):
        variables = {}
        declarations = WidgetParser.patterns.var_def.findall(widget.html+"\n"+widget.css)
        for var in declarations:
            var_attrs = WidgetParser.unpack_var(var)
            if not var_attrs:
                commit = False
            else:
                try:
                    x = variables[var_attrs["var"]]
                    commit = False
                except:
                    temp = [var_attrs["var"], ""]
                    try:
                        temp[0] = var_attrs["name"]
                    except:
                        pass
                    try:
                        temp[1] = var_attrs["default"]
                    except:
                        pass
                    variables[var_attrs["var"]] = temp
        if commit:
            if with_vars:
                dbvariables = widget.variables.all()
                save = variables.copy()
                for dbvar in dbvariables:
                    try:
                        variables[dbvar.var][1] = dbvar.value
                        del(save[dbvar.name])
                    except:
                        dbvar.delete()
                for key, wv in save.items():
                    admin.models.WidgetVariable(widget=widget, var=key, name=wv[0], value=wv[1]).save()   
            widget = WidgetParser.replace_tags(widget, dict = variables) or widget
            widget.save()
            
    def get_less(css, classname):
        return WidgetParser.patterns.css_class.sub("."+classname+" \\1", WidgetParser.remove_vars(css))
Strona używa cookies w celu poprawnego działania. Możesz zmienić ustawienia ciasteczek w opcjach przeglądarki. Kliknij na ten komunikat, aby go zamknąć.